Problème VBA-excel _Comparer deux listes
Résolu
yo
-
xjl Messages postés 232 Date d'inscription Statut Membre Dernière intervention -
xjl Messages postés 232 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Quelqu'un pourrait-il me filer un coup de main?
Je souhaite comparer deux listes de données (une colonne de code avec une autre colonne de code) dans excel (en automatisant avec VBA)?
Si les codes sont identiques:correct, si ils sont différents:erreur.
quand traiter ce problème dans VBA?
Quelqu'un pourrait-il me filer un coup de main?
Je souhaite comparer deux listes de données (une colonne de code avec une autre colonne de code) dans excel (en automatisant avec VBA)?
Si les codes sont identiques:correct, si ils sont différents:erreur.
quand traiter ce problème dans VBA?
A voir également:
- Problème VBA-excel _Comparer deux listes
- Liste déroulante excel - Guide
- Nombre de jours entre deux dates excel - Guide
- Word et excel gratuit - Guide
- Concatener deux cellules excel - Guide
- Déplacer colonne excel - Guide
6 réponses
Salut,
ce code t'écrira dans une troisième colonne s'il y a erreur ou non, en espérant que ce soit ça que tu souhaites:
Sub Compare()
For i = 1 To Range("A1").End(xlDown).Row
If Cells(i, 1).Value = Cells(i, 2).Value Then
Cells(i, 3).Value = "Correct"
Else: Cells(i, 3).Value = "Erreur"
End If
Next i
End Sub
A adapter ! ;-)
ce code t'écrira dans une troisième colonne s'il y a erreur ou non, en espérant que ce soit ça que tu souhaites:
Sub Compare()
For i = 1 To Range("A1").End(xlDown).Row
If Cells(i, 1).Value = Cells(i, 2).Value Then
Cells(i, 3).Value = "Correct"
Else: Cells(i, 3).Value = "Erreur"
End If
Next i
End Sub
A adapter ! ;-)
bonjour,
par exemple comparer colonne A à B
sub Compare()
dim i as integer, V as integer
'déterminer la dernière ligne initialisée
V= Range("A65536").End(xlUp).Row
for i=1 to V
if range("A" & i).value <>range("B" & i).value then
msgbox "pas égale"
end if
next i
End SUB
A+
louis
par exemple comparer colonne A à B
sub Compare()
dim i as integer, V as integer
'déterminer la dernière ligne initialisée
V= Range("A65536").End(xlUp).Row
for i=1 to V
if range("A" & i).value <>range("B" & i).value then
msgbox "pas égale"
end if
next i
End SUB
A+
louis
Merci pour vos réponses si rapides les gas, on sent les pros...
Comme je t'attonne en VBA, je galère, bref
j'ai essayé vos réponses et en fait le problème est plus compliqué:
donc je compare deux colonnes(A et B).OK
Une valeur qui se trouve dans A doit se trouver dans la colonne B (elle peut se trouver n'importe ou dans la colonne B, si ce n'est pas le cas elle est fausse; et ce raisonnement pour toutes les valeurs de la colonne A (et le pire c'est que vice versa aussi mais laissons cela))
Je sais pas si je suis clair. Si je suis compris que je comprenne vos réponses .
Merci Quand même
Comme je t'attonne en VBA, je galère, bref
j'ai essayé vos réponses et en fait le problème est plus compliqué:
donc je compare deux colonnes(A et B).OK
Une valeur qui se trouve dans A doit se trouver dans la colonne B (elle peut se trouver n'importe ou dans la colonne B, si ce n'est pas le cas elle est fausse; et ce raisonnement pour toutes les valeurs de la colonne A (et le pire c'est que vice versa aussi mais laissons cela))
Je sais pas si je suis clair. Si je suis compris que je comprenne vos réponses .
Merci Quand même
Ok, on reprend:
Sub Compare()
n = 0
For i = 1 To Range("A1").End(xlDown).Row
For j = 1 To Range("B1").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
n = n + 1
Exit For
End If
Next j
Next i
If n = Range("A1").End(xlDown).Row Then MsgBox "Toutes les formules de la colonne A se trouvent en B"
Else MsgBox "Il y a " & Range("A1").End(xlDown).Row-n & " formules de la colonne A qui ne se trouvent pas en B"
End If
End Sub
Ca va déjà se rapprocher de ce que tu cherches je pense...
Sub Compare()
n = 0
For i = 1 To Range("A1").End(xlDown).Row
For j = 1 To Range("B1").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
n = n + 1
Exit For
End If
Next j
Next i
If n = Range("A1").End(xlDown).Row Then MsgBox "Toutes les formules de la colonne A se trouvent en B"
Else MsgBox "Il y a " & Range("A1").End(xlDown).Row-n & " formules de la colonne A qui ne se trouvent pas en B"
End If
End Sub
Ca va déjà se rapprocher de ce que tu cherches je pense...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
ce code ta donne le nombre de formules qu'il y a en A et qui ne sont pas en B et inversement.
Problème, il ne gère pas les doublons, donc si tes formules sont une seule fois dans chaque colonne, ça marche bien, sinon il faudra modifier un peu...
Sub Compare()
n = 0
m = 0
For i = 75 To Range("A75").End(xlDown).Row
For j = 75 To Range("B75").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
n = n + 1
Exit For
End If
Next j
Next i
For i = 75 To Range("B75").End(xlDown).Row
For j = 75 To Range("A75").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
m = m + 1
Exit For
End If
Next j
Next i
If n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Toutes les formules se trouvent dans les deux colonnes"
ElseIf n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m <> Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
ElseIf n <> Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
Else: MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
End If
End Sub
ce code ta donne le nombre de formules qu'il y a en A et qui ne sont pas en B et inversement.
Problème, il ne gère pas les doublons, donc si tes formules sont une seule fois dans chaque colonne, ça marche bien, sinon il faudra modifier un peu...
Sub Compare()
n = 0
m = 0
For i = 75 To Range("A75").End(xlDown).Row
For j = 75 To Range("B75").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
n = n + 1
Exit For
End If
Next j
Next i
For i = 75 To Range("B75").End(xlDown).Row
For j = 75 To Range("A75").End(xlDown).Row
If Cells(i, 1).Value = Cells(j, 2).Value Then
m = m + 1
Exit For
End If
Next j
Next i
If n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Toutes les formules se trouvent dans les deux colonnes"
ElseIf n = Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m <> Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
ElseIf n <> Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count And m = Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
Else: MsgBox "Il y a " & Range(Range("A75"), Range("A75").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B75"), Range("B75").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
End If
End Sub
merci, je suis en train de détailler tes réponses pour bien les comprendre...
Par contre concernant mon problème qui touche à sa fin c'est que:
ma colonne A a des codes de ce style:
BA0001A
BA0001B
BA0001C
BA0002B
BA0003A
BA0006A
...
ma colonne B a des codes de ce style:
BA0001
BA0002
BA0004
BA0005...
DONC je suis obligé d'enlever la dernière lettre des codes de la colonne A pour les comparer à B et dans l'exemple le code BA0001 est correct, le code BA0003(A) est faux (pas d'équivalent dans la colonne B) et le code BA0005 est faux (pas d'équivalent dans la colonne A)
Kapish, je sais ça devient alambiqué
Par contre concernant mon problème qui touche à sa fin c'est que:
ma colonne A a des codes de ce style:
BA0001A
BA0001B
BA0001C
BA0002B
BA0003A
BA0006A
...
ma colonne B a des codes de ce style:
BA0001
BA0002
BA0004
BA0005...
DONC je suis obligé d'enlever la dernière lettre des codes de la colonne A pour les comparer à B et dans l'exemple le code BA0001 est correct, le code BA0003(A) est faux (pas d'équivalent dans la colonne B) et le code BA0005 est faux (pas d'équivalent dans la colonne A)
Kapish, je sais ça devient alambiqué
Dans ce cas, dans la partie suivante tu dois effectuer une petite modif:
For i = 75 To Range("A75").End(xlDown).Row
For j = 75 To Range("B75").End(xlDown).Row
If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
n = n + 1
Exit For
End If
Next j
Next i
For i = 75 To Range("B75").End(xlDown).Row
For j = 75 To Range("A75").End(xlDown).Row
If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
m = m + 1
Exit For
End If
Next j
Next i
Du coup il ne va comparer que les 6 premiers caractères de chaque chaine contenue dans les cellules... ;-)
For i = 75 To Range("A75").End(xlDown).Row
For j = 75 To Range("B75").End(xlDown).Row
If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
n = n + 1
Exit For
End If
Next j
Next i
For i = 75 To Range("B75").End(xlDown).Row
For j = 75 To Range("A75").End(xlDown).Row
If Left(Cells(i, 1).Value,6) = Left(Cells(j, 2).Value,6) Then
m = m + 1
Exit For
End If
Next j
Next i
Du coup il ne va comparer que les 6 premiers caractères de chaque chaine contenue dans les cellules... ;-)
Essaye comme ça et regarde si ça te va:
Sub Compare()
n = 0
m = 0
Application.ScreenUpdating = False
ActiveSheet.Range(Range("A1"), Range("A1").End(xlDown).Address).Copy
ActiveSheet.Paste Destination:=ActiveSheet.Range("C1")
ActiveSheet.Range(Range("B1"), Range("B1").End(xlDown).Address).Copy
ActiveSheet.Paste Destination:=ActiveSheet.Range("D1")
Application.CutCopyMode = False
For i = 1 To Range("A1").End(xlDown).Row
For j = 1 To Range("B1").End(xlDown).Row
If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
n = n + 1
Cells(i, 3).Value = ""
Exit For
End If
Next j
Next i
For i = 1 To Range("B1").End(xlDown).Row
For j = 1 To Range("A1").End(xlDown).Row
If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
m = m + 1
Cells(i, 4).Value = ""
Exit For
End If
Next j
Next i
If n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Toutes les formules se trouvent dans les deux colonnes"
ElseIf n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m <> Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
ElseIf n <> Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
Else: MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
End If
Application.ScreenUpdating = True
End Sub
Sub Compare()
n = 0
m = 0
Application.ScreenUpdating = False
ActiveSheet.Range(Range("A1"), Range("A1").End(xlDown).Address).Copy
ActiveSheet.Paste Destination:=ActiveSheet.Range("C1")
ActiveSheet.Range(Range("B1"), Range("B1").End(xlDown).Address).Copy
ActiveSheet.Paste Destination:=ActiveSheet.Range("D1")
Application.CutCopyMode = False
For i = 1 To Range("A1").End(xlDown).Row
For j = 1 To Range("B1").End(xlDown).Row
If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
n = n + 1
Cells(i, 3).Value = ""
Exit For
End If
Next j
Next i
For i = 1 To Range("B1").End(xlDown).Row
For j = 1 To Range("A1").End(xlDown).Row
If Left(Cells(i, 1).Value, 6) = Left(Cells(j, 2).Value, 6) Then
m = m + 1
Cells(i, 4).Value = ""
Exit For
End If
Next j
Next i
If n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Toutes les formules se trouvent dans les deux colonnes"
ElseIf n = Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m <> Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A et toutes les formules de A se trouvent en B"
ElseIf n <> Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count And m = Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count Then
MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et toutes les formules de B se trouvent en A"
Else: MsgBox "Il y a " & Range(Range("A1"), Range("A1").End(xlDown).Address).Rows.Count - n & " formules de la colonne A qui ne se trouvent pas en B et " & Range(Range("B1"), Range("B1").End(xlDown).Address).Rows.Count - m & " formules de la colonne B qui ne se trouvent pas en A"
End If
Application.ScreenUpdating = True
End Sub