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
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?
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
- Si et excel - Guide
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
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 ! ;-)
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 ! ;-)
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
10 mai 2007 à 16:16
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
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
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
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
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
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
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...
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
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
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
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é
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
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... ;-)
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... ;-)
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
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
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
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
11 mai 2007 à 11:10
Merci beaucoup xjl
Mission accomplie, ça marche.
Mission accomplie, ça marche.
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
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
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