[VBA] Comparer les valeurs de deux listes
Résolu
adrienew
Messages postés
3
Statut
Membre
-
adrienew Messages postés 3 Statut Membre -
adrienew Messages postés 3 Statut Membre -
Bonjour,
Je suis débutant depuis quelques jours en VBA et je me trouve face à un problème que je ne parviens pas à résoudre malgré de longues recherches.
J'ai deux colonnes sur deux feuilles différentes, certaines cellules de la colonne 1 (feuille 1) ont la même valeur que des cellules de la colonne 2 (feuille 2).
Je souhaite écrire un code qui dise "pour chaque cellule x de la colonne 1, vérifier si la valeur est présente dans la colonne 2, si ce n'est pas le cas => supprimer la ligne contenant la cellule x".
J'ai écris ceci mais ça ne fonctionne pas ("l'indice n'appartient pas à la sélection"), pourriez-vous m'aider ?
Merci d'avance
Adrien
Sub Compare()
Dim j As Integer
Dim i As Integer
For i = 50 To 2 Step -1
For j = 2 To 50
If Range("A" & i).Value <> ThisWorkbook.Sheets("Feuil2").Range("A" & j).Value Then
Rows(i).Delete
End If
Next j
Next i
End Sub
Je suis débutant depuis quelques jours en VBA et je me trouve face à un problème que je ne parviens pas à résoudre malgré de longues recherches.
J'ai deux colonnes sur deux feuilles différentes, certaines cellules de la colonne 1 (feuille 1) ont la même valeur que des cellules de la colonne 2 (feuille 2).
Je souhaite écrire un code qui dise "pour chaque cellule x de la colonne 1, vérifier si la valeur est présente dans la colonne 2, si ce n'est pas le cas => supprimer la ligne contenant la cellule x".
J'ai écris ceci mais ça ne fonctionne pas ("l'indice n'appartient pas à la sélection"), pourriez-vous m'aider ?
Merci d'avance
Adrien
Sub Compare()
Dim j As Integer
Dim i As Integer
For i = 50 To 2 Step -1
For j = 2 To 50
If Range("A" & i).Value <> ThisWorkbook.Sheets("Feuil2").Range("A" & j).Value Then
Rows(i).Delete
End If
Next j
Next i
End Sub
2 réponses
-
Bonjour,
Code ameliore:
Sub Compare() Dim i As Integer Dim col_2 As Range 'Definition plage de cellules en memoire pour vitesse execution Set col_2 = Worksheets("feuil2").Range("A1:A50") With ThisWorkbook.Sheets("Feuil1") For i = 50 To 2 Step -1 'Test si valeur cellule feuil1!=Ax est dans Plage col_2(feuil2!A1:A50)) If Application.CountIf(col_2, .Range("A" & i).Value) = 0 Then 'Delete ligne i feuil1 .Rows(i).Delete End If Next i End With End Sub
Pour votre code il faut indiquer quelle feuille pour la liste feuille1 et pour la ligne a deleter.
Bonne fete de fin d'annee -
Yeees ça fonctionne !
(au début le code amélioré ne fonctionnai pas, mais en supprimant les . devant "Range("A" & i)" et "Rows(i).Delete" tout marche bien)
Merci beaucoup pour votre aide et bonnes fêtes.
Adrien-
Re,
Il fallait simplement changer le nom de la feuille, ici c'est feuil1 pour vous c'est ....
En enlevant le point devant Range("A" & i) et Rows(i).Delete, si vous sélectionnez une autre feuille, avant de lancer le code, vous allez supprimer des colonnes sur la feuille active pas celle que vous voulez!!!!!!!! -
-