[RESOLU] VBA supprimer ligne si valeur trouvée sur une autre feuille

mdidish

XLDnaute Junior
Bonjour à tous.

Je cherche à automatiser la fonction suivante :
- j'ai des données en Feuil1, dont un code numérique en colonne A ;
- j'ai une série de valeurs numériques en colonne A de Feuil2 (il peut y avoir des cellules vides, par exemple une valeur en A1 et A2, rien en A3, une valeur en A4, etc.) ;
- je veux supprimer de la Feuil1 toutes les lignes dont le code en colonne A est présent dans la colonne 1 de Feuil2

Est-ce possible ?
Merci d'avance.
 
Dernière édition:

mdidish

XLDnaute Junior
Re : VBA supprimer ligne si valeur trouvée sur une autre feuille

Merci pour ta réponse ; Voici un fichier exemple.
- une précision, il ne faut pas changer l'organisation de la feuille 2 (par exemple trier les lignes pour les rendre contigües)
- dans cet exemple, les lignes 3 et 10 de Feuil1 doivent être supprimées

Est-ce que tu pourrais me donner le code VBA pour que je puisse l'intégrer dans ma macro ?
 

Pièces jointes

  • Test.xls
    20 KB · Affichages: 95
  • Test.xls
    20 KB · Affichages: 97
  • Test.xls
    20 KB · Affichages: 88

Fred0o

XLDnaute Barbatruc
Re : VBA supprimer ligne si valeur trouvée sur une autre feuille

Re-bonsoir mdidish,

Voici un code qui fonctionne chez moi sur ton fichier :
VB:
Sub Comp()
    Dim i As Integer, j As Integer
    For i = Sheets("Feuil1").Range("A65536").End(xlUp).Row To 2 Step -1
        For j = 2 To Sheets("Feuil2").Range("A65536").End(xlUp).Row
            If Sheets("Feuil1").Range("A" & i) = Sheets("Feuil2").Range("A" & j) Then
                Sheets("Feuil1").Range("A" & i).EntireRow.Delete shift:=xlUp
            End If
        Next
    Next
End Sub

A+
 

mdidish

XLDnaute Junior
Re : [RESOLU ]VBA supprimer ligne si valeur trouvée sur une autre feuille

Bonsoir, j'aimerai paufiner le code fourni hier par Fred0o :
l'objectif est que seul les données en colonne A de Feuil2 des lignes sélectionnées soient recherchées dans la colonnes A de Feuil1 afin de supprimer les lignes correspondantes.

En fait les données sont collées progressivement dans la Feuil2, et chercher à chaque tour l'ensemble des données de la colonne A de Feuil2 dans la colonne A de Feuil1 devient trèèèèèèèèès long après plusieurs tours (la colonne A de Feuil 2 finit par avoir plus de 1000 lignes).
L'intérêt c'est que les lignes qui viennent d'être collées en Feuil2 sont sélectionnées ; il faudrait donc rechercher uniquement les nombres présent en colonne A de cette sélection dans la colonne A de Feuil1.

Exemple dans la pièce jointe : en Feuil2, les cellules A7->D9 sont sélectionnées ; seuls les chiffres 1012 et 1131 doivent donc être recherchés dans la colonne A de Feuil1 (avec suppression des lignes 8 et 10).

Est-ce que c'est toujours possible ?
Merci d'avance
 

Pièces jointes

  • Test.xls
    20 KB · Affichages: 103
  • Test.xls
    20 KB · Affichages: 111
  • Test.xls
    20 KB · Affichages: 102

Fred0o

XLDnaute Barbatruc
Re : [RESOLU ]VBA supprimer ligne si valeur trouvée sur une autre feuille

Bonsoir mdidsh,

Voici comment modifier la macro :
VB:
Sub Comp()
    Dim i As Integer, j As Integer, LDeb As Integer, LFin As Integer
    LDeb = Selection.Row
    LFin = LDeb + Selection.Rows.Count - 1
    For i = Sheets("Feuil1").Range("A65536").End(xlUp).Row To 2 Step -1
        For j = LDeb To LFin
            If Sheets("Feuil1").Range("A" & i) = Sheets("Feuil2").Range("A" & j) Then
                Sheets("Feuil1").Range("A" & i).EntireRow.Delete shift:=xlUp
            End If
        Next
    Next
End Sub

A+
 

M.S.

XLDnaute Nouveau
Bonjour à tous

J'ai essayé d'appliquer le code de Fred0o sur un classeur, mais j'obtiens "erreur 9. l'indice n'appartient pas à la sélection."
Je voudrais que la macro s'exécute automatiquement.
Mes feuilles sont "Feuil3" et "Feuil14"
Pourriez vous m'aider SVP.
.
 

M.S.

XLDnaute Nouveau
Bonjour mdidish,
Merci de me répondre. Je suis un total "rookie" en VBA.
Voici le code que j'essaie d'implémenter automatiquement sans nécessairement sélectionner les lignes et j'ai rajouté en condition la date en colonne L de "Feuil3".


Private Sub Workbook_Open()

Dim i As Integer, j As Integer, k As Integer
Dim Base As String, Janvier As String
Base = "Feuil3"
Janvier = "Feuil14"
For i = Sheets(Base).Range("A65536").End(xlUp).Row To 1 Step -1
For j = 1 To Sheets(Base).Range("L65536").End(xlUp).Row
For k = 2 To Sheets(Janvier).Range("B65536").End(xlUp).Row
If (Sheets(Base).Range("A" & i) = Sheets(Janvier).Range("B" & k) And CDate(Sheets(Janvier).Range("L" & j)) < CDate(Date)) Then
Sheets(Janvier).Range("B" & k).EntireRow.Delete shift:=xlUp
End If
Next
Next
Next
End Sub
 

M.S.

XLDnaute Nouveau
Bonjour mdidish,
Merci de me répondre. Je suis un total "rookie" en VBA.
Voici le code que j'essaie d'implémenter automatiquement sans nécessairement sélectionner les lignes et j'ai rajouté en condition la date en colonne L de "Feuil3".


Private Sub Workbook_Open()

Dim i As Integer, j As Integer, k As Integer
Dim Base As String, Janvier As String
Base = "Feuil3"
Janvier = "Feuil14"
For i = Sheets(Base).Range("A65536").End(xlUp).Row To 1 Step -1
For j = 1 To Sheets(Base).Range("L65536").End(xlUp).Row
For k = 2 To Sheets(Janvier).Range("B65536").End(xlUp).Row
If (Sheets(Base).Range("A" & i) = Sheets(Janvier).Range("B" & k) And CDate(Sheets(Janvier).Range("L" & j)) < CDate(Date)) Then
Sheets(Janvier).Range("B" & k).EntireRow.Delete shift:=xlUp
End If
Next
Next
Next
End Sub
Pardon rectificatif :
Private Sub Workbook_Open()

Dim i As Integer, j As Integer, k As Integer
Dim Base As String, Janvier As String
Base = "Feuil3"
Janvier = "Feuil14"
For i = Sheets(Base).Range("A65536").End(xlUp).Row To 1 Step -1
For j = 1 To Sheets(Base).Range("L65536").End(xlUp).Row
For k = 2 To Sheets(Janvier).Range("B65536").End(xlUp).Row
If (Sheets(Base).Range("A" & i) = Sheets(Janvier).Range("B" & k) And CDate(Sheets(Base).Range("L" & j)) < CDate(Date)) Then
Sheets(Janvier).Range("B" & k).EntireRow.Delete shift:=xlUp
End If
Next
Next
Next
End Sub
 

mdidish

XLDnaute Junior
Hello

Déjà tu fais référence à "Feuil3" et "Feuil14" dans ton script qui n'existent pas :
VB:
Base = "Feuil3"
Janvier = "Feuil14"
devient
VB:
Base = "Base éléves"
Janvier = "Janvier"

et
VB:
For k = 2 To Sheets("Feuil14").Range("B65536").End(xlUp).Row
devient
VB:
For k = 2 To Sheets("Janvier").Range("B65536").End(xlUp).Row

Ensuite, dans
VB:
If (Sheets(Base).Range("A" & i) = Sheets(Janvier).Range("B" & k) And CDate(Sheets(Base).Range("L" & j)) < CDate(Date))
- j prend la valeur 1 (1ère itération)
- Sheets(Base).Range("L" & j) prend donc la valeur de la cellule L1, soit "Date de sortie"
- générant une erreur de type avec CDate (puisque ce n'est pas une date)
 

Discussions similaires