Correspondance entre deux listes de données

Nog123 -  
pilas31 Messages postés 1878 Statut Contributeur -
Bonjour,

Je suis assez nouvelle sur VBA excel et je bloque sur une macro qui a été réalisée par quelqu'un d'autre et qui ne fonctionne pas réellement.

Voilà j'ai deux listes de données, sur excel, une avec des adresses de personnes dans la colonne O (cellule 1) et une autre où chaque adresse correspond à un critère souhaité dans la colonne IO (cellule 3). Normalement, une fois la macro executée, je devrai voir un "O" (oui) indiqué 4 colonne à droite de la cellule 1 (cad colonne S) à chaque fois que l'adresse de la cellule 1 correspond à celle de l'adresse de la cellule 3. Pourtant, quand j'exécute la macro, j'aboutis à un "O" sur toutes les cellules de la colonne S. Que faire ?

Voici la macro actuelle :

Sub Comparaison()
Application.ScreenUpdating = False
Dim Cellule1 As Range, Cellule2 As Range, Cellule3 As Range
Workbooks("Declarations.xls").Activate
For Each Cellule1 In Range("O3:O" & 354)
For Each Cellule2 In Range("IP3:IP" & 209)
If Cellule1 = Cellule2 Then
Cellule1.Offset(0, 2).Value = Cellule2.Offset(0, 1)
Exit For
End If
Next Cellule2
For Each Cellule3 In Range("IO3:IO" & 215)
If Cellule1 = Cellule3 Then
Cellule1.Offset(0, 4).Value = "O"
Exit For
End If
Next Cellule3
Workbooks("Declarations.xls").Activate
Next Cellule1
Application.ScreenUpdating = True
End Sub

Merci beaucoup pour votre aide
A voir également:

3 réponses

pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

Ce sont des boucles For imbriquées. Donc cette macro ne fait pas de comparaison ligne à ligne mais compare toutes les cellules de la colonne O (de la ligne 3 à 354) à toutes les cellules de la colonne IO (de la ligne 3 à 215)et si elle trouve dans IO une cellule identique elle met bien un "O" en colonne S. Donc si par exemple il y a des cellules non renseignées en fin des 2 listes il est normal qu'elle mette un O dans toutes les lignes de la fin.

3 remarques
1/La syntaxe
Range("O3:O" & 354)
est un peu curieuse on peut plus simplement écrire :
Range("O3:O354")

2/Il me semble que le deuxième activate ne sert à rien.
3/La macro compare aussi toutes les cellules de la colonne O avec toutes les cellules de la colonne IP et si il y a égalité recopie la valeur de la colonne IQ dans la colonne Q

Voilà mais apparemment, il n' y a pas de bug.
Maintenant, si le besoin n'est pas celui là, avec une decription du fonctionnement souhaité on pourra proposer des moifications de la macro.

A+
0
Nog123
 
Merci beaucoup pour votre réponse.

Mais du coup, si je veux que lorsque les cellules 1 sont vides, que les cellules 3 soient vides également et ne soient pas remplies par un "o". Qu'est-ce que je peux faire ?

Encore merci
0
pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

Alors, il faut essayer de remplacer tout simplement l'instruction :

If Cellule1 = Cellule3 Then

par

If Cellule1 <> "" And Cellule1 = Cellule3 Then

Cela doit régler le problème des "O" sur les cellules vide.

A+
0