Problème VBA-excel _Comparer deux listes [Résolu/Fermé]

Signaler
-
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
-
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?

6 réponses

Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 106
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
Messages postés
1
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
10 mai 2007

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
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172
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...
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172
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
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é
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172
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... ;-)
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
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172
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
>
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007

Merci beaucoup xjl
Mission accomplie, ça marche.
>
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007

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
Messages postés
232
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
12 juin 2007
172 > Y0
Normalement ça fonctionne, le seul truc qui n'est pas géré c'est les doublons.

En fait au début il copie l'intégralité de la colonne A dans la colonne 3 et la colonne B dans la colonne 4, puis durant les deux boucles, il supprime des colonnes ainsi créées les formules qu'il retrouve en double. Ainsi on se retrouve avec en colonne 3 les formules en A que l'on ne retrouve pas en B et en colonne 4 les formules en B qu'on ne retrouve pas en A...

S'il ne t'affiche rien dans la colonne 4, c'est qu'a priori toutes les formules de B sont en A...

S'il reste un problème, tiens-moi au courant !