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

  • Initiateur de la discussion Initiateur de la discussion TIGER999
  • Date de début Date de début

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 !

T

TIGER999

Guest
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

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+
 
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.
 
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

Dernière édition:
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
 
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.
 
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.
 
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.
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

I
Réponses
2
Affichages
931
im_Guillaume
I
S
Réponses
4
Affichages
1 K
SELKAIM
S
Réponses
6
Affichages
757
D
  • Question Question
Réponses
6
Affichages
2 K
D
Retour