J'ai donc une feuille Excel où je veux parcourir Sheet1 et trouver des paires de données similaires à Sheet2 . Donc, j'ai par exemple A1: B1 et j'ai besoin de trouver une ligne sur Sheet2 qui a exactement les mêmes valeurs les unes à côté des autres (mais cela pourrait être A33: B33 ou n'importe où) et copiez la ligne dans Sheet1 (dans la colonne C ou autre)
J'essaie également d'en faire une boucle dynamique pour qu'elle vérifie A1: B1 paire avec Sheet2 puis A2: B2 et ainsi de suite jusqu'à la dernière ligne.
Maintenant, le code que je possède vérifie uniquement si A1: B1 sur Sheet1 correspond à A1: B1 sur Sheet2 (mais pas n'importe où sur la feuille). De plus, je ne peux pas faire en sorte qu'il vérifie dynamiquement chaque ligne de Sheet1 (j'ai essayé de le faire avec le x = x + 1 mais cela ne fonctionne pas)
Voici mon code:
Sub matchme()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim r As Range
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
r = lastrow = sh1.Range("A" & Rows.Count).End(xlUp).Row
For x = 1 To r
If sh1.Range("A" & x) = sh2.Range("A" & x) And sh1.Range("B" & x) = sh1.Range("A" & x) & sh2.Range("B" & x) Then
sh1.Range("A" & x).EntireRow.Copy Destination:=sh2.Range("C" & x)
x = x + 1
Next x
End Sub
S'il vous plaît, aidez-moi, je me débat avec ça depuis des jours maintenant et je dois remettre un rapport d'ici la fin d’aujourd’hui, et je ne trouve rien d’utile sur Internet. J'apprécie vraiment tout conseil
4 Réponses :
Si vous souhaitez utiliser des boucles, essayez ceci:
Sub matchme()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim x As Long
Dim i As Long
Dim j As Long
Dim lastrow As Long
Dim lastRow2 As Long
Dim lastCol2 As Long
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
lastrow = sh1.Range("A" & Rows.Count).End(xlUp).Row
With sh2
lastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
lastCol2 = .Cells(1, Columns.Count).End(xlUp).Column
End With
For x = 1 To lastrow
For i = 1 To lastRow2
For j = 1 To lastCol2
If sh1.Cells(x, 1) = sh2.Cells(i, j) Then
If sh1.Cells(x, 2) = sh2.Cells(i, j + 1) Then
MsgBox "Found match!"
End If
End If
Next j
Next i
Next x
End Sub
Je n'ai pas testé cela.
J'ai supposé que vous recherchiez les valeurs de la feuille A dans la colonne A de la feuille 2 uniquement.
Lorsqu'une correspondance est trouvée, la valeur de la colonne C sur la feuille 2 est copié dans la colonne C de la feuille 1.
Sub x()
Dim rFind As Range, s As String, r As Range
With Sheet1
For Each r In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
Set rFind = Sheet2.Columns(1).Find(What:=r.Value, Lookat:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not rFind Is Nothing Then
s = rFind.Address
Do
If rFind.Offset(, 1).Value = r.Offset(, 1).Value Then
r.Offset(, 2).Value = rFind.Offset(, 2).Value
End If
Set rFind = Sheet2.Columns(1).FindNext(rFind)
Loop While rFind.Address <> s
End If
Next r
End With
End Sub
Essayez le code ci-dessous (commentaires dans le code):
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim r As Range
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
lastRow = sh1.Range("A" & Rows.Count).End(xlUp).Row
iLastRow = sh2.Range("A" & Rows.Count).End(xlUp).Row
For j = 1 To lastRow
For i = 1 To iLastRow
If sh1.Cells(j, 1) = sh2.Cells(i, 1) And sh1.Cells(j, 2) = sh2.Cells(i, 2) Then
sh1.Cells(i, 3) = "Write some information"
End If
'you don't need to increment loop variable "Next" does it for you
'also i is better suited for iterator name :)
Next
Next
Merci, mais y a-t-il un moyen de résoudre ce problème avec un script?
Vous pouvez utiliser la méthode
Findsans avoir à parcourir chaque cellule.Désolé, je n'ai pas bien compris la question lors de la première lecture, je n'ai pas lu correctement la boucle d'une ligne à l'autre. J'ai supprimé le commentaire: o) @SJR a raison, code utilisant des fonctions Excel comme
.findet.matchpar exemple@SJR mais si je devais utiliser Find, je ne pourrais pas changer dynamiquement les paires de données à vérifier sans boucle, n'est-ce pas? Pourriez-vous s'il vous plaît illustrer votre méthode avec un code, je ne suis pas trop familier avec Find and Match pour être honnête: o /
Je ne sais pas ce que vous voulez dire - j'ai publié un code ci-dessous, alors dites-moi comment vous vous en sortez.