Supprimer des doublons en comparant 2 listes

Bonjour la communauté !

Comme vous pouvez le voir dans mon fichier excel, sur la première page il y a une liste d'éléments dont une colonne F avec notamment des numéros de trains commençant par 14 ou 19.

1 - Dans la colonne F de la feuille "Feuil1" il faudrait créer une macro qui supprime automatiquement des lignes avec écrit "Suppression avec graphicage de l'élément de rang 2/2 de l'étape xxxxxx" comportant des numéros de trains commençant par 19 et 149 (donc 19xxxx et 149xxx).

Dans la deuxième feuille du classeur ("restauration"), la colonne G correspond aux N° de train du tableau présent sur la feuille. La colonne H correspond aux N° de train du tableau de le première feuille.

2 - Il faudra également comparer les colonnes G et H (de la feuille "restauration") afin d'identifier les doublons et les supprimer dans la colonne F de la première feuille. En gros il faut supprimer les lignes de la colonne F de la première feuille qui ont les même N° de train que les lignes de la colonne G de la deuxième feuille.

Bonjour,

Un test ci-joint :

Sub NET()
Dim LAST_ROW%
[J2].Formula = "=SUM(ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 149"",$F2)),ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 19"",$F2)),COUNTIF(restauration!$G:$G,MID($F2,65,6)))" 'Applique une formule en J2 regroupant l'ensemble des critères
With Worksheets("Feuil1")
    LAST_ROW = .Cells(.Rows.Count, 1).End(xlUp).Row
    Range("J2:J" & LAST_ROW).FillDown 'Etend la formule jusqu'à la fin de la plage
    .UsedRange.AutoFilter Field:=10, Criteria1:=">0" 'Filtre >0 donc un critère au moins respecté
    .Range("A2:A" & LAST_ROW).SpecialCells(xlCellTypeVisible).EntireRow.Delete 'Supprime l'ensemble des lignes visibles
    .ShowAllData 'Défiltre
End With
End Sub

Avec ce code vous n'aurez plus besoin de la colonne H sur la restauration.

Cdlt,

Merci beaucoup pour votre réponse !

Votre macro fonctionne à merveille !

Serait-il possible d'y ajouter une fonctionne qui compte le nombre de lignes supprimées et qui soustrait ce nombre à la cellule I2 de la feuille svp ? (ici 12 lignes ont été supprimées donc il faut faire : 27-12 = 15 en I2).

Merci d'avance

Bonjour,

Cela devrait fonctionner :

Sub NET()
Dim LAST_ROW%, NOMBRE%
[J2].Formula = "=SUM(ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 149"",$F2)),ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 19"",$F2)),COUNTIF(restauration!$G:$G,MID($F2,65,6)))" 'Applique une formule en J2 regroupant l'ensemble des critères
With Worksheets("Feuil1")
    LAST_ROW = .Cells(.Rows.Count, 1).End(xlUp).Row
    Range("J2:J" & LAST_ROW).FillDown 'Etend la formule jusqu'à la fin de la plage
    .UsedRange.AutoFilter Field:=10, Criteria1:=">0" 'Filtre >0 donc un critère au moins respecté
    .[I2].Value = .[I2].Value - .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 'Renseigne I2 en comptant nombre de cellule visible dans colonne 1
    .Range("A2:A" & LAST_ROW).SpecialCells(xlCellTypeVisible).EntireRow.Delete 'Supprime l'ensemble des lignes visibles
    .ShowAllData 'Défiltre
End With
End Sub

Cdlt,

Re

J'ai oublié de vous demander d'également faire en sorte de supprimer les lignes mais uniquement jusqu'à la colonne F car sinon la macro supprime également les compteurs présents sur les colonnes H et I.

PS : je me suis trompé tt à l'heure, la cellule en question est I33 et non pas I2 ;)

Merci !

Bonjour,

Pourquoi ne pas supprimer toute la ligne ? N'est-il pas plus judicieux de déplacer ces colonnes H et I sur une autre feuille, qui je suppose, sont un résultat d'analyse. Si je dois boucler à travers chaque ligne de votre cellule cela risque de fortement ralentir les instructions, voir le faire planter en cas d'un nombre de ligne important.

Cdlt,

Je comprend la problématique. Le soucis est que je ne sais pas comment faire pour déplacer ces colonnes sur une autre feuille car je n'arrive pas à voir où cela est codé dans la macro … (je n'en suis pas l'auteur).

Au lieu de supprimer ces lignes, ne serait-il pas possible de simplement les compter et de soustraire ce résultat à celui déjà présent en I33 ?

Cela permettrait également de résoudre le problème de compteur dont je vous avait parlé .

Merci d'avance

Cordialement

Màj : J'ai supprimé la ligne de code qui supprimais les lignes dans le tableau.

Merci encore pour votre aide !

Bonjour,

Pas de soucis, tout dépend de votre besoin final. Si c'est juste une analyse a un instant T alors en effet il n'est pas nécessaire de supprimer les données.

Nous pouvons éventuellement effacer le contenu puis réaliser un tri ça ne devrait pas trop ralentir le programme.

Cordialement,

J'ai fait un essai avec les données d'une autre journée (le 12/02/2021).

Et le compteur me donne un résultat de -12 car la macro donne un résultat de 25 lignes à supprimer.

Etant donné que le résultat ne peut pas être négatif il y a un problème ...

Je pense que la macro compte les lignes avec les numéro de train commençant par 149 et 19 pour les lignes avec "Suppression avec graphicage de l'élément de rang 2/2 de l'étape" mais également avec "Suppression avec graphicage de l'étape". Or il faut compter les lignes uniquement pour celles comprenant "Suppression avec graphicage de l'élément de rang 2/2 de l'étape".

Auriez-vous une idée d'où peut venir le problème sinon ?

Cordialement,

Bonjour,

Je ne pense pas. Quelle doit être le terme auquel soustraire le nombre de ligne visible ? I2, I3, I33, I34 ?

Cdlt,

D'accord je vous fait confiance.

La cellule I33 est la somme des cellules de la colonne I. C'est donc à I33 qu'un faut soustraire le résultat donné par la macro.

Je l'avais déjà fait en affichant le résultat de la macro dans la cellule I34 et en soustrayant I33 à I34 comme vous pouvez le voir dans le tableau.

Cordialement,

Bonjour,

Je pense que le fait de ne pas supprimer les lignes ou effacer leur contenu induit en erreur.

En effet lorsque nous appliquons plusieurs fois la macro, nous ne nous y retrouvons pas car la macro boucle plusieurs fois, donc les X lignes à comptabiliser sont déduites plusieurs fois de votre total.

En appliquant une seule fois la macro, le résultat devrait être bon.

Cordialement,

Effectivement vous avez raison La macro boucle à chaque fois que nous la lançons.

Le problème est que même en lançant la macro une seule fois après avoir remis tous les compteurs à 0 je trouve toujours un résultat négatif (-12).

J'ai effectué un comptage manuel : il y a 7 lignes a déduire car elles font parties des 149 ou 19 et il y a 1 ligne à déduire car elle est en doublon. Cela fait donc 8 lignes à soustraire au résultat total. 13-8 = 5.

Le résultat affiché en I33 devrait donc être 5 or il est de -12.

Après avoir laissé la macro supprimer les lignes et avoir compté manuellement le nombre de lignes supprimées j'arrive à une résultat de 7 (un écart de 1 est tolérable). Vous aviez donc raison, le fait de ne pas laisser la macro compter les lignes fausse le résultat.

Auriez-vous une solution pour m'aider à déplacer les colonnes sur une autre feuille svp ?

Cordialement,

Bonjour,

Un test. La macro est destinée à être executée combien de fois par jour ?

J'aurai bien vu quelque chose comme ça (macro en module 7). Ici la valeur est à 0 car j'avais déjà effacé les données.

Cordialement,

Merci pour votre aide. Oui la macro est destinée à être utilisée 1 fois par jour.

Effectivement ça fonctionne ! mais les résultats de l'analyse ne s'affichent pas dans le tableau de la feuille ANALYSE.

J'ai essayé de modifier la macro en faisant en sorte de copier coller les résultats présents sur la feuille 1 dans la feuille analyse mais ça ne fonctionne pas.

Il est important que je puisse visualiser les résultats de l'analyse en plus d'avoir le résultat total ;)

Cordialement,

Bonjour,

Qu'entendez-vous par "le résultat" ? Le nombre de lignes supprimées est systématiquement inséré en C35 de la Feuil ANALYSE en fin d’exécution.

Ce code devrait plus correspondre à ce besoin :

Sub NET()
Dim LAST_ROW%, NOMBRE%
With Worksheets("Feuil1")
    .[G2].Formula = "=SUM(ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 149"",$F2)),ISNUMBER(SEARCH(""Suppression avec graphicage de l'élément de rang 2/2 de l'étape 19"",$F2)),COUNTIF(restauration!$G:$G,MID($F2,65,6)))" 'Applique une formule en J2 regroupant l'ensemble des critères
    LAST_ROW = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range("G2:G" & LAST_ROW).FillDown 'Etend la formule jusqu'à la fin de la plage
    .UsedRange.AutoFilter Field:=7, Criteria1:=">0" 'Filtre >0 donc un critère au moins respecté
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 = 0 Then 'Si aucune ligne à supprimer alors msgbox et sort de la macro
        MsgBox "Aucun train n'est a supprimer ou en doublon", vbInformation, "Information"
        Exit Sub
    End If
    Worksheets("ANALYSE").[C35].Value = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 'Renseigne C35 en comptant nombre de cellule visible dans colonne 1
    .Range("A2:A" & LAST_ROW).SpecialCells(xlCellTypeVisible).EntireRow.Delete 'Supprime les lignes affichées
    .ShowAllData 'Défiltre
    .Range("G2:G" & LAST_ROW).ClearContents 'Efface contenu G:G
    MsgBox "Nettoyage terminé, nombre de lignes supprimées disponibles sur la feuille ANALYSE cellule I35", vbInformation, "Confirmation de suppression"
End With
End Sub

Une condition a été ajoutée afin que la macro s'arrête et n'écrase ni les lignes ni les valeurs en cas d'absence de lignes à supprimer. Il devient donc impossible d’exécuter la macro 2 fois d'affilé.

Je vous laisse tester et revenir vers moi.

Cdlt,

Bonjour

J'entend par "résultats" les données qui s'affichaient dans le tableau bleu et gris présent sur les colonnes H et I de la feuille 1 du premier tableau que je vous avait mis en PJ. Les résultats donnaient le nombre de lignes comptées par date.

La cellule en bas de ce tableau faisait la somme de ces lignes.

Le but était donc de soustraire le résultat trouvé avec votre macro à ce total.

Le problème est que ce total n'apparait plus dans le tableau.

Serait-il possible de le rétablir afin que je puisse le soustraire au résultat affiché en C35 svp ?

Bonjour,

En face de chaque date correspond le nombre de lignes pré ou post suppression des doublons/étapes 2/2 ?

Cdlt,

Vous avez raison je surement mal regardé !

Merci beaucoup pour votre aide la macro fonctionne à la perfection maintenant !

Bonne continuation

Bien cordialement,

Rechercher des sujets similaires à "supprimer doublons comparant listes"