Comparer deux séries de valeurs

Jerem356

XLDnaute Nouveau
Bonjour à tous.

Dans le fichier joint, je veux comparer mes valeurs de la colonne A de la feuille 1 et celles de la feuille 2, et ensuite supprimer les lignes de la feuille 1 dont la valeur en colonne A n'apparaît pas en feuille 2. J'ai essayé d'adapter un code trouvé sur le net qui me semble bon, mais ça ne fonctionne pas.

Merci d'avance de votre aide,
Jérémy
 

Pièces jointes

  • forum_Jerem356.xls
    208.5 KB · Affichages: 33
G

Guest

Guest
Re : Comparer deux séries de valeurs

Bonjour

Vois si cela te convient.

Code:
Sub SupprLignes()
Dim plg1 As Range, plg2 As Range
Dim plgToDelete As Range
Dim nb As Variant
    'Définition de la première plage
    With Sheets("Feuil1")
        Set plg1 = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    End With
    
    'Définition de la seconde plage
    With Sheets("Feuil2")
        Set plg2 = .Range("A2:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
    End With
    'parcourir toutes les cellules de la première plage pour
    'les chercher dans la seconde
    'utilisation de la fonction nb.si (CountIf)
    For Each c In plg1
        'Si nb.si = 0
        If Application.CountIf(plg2, c) = 0 Then
            'Alors on l'ajoute à la plage qui sera supprimée
            'on créer d'abord la plage si elle n'existait pas encore
            'sinon ->> erreur
            If plgToDelete Is Nothing Then
                Set plgToDelete = c
            Else
                Set plgToDelete= Union(plgToDelete, c)
            End If
        End If
    Next
    If Not plgToDelete Is Nothing Then plgToDelete.EntireRow.Delete
End Sub

Et bonjour à Brest ma ville d'origine.

A+
[edition] la suppression en une seule fois permet d'augmenter les performances.
Salut efgé
 
Dernière modification par un modérateur:

Efgé

XLDnaute Barbatruc
Re : Comparer deux séries de valeurs

Bonjour Jerem 356
Quelques erreurs:
Tu utilise la variable Dl1 (Dl1 = F1.Range("A65536").End(xlUp).Row) et ensuite, faute de frappe, tu utilise D11 (For i = D11 To 2 Step -1)
Les références en colonnes A de la feuilles 1 sont suivies par des espaces, pas en feuille 2, donc tu ne trouve pas les bons numéros.
La plage de recherche n'est pas correctement renseignée: f2.Range("A2:A" & Dl2) n'est pas la bonne syntaxe
Il est préférable de déclarer tes variables.
VB:
Sub SupprLignes()
Dim i&, Dl1&, Dl2&, F1 As Worksheet, F2 As Worksheet
Set F1 = Sheets(1)
Set F2 = Sheets(2)
Dl1 = F1.Range("A65536").End(xlUp).Row
Dl2 = F2.Range("A65536").End(xlUp).Row
For i = Dl1 To 2 Step -1
   valu1 = Trim(F1.Range("A" & i).Value)
   Set valu2 = F2.Range("A:A").Find(What:=valu1, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
   If valu2 Is Nothing Then F1.Rows(i).Delete
Next i
End Sub
Cordialement

EDIT Bonjour Hasco :) , bing, désolé.
 

ROGER2327

XLDnaute Barbatruc
Re : Comparer deux séries de valeurs

Bonjour à tous.


La procédure fonctionne si on écrit​
Code:
     For i = Dl1 To 2 Step -1
au lieu de
Code:
     For i = D11 To 2 Step -1


Bonne journée.


ROGER2327
#6644


Mardi 24 Palotin 140 (Sainte Lumelle, écuyère - fête Suprême Quarte)
24 Floréal An CCXXI, 3,5905h - valériane
2013-W20-1T08:37:02Z
 

pierrejean

XLDnaute Barbatruc
Re : Comparer deux séries de valeurs

Bonjour Jerem356

2pb
1)ne pas confondre l et 1 (ni D11 et Dl1)
2)traquer les espaces en trop (d'ou le Trim)

Code:
Sub SupprLignes()
     Set f1 = Sheets(1)
     Set f2 = Sheets(2)
     Dl1 = f1.Range("A65536").End(xlUp).Row
     Dl2 = f2.Range("A65536").End(xlUp).Row
     'f2.Activate
     For i = Dl1 To 2 Step -1
        valu1 = Trim(f1.Range("A" & i))
        'Range("A2").Select
        MsgBox (valu1)
        'Set valu2 = f2.Range("A2:A" & Dl2).Find(What:=valu1, MatchCase:=False)
        Set valu2 = f2.Range("A2:A" & Dl2).Find(What:=valu1, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
        'valu est la valeur de la feuille 1 que l'on va chercher dans la plage de la feuille 2
        If valu2 Is Nothing Then
           f1.Rows(i).Delete
          'si le numéro n'existe pas dans B alors on supprime la ligne dans A
        End If
    Next
End Sub

Edit Salut ami ROGER
Re Edit : Salut Hasco Efgé
 
Dernière édition:

Jerem356

XLDnaute Nouveau
Re : Comparer deux séries de valeurs

Bonjour à tout les deux !

@Efgé : Merci, ta solution marche parfaitement !

@Hasco : Ta solution me supprime une ligne a chaque exécution, et j'ai un peu de mal à me retrouver dans ton code.. Merci quand même :)

@ROGER2327 et pierrejean : Oui tout mon problème reposait sur une confusion entre le l minuscule et le 1... Maintenant je le saurais !

Merci pour votre réponse très rapide et à une prochaine fois ! :)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Comparer deux séries de valeurs

Bonjour.
Il y avait au moins deux choses qui n'allaient pas:
1: les code à vérifier se terminent par des espaces qui n'exister pas dans l'autre liste et qu'il faut sans doute ignorer,
2: variable non initialisée D11 utilisée dans For au lieu de Dl1.

Pourquoi n'écririez vous pas cela comme ça :
VB:
Sub SupprLignes()
With Sheet1.Range("Z2:Z" & Sheet1.[A65536].End(xlUp).Row)
   .FormulaR1C1 = "=MATCH(TRIM(RC1),Feuil2!C1,0)"
   On Error Resume Next
   .SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
   .ClearContents
   End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 114
Membres
103 121
dernier inscrit
SophieS