Problème d'indice dans une double boucle

wil_2638 -  
 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.


2 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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


    0
  2. wil_2638
     
    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
    0