Signaler

Problème d'indice dans une double boucle

Posez votre question wil_2638 - Dernière réponse le 17 juil. 2017 à 22:52 par wil_2638
Bonjour,

j'effectue une petite macro qui fonctionne avec deux boucles
j'essaye de parcourir deux fichiers sur deux feuilles
lorsque les conditions sont remplis, je copy le contenu de la feuille 1 celulle "AD"&i
puis je l'affecte à la cellule C2 de la feuille 3
le problème est que avec les indices(AD&i) je n'arrive pas a affecter le contenu la feuille 1 cellule AD&i à la cellule C2 feuille 3

alors que sans indice exemple AD3 cella fonctionne

Sub test()

Dim i, j As Integer



For i = 2 To 7

     For j = 2 To 7
     If Worksheets("feuil1").Range("c" & i).Value = Worksheets("feuil2").Range("c" & j).Value And Worksheets("feuil1").Range("D" & i).Value = Worksheets("feuil2").Range("D" & j).Value  then

    

    Worksheets("feuil3").Range("C2").Value = Worksheets("feuil1").Range("AD" & i).Value
    
   
     
     Else: Worksheets("feuil3").Range("B1") = "A"
     End If
     
     
     Next
  



Next

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


Utile
+0
plus moins
Bonsoir Wil, bonsoir le forum,

Le problème avec ta boucle qui revoie sur des adresses fixes B1 et C2 c'est que ça sera toujours la dernière valeur qui vérifie la condition en C2 et la dernière valeur qui ne vérifie pas la condition en B1. Autrement dit, pourquoi une boucle puisque les anciennes données sont écrasée ?

Si j'ai bien compris ce que tu voudrais, j'écrirais comme ça :

Sub TEST()
Dim O1 As Worksheet
Dim O2 As Worksheet
Dim O3 As Worksheet
Dim I As Byte
Dim J As Byte
Dim TEST As Boolean

Set O1 = Worksheets("Feuil1")
Set O2 = Worksheets("Feuil2")
Set O3 = Worksheets("Feuil3")
For I = 2 To 7
    For J = 2 To 7
        If O1.Range("c" & I).Value = O2.Range("c" & J).Value And O1.Range("D" & I).Value = O2.Range("D" & J).Value Then
            LI = I: TEST = True: Goto suite
        End If
    Next J
Next I
suite:
If TEST = True Then
    O3.Range("C2").Value = O1.Range("AD" & LI).Value
Else
    O3.Range("B1") = "A"
End If
End Sub


Donnez votre avis
Utile
+0
plus moins
bonjour

j'ai simplifié mes conditions pour faire simple
je te remercie de ton aide mes je ne comprends pas trop ton explication
dans mon test j'ai fais en sorte que la condition Worksheets("feuil1").Range("B" & i) = Worksheets("feuil2").Range("B" & j)
se vérifie une seule fois
Je veux comparer la cellule B2 de la feuille 1 au cellule B2 jusqu'à B7 de la feuille 3.
puis répèter la même action pour la cellule B3 de la feuille 1


Sub test()

Dim i, j As Integer

For i = 2 To 7


For j = 2 To 7
If Worksheets("feuil1").Range("B" & i) = Worksheets("feuil2").Range("B" & j) Then


Worksheets("feuil3").Range("C2").Value = Worksheets("feuil1").Range("AD"&i).Value


Else: Worksheets("feuil3").Range("B1") = "A"
End If


Next
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !