Suppression de données a partir d'une autre feuille excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mickaelesly

XLDnaute Nouveau
Bonsoir à toutes et tous,
Voilà une bonne question de débutant (ne riez pas trop fort svp ) :
J'ai une liste électorale complète d'un côté à laquelle je souhaite supprimer les lignes correspondant aux "radiés" et décédés d'une autre feuille.
Mise à part pointer manuellement les lignes à supprimer en comparant les deux feuilles, j'imagine qu'il y a une solution bien plus pratique et...plus rapide




Un exemple très simplifié d'une feuille (1), base de la liste et d'une autre feuille (2) contenant les lignes à supprimer dans la feuille 1.

Merci pour votre aide...et votre patience 😎
 
Re : Suppression de données a partir d'une autre feuille excel

Re...
Voici un premier essai avec une formule dans chaque feuille et une mise en forme conditionnelle dans la première feuille. C'est une base de travail qu'on pourra développer en cas de besoin.
Ce qui est gênant dans ce fichier, c'est qu'il n'existe pas de moyen d'identifier une ligne en regardant seulement une cellule de la ligne. Dans votre fichier réel, n'existe-t-il pas un identifiant caractéristique de chaque personne ? Par exemple un numéro de carte d'électeur.​
ROGER2327
#2348
 

Pièces jointes

Re : Suppression de données a partir d'une autre feuille excel

Re...
binjour et merci de votre réponse rapide

Tous les champs du listing sont ceux de l'exemple (sauf le numero du bureau et la date d'inscription)

Merci

Bonne journée
Dans ce cas voici une procédure possible (et adaptable à d'autres classeurs) :
Code:
[COLOR="DarkSlateGray"][B]Sub Nettoyer()
   nettoyer_tableau_sans_clef sSh1:=Worksheets("Feuil1"), sSh2:=Worksheets("Feuil2")
End Sub

Private Sub nettoyer_tableau_sans_clef(sSh1 As Object, sSh2 As Object, Optional lT1 As Long = 1, Optional lT2 As Long = 1)
[COLOR="SeaGreen"]'
'  La procédure supprime les lignes de la feuille sSh1 qui ont un contenu identique à celui de l'une des _
   lignes de la feuille sSh2 sous les conditions suivantes : _
      - Les lignes d'entête des champs sont les lignes lT1 de sSh1 et lT2 de sSh2. _
            Les paramètres lT1 et lT2 sont optionnels (valeur par défaut : 1). _
      - Les colonnes prises en compte dans la comparaison sont celles qui ont le même entête.
'
'  Les tableaux peuvent comporter des lignes et des colomnes vides.
'  L'ordre des champs peut être différent dans les deux feuilles.
'[/COLOR]
Dim oB1, oB2, oC, i As Long, j As Long, nTmp As Long, sTmp As String
   lT1 = lT1 - 1: lT2 = lT2 - 1
[COLOR="SeaGreen"]'
'  Sélection des lignes d'entête.[/COLOR]
   With sSh1
      oB1 = .[A1].Offset(lT1, 0).Resize(1, .[A1].Offset(lT1, 0).Offset(0, .Columns.Count - 1).End(xlToLeft).Column).Value
   End With
   With sSh2
      oB2 = .[A1].Offset(lT2, 0).Resize(1, .[A1].Offset(lT2, 0).Offset(0, .Columns.Count - 1).End(xlToLeft).Column).Value
   End With
   If IsEmpty(oB1) Or IsEmpty(oB2) Then Exit Sub   'Il n'y a pas de champ commun aux deux feuilles.
[COLOR="SeaGreen"]'
'  Correspondance des champs d'une feuille à l'autre.[/COLOR]
   oC = Array(Array(0, 0))
   nTmp = UBound(oB2, 2)
   With WorksheetFunction
      For i = 1 To UBound(oB1, 2)
         sTmp = oB1(1, i)
         For j = 1 To nTmp
            If oB2(1, j) = sTmp Then
               ReDim Preserve oC(UBound(oC) + 1)
               oC(UBound(oC)) = oC(0)
               oC(UBound(oC))(0) = i
               oC(UBound(oC))(1) = j
               oC(0)(0) = .Max(i, oC(0)(0))
               oC(0)(1) = .Max(j, oC(0)(1))
            End If
         Next j
      Next i
   End With
[COLOR="SeaGreen"]'
'  Sélection des données à traiter.[/COLOR]
   With sSh1.[A1].Offset(lT1, 0)
      oB1 = Intersect(.Resize(sSh1.Rows.Count - lT1 - 1, .Offset(0, oC(0)(0)).Column - 1), sSh1.Range(.Cells, .SpecialCells(xlLastCell))).Value
   End With
   With sSh2.[A1].Offset(lT2, 0)
      oB2 = Intersect(.Resize(sSh2.Rows.Count - lT2 - 1, .Offset(0, oC(0)(0)).Column - 1), sSh2.Range(.Cells, .SpecialCells(xlLastCell))).Value
   End With
[COLOR="SeaGreen"]'
'  Concaténation des champs sélectionnés.[/COLOR]
   nTmp = UBound(oC)
   For i = 2 To UBound(oB1, 1)
      sTmp = ""
      For j = 2 To nTmp
         sTmp = sTmp & oB1(i, oC(j)(0)) & "#"
      Next j
      oB1(i, 1) = sTmp
   Next i
   ReDim Preserve oB1(1 To UBound(oB1, 1), 1 To 1)
   For i = 2 To UBound(oB2, 1)
      sTmp = ""
      For j = 2 To nTmp
         sTmp = sTmp & oB2(i, oC(j)(1)) & "#"
      Next j
      oB2(i, 1) = sTmp
   Next i
   ReDim Preserve oB2(1 To UBound(oB2, 1), 1 To 1)
[COLOR="SeaGreen"]'
'  Comparaison des feuilles ligne à ligne et suppression des lignes communes dans sSh1.[/COLOR]
   nTmp = UBound(oB2, 1)
   With Application
      .ScreenUpdating = False
      .Calculation = xlCalculationManual
      .EnableEvents = False
   End With
   With sSh1
      For i = UBound(oB1, 1) To 2 Step -1
         sTmp = oB1(i, 1)
         For j = 1 To nTmp
            If oB2(j, 1) = sTmp Then .Rows(i + lT1).Delete xlShiftUp
         Next j
      Next i
   End With
   With Application
      .EnableEvents = True
      .Calculation = xlCalculationAutomatic
      .ScreenUpdating = True
   End With
End Sub[/B][/COLOR]
Voyez l'adaptation à votre fichier d'exemple en pièce jointe.

Note : Ce code fonctionne avec Excel2003. J'ignore s'il doit ou non être adapté pour fonctionner avec Excel2007. Le cas échéant, faites appel à un adepte de la dite version.​
ROGER2327
#2353
 

Pièces jointes

Dernière édition:
Re : Suppression de données a partir d'une autre feuille excel

Ayant perdu 25 messages suite à l'incident du 11 décembre, j'ignore si vous avez eu le temps de prendre connaissance de ma proposition. Je la renouvelle donc.
______________________________________________________________
Envoyé par : ROGER2327
Le : 11/12/2009 à 01h27

Bonsoir à tous
Une proposition par formules dans le classeur joint.
Le résultat est dans la colonne L.
Aucun tri préalable ne semble nécessaire.
Mais je crains que, dans l'état de décomposition atteint par la société, le résultat soit un peu aléatoire. Les exemples donnés dans la feuille sont-ils corrects ?
Noémie SIMONE2327 et Marcel ROGER2327 vivent en concubinage notoire depuis 1947, rue Stine, n°5 et ont donné naissance à six beaux garçons prénommés Bertrand, Eugène, Joseph, Désiré, Karol, Louis.
Bertrand ROGER2327 a épousé Henriette en 1972.
Eugène ROGER2327 a épousé Adélaïde en 1976.
Joseph ROGER2327 a épousé la petite Charlotte en 1980.
Désiré ROGER2327 a épousé Irène en 1971.
Karol ROGER2327 a épousé Francine (sœur jumelle de la petite Charlotte) en 1980.
Bien qu'on ait longtemps jasé sur ses mœurs, Louis ROGER2327, a finalement épousé Germaine (Lolo pour les intimes, allez savoir pourquoi...) en 1992.
Bertrand s'est séparé d'Henriette en 1995 pour piquer la femme de Désiré. Lequel Désiré s'est installé au 31 de la rue Tabaga avec Germaine (dite Lolo), séparée de Louis depuis 1994.
(Louis est retourné vivre chez sa mère dont, il faut le reconnaître, il a toujours été le chouchou.)
Depuis 1988, la petite Charlotte, Francine, Joseph et Karol cohabitent au 37 de la rue Stine, sans que personne ne sache réellement qui est avec qui. Il est vrai que les jumelles se ressemblent tant ! Jusqu'à un grain de beauté caché qui... non, je m'égare.
Enfin, depuis trois ans, Henriette habite chez ses beaux parents, et on dit qu'elle est au mieux avec Louis...
Pour simplifier, je passe sur les quinze enfants et vingt-sept (bientôt vingt-huit) petits enfants de ces braves gens...

P.s. : On ne confondra pas M. Eugène ROGER2327, marié à Adélaïde, avec M. Eugène ROGER2327, abbé de son état, demeurant rue Stine, n°7. Ce dernier n'a rien à voir avec les enfants de Marcel et Noémie, même si on croit savoir en ville que la petite Charlotte n'a pas toujours été insensible à son charme. C'est certainement pure calomnie de mécréants jaloux...
*ROGER2327
#2359*************​

ROGER2327
#2401
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour