IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

utiliser "If .Range("I" & f).Value <> 0 Then" avec plusieur arguments [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut utiliser "If .Range("I" & f).Value <> 0 Then" avec plusieur arguments
    Bonsoir,

    Tout est dans la question.
    Comment mettre plusieurs arguments dans cette expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("I" & f).Value <> 0 Then
    Du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("I","F" & f).Value <> 0 Then
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("I" & f, "F" & f).Value <> 0 Then
    ou bien d'autres a vrai dire...mais sans résultat.

    J'ouvre ce topic juste pour cela (et laisse ouvert l'ancien)car après plusieurs tentative cela me génère toujours une erreur...

    Merci d'avance pour votre aide.

    Cordialement

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Suite à ton précédent post, on aura à faire à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Byte
    With Sheets("1 à 25")
        For i = 10 To 59
            On Error Resume Next
            If .Range("F" & i).Value + .Range("I" & i).Value + .Range("L" & i).Value + .Range("O" & i).Value + .Range("R" & i).Value <> 0 Then Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(i Mod 2 = 0, .Range("A" & i).Value, .Range("A" & i - 1).Value)
            On Error GoTo 0
        Next i
    End With
    Edit: + à la place de *
    si tu as toujours des valeurs >=0
    sinon le test sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("F" & i).Value <> 0 Or .Range("I" & i).Value <> 0 Or .Range("L" & i).Value <> 0 Or .Range("O" & i).Value <> 0 Or .Range("R" & i).Value <> 0

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Bonsoir Mercatog,

    (Tout d'abord merci d'etre une fois de plus là...)

    En fait, ce n'est pas tout a fais ça...

    Clairement (je m'excuse d'avance si je n'ai pas été clair la premiere fois...):

    Si "F10"<>0 alors je copie la valeur de "A10" dans la cellule "A1" de la new feuil, et je copie la valeur de "D10"(cellule 2 fois a gauche) dans la cellule "C1" de la new feuil.
    J'ai trouvé comment faire cela.
    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim f As Byte
    With Sheets("1 à 25")
       For f = 10 To 59
            If .Range("F" & f).Value <> 0 Then Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("A" & f).Value, .Range("A" & f - 1).Value): Sheets("resume").Cells(Rows.Count, 3).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("D" & f).Value, .Range("D" & f).Value)
        Next f
    End With
    n.b: je ne peux pas faire un "With .Range("F" & f).Value <> 0" car cela genere une reeur du type "Next sans For"...bizarre.

    Là où ça se corse, c'est pour lui dire "et/ou" c-a-d dans le cas où plusieurs cellules de la ligne 10 sont différentes de 0 (comme "F10" et "I10" par exemple).

    j'ai donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Sheets("1 à 25")
        For f = 10 To 59
            If .Range("F" & f).Value <> 0 Then Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("A" & f).Value, .Range("A" & f - 1).Value): Sheets("resume").Cells(Rows.Count, 3).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("D" & f).Value, .Range("D" & f).Value)
        Next f
     
        For f = 10 To 59
            If .Range("I" & f).Value <> 0 Then Sheets("resume").Cells(Rows.Count, 5).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("G" & f).Value, .Range("G" & f).Value)
        Next f
    End With
    Mais cela ne fonctionne correctement que si les 2 cellules sont differentes de zero car si seule la cellule "I10"<>0 alors je ne copie/colle que la valeur de la cellule "2 fois a gauche sans celle de "A10".

    Merci d'avance encore une fois.

    n.b:je mets comme résolu l'ancien post.

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    peut être ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Sheets("1 à 25")
        For f = 10 To 59
            If .Range("F" & f).Value <> 0 Then
                Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("A" & f).Value, .Range("A" & f - 1).Value)
                Sheets("resume").Cells(Rows.Count, 3).End(xlUp)(2).Value = .Range("D" & f).Value
            ElseIf .Range("I" & f).Value <> 0 Then
                Sheets("resume").Cells(Rows.Count, 5).End(xlUp)(2).Value = .Range("G" & f).Value
            End If
        Next f
    End With

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Re,

    En effet, je n'ai plus l'erreur "Next sans For" donc c'est moi qui devait faire une mauvaise manip...

    Le pb est que cela fonctionne dans le cas où juste "F10"<>O.
    Si juste "I10"<>O alors cela ne copie pas la "A10" en "A1".

    De plus, il faut enlever le "-1" a la fin dans le cas où c'est "F11"<>O.

    J'ai donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Sheets("1 à 25")
        For f = 10 To 59
            If .Range("F" & f).Value <> 0 Then
                Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("A" & f).Value, .Range("A" & f - 1).Value)
                Sheets("resume").Cells(Rows.Count, 3).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("D" & f).Value, .Range("D" & f).Value)
            ElseIf .Range("I" & f).Value <> 0 Then
                Sheets("resume").Cells(Rows.Count, 1).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("A" & f).Value, .Range("A" & f - 1).Value)
                Sheets("resume").Cells(Rows.Count, 5).End(xlUp)(2).Value = IIf(f Mod 2 = 0, .Range("G" & f).Value, .Range("G" & f).Value)
            End If
        Next f
    End With
    Cela fonctionne mais seulement dans le cas ou j'ai juste "I10"(ou "I11" ou "F10" ou "F11")<>0.
    Lorsque j'ai les deux cellules <>O (c-a-d "F10" et "I10" par exemple) alors il ne copie que la valeur de "A10" et "D10", il manque donc la valeur de "G10"...

    Je sais que c'est un peu tordu....

    Clairement:exemple
    si sur feuil(1 à 25):
    A10 / F10 / I10 / L10 / O10 / R10
    1 / <>0 / <>0 / =0 / <>0 / =0

    alors sur l'autre feuil(resume):
    A1 / C1 / E1 / G1 / H1 / J1
    1 / "D10".Val/ "G10".Val/ " " / "M10".Val / " "

    Les slash represente les separations.

    Je pense que cet exemple est plus clair que tout les discours que j'ai eu depuis le début.

    C'est pour montrer que plusieurs cas sont possible.

    J'espere avoir été plus clair et donc moins confus dans l'objectif de mon code...

    Merci d'avance pour tes commentaires.

    Cordialement

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Explications incompréhensibles désolé

    fais un fichier test avec les données initiales et le résultat souhaité

    ce fichier devra comporter TOUS les cas de figures

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de pthread_create avec plusieurs arguments
    Par Red Sno dans le forum Bibliothèques, systèmes et outils
    Réponses: 5
    Dernier message: 11/12/2012, 18h01
  2. [XL-2003] Utiliser la methode Range pour les valeurs d un tableau ?
    Par cecyl dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/07/2010, 06h45
  3. Utiliser l'objet "Range" dans une variable
    Par lecter85 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2010, 10h06
  4. Utilisation d'un range sous Access et fermeture Excel
    Par Marie_ dans le forum VBA Access
    Réponses: 5
    Dernier message: 27/03/2009, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo