Problème VBA-excel _Comparer deux listes

Résolu/Fermé
yo - 10 mai 2007 à 16:03
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 - 14 mai 2007 à 08:16
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?
A voir également:

6 réponses

xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
10 mai 2007 à 16:10
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 ! ;-)
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
10 mai 2007 à 16:16
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
0
Y0 Messages postés 1 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 10 mai 2007
10 mai 2007 à 17:38
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
0
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
10 mai 2007 à 18:01
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
11 mai 2007 à 09:00
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
0
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é
0
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
11 mai 2007 à 09:59
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... ;-)
0
ouais ça touche à sa fin...
avec ton code, il compare les deux listes
maintenant l'idéal serait qu'il me note dans une autre colonne les codes de la colonne A qui ne se trouve pas dans B et dans une autre colonne les codes de la colonne B qui ne setrouve pas dans A
0
avec ton code, il compare les deux listes
maintenant l'idéal serait qu'il me note dans une autre colonne les
codes de la colonne A qui ne se trouve pas dans B et dans une autre colonne
les codes de la colonne B qui ne setrouve pas dans A
0
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
11 mai 2007 à 10:56
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
0
Y0 > xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007
11 mai 2007 à 11:10
Merci beaucoup xjl
Mission accomplie, ça marche.
0
Y0 > xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007
11 mai 2007 à 13:51
ce code est presque bon en fait:
Problème de comparaison dans un sens de la colonne B vers la colonne A
- il se trompe
- il marque pas dans une autre colonne les codes de la colonne B n'ayant pas d'équivalent
0