Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Supprimer une ligne d'après son numéro

TIGER999

XLDnaute Nouveau
Bonjour,

Je souhaites supprimer plusieurs lignes d'après leur numéro, renseigné dans la colonne L. Il faudrait que ca passe à la celulle usivante, supprimer, et ainsi de suite.
Exemple : Supprimer la ligne 101, puis 2242, puis 42...
Ci-joint le fichier.

J'ai trouvé ça et je pense qu'il faut rajouter ActiveCell mais je ne maitrise pas trop.

VB:
Sub a()
Rows([celulle].Text).EntireRow.Delete
End Sub

Merci pour votre aide.
 

Pièces jointes

  • vba excel.xlsx
    519.2 KB · Affichages: 28

Paf

XLDnaute Barbatruc
Bonjour,

plusieurs soucis:

les N° de lignes à supprimer sont en colonne F ?

1)si oui, en colonne F on trouve plusieurs fois 101, donc la première fois on supprimera bien la ligne 101, mais la deuxième fois on supprimera la ligne qui se trouve maintenant en 101 mais qui était en 102.
Faut il ne considérer qu'une seule fois chaque N° de ligne ?


2)certaines lignes doivent se supprimer mutuellement:
Par exemple
en ligne 214 et 215 colonne F : 377
et en ligne 377 et 378 , colonne F : 214
si on supprime d'abord la 214, la 377 ne sera pas supprimée et vice versa

Quand on supprime des lignes, il faut toujours commencer par les lignes de fin de données pour éviter les décalages, il faudrait trier les données de la colonne F en ordre décroissant , puis supprimer les lignes dans l'ordre de la colonne.
Encore faut-il savoir quoi faire pour les cas 1 et 2.

A+
 

TIGER999

XLDnaute Nouveau
Bonjour,

Oui pardon les lignes à supprimer sont en colonne F. Effectivement je ne souhaite supprimer qu'une seule fois la ligne.
Pour le 2, je peux mettre les numéros dans une feuille 2 afin d'éviter cela.

Merci pour votre participation.

Salutation.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @TIGER999, @Paf

Pour ce que j'en ai compris, voir fichier joint. Cliquer sur le bouton Hop!
Le code est dans module1.

rem 1 : j'ai effacé la colonne F après traitement pour qu'une deuxième exécution ne vienne pas supprimer des lignes qui ont déjà été supprimées par la première exécution (cas des doublons de la colonne F)

edit : Bonsoir @Efgé
 

Pièces jointes

  • TIGER999- suppr ligne- v1.xlsm
    567.7 KB · Affichages: 18
Dernière édition:

Efgé

XLDnaute Barbatruc
Bonjour TIGER999, Salut Paf , Salut mapomme

Deux propositions:
La première qui répond à la question et qui est trèèès longue;
VB:
Sub test()
Dim i&, Dico As Object, Rng As Range
Dim TLignes As Variant, K As Variant

Set Dico = CreateObject("scripting.dictionary")

With Sheets("Data") 'Nom ce la feuille à adapter
    TLignes = .Range(.Cells(2, 1), .Cells(.Rows.Count, 6).End(3))

    For i = LBound(TLignes, 1) To UBound(TLignes, 1)
        If TLignes(i, 6) <> "" Then
            Dico(TLignes(i, 6)) = ""
        End If
    Next i
   
    Set Rng = .Cells(.Rows.Count, 1).End(3)(2)
    For Each K In Dico.keys
        Set Rng = Union(Rng, .Cells(K, 1))
    Next K
    Rng.EntireRow.Interior.ColorIndex = 5 'pour visualiser les lignes
    'Rng.EntireRow.Delete 'pour supprimer
End With

End Sub

Une plus rapide qui arrive au même résultat, mais qui devrait être comparée avec la proposition de mapomme qui me paraît pouvoir être meilleure (la proposition de mapomme meilleure que la mienne)
Code:
Sub test_2()
Dim i&, j&, L&, Dico As Object, Rng As Range
Dim TLignes As Variant

Set Dico = CreateObject("scripting.dictionary")

With Sheets("Data") 'Nom ce la feuille à adapter
    Set Rng = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(3)(1, 6))
    TLignes = Rng
   
    For i = LBound(TLignes, 1) To UBound(TLignes, 1)
        If TLignes(i, 6) <> "" Then
            Dico(TLignes(i, 6)) = ""
        End If
    Next i
   
    For i = LBound(TLignes, 1) To UBound(TLignes, 1)
        If Not Dico.Exists(i) Then
            L = L + 1
            For j = 1 To 5
                TLignes(L, j) = TLignes(i, j)
            Next j
        End If
    Next i
   
    Rng.Clear
    .Cells(1, 1).Resize(L, 5).FormulaLocal = TLignes
End With

End Sub

Cordialement
 

TIGER999

XLDnaute Nouveau
Bonjour,

Merci à vous, c'est génial.
En effectuant vos scripts, je me rends compte que les lignes ne doivent pas se supprimer mutuellement (2 de @Paf)
Exemple
en ligne 214 et 215 colonne F : 377
et en ligne 377 et 378 , colonne F : 214
si on supprime d'abord la 214, la 377 ne sera pas supprimée et vice versa
C'est en fait ce que je désire, il doit rester une ligne.

Pour vous expliquer rapidement le tableau et le but de tout cela, j'ai des doublons que je veux supprimer.
La ligne 101 est un doublon de la ligne 3, simplement les données sont inversées (ligne 3 : A3 =A07, D3=A01 et ligne 101 : A101=A01 et D101=A07)

Très bonne journée

Cordialement.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @TIGER999,

Si j'ai bien compris:
  • parmi toute les lignes qui ont les mêmes valeurs pour les couples (An, Dn) - dans n'importe quel ordre - on garde une ligne et on efface toutes les autres ?
Si c'est cela, alors voir le fichier joint....

nota: on se passe de la colonne F
 

Pièces jointes

  • TIGER999- suppr ligne- v2.xlsm
    445.2 KB · Affichages: 19

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @TIGER999,
Est-ce possible de garder la ligne avec l'ordre An, Dn et supprimer la ligne avec Dn, An ?

Je ne comprends pas. Je ne sais pas quelle ligne retenir pour définir l'ordre entre les colonnes A et D. Selon moi (pour l'instant) A et B jouent un rôle symétrique et analogue. Parmi les doublons, la macro v2 garde la première ligne rencontrée et supprime les suivantes.
 

TIGER999

XLDnaute Nouveau
Pardon, ce que je désirais, c'était qu'au lieu de supprimer la première ligne rencontrée, supprimer la ligne avec l'ordre Dn, An, mais étant symétrique et analogue, ce n'est pas possible.

Merci beaucoup pour ta contribution

Cordialement.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…