Recherche et suprimmer ligne excel fonction d'un mot

  • Initiateur de la discussion Initiateur de la discussion Vorens
  • 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 !

Vorens

XLDnaute Occasionnel
Bonjour,


Je cherche à repérer et a supprimer toutes les lignes d'un tableau Excel comprenant le mot KOMMTEST dans une cellule de la colonne A1.

Actuellement, je fait une recherche via VBA avec une boucle FOR qui passe en revue les lignes du mon tableau. Ma fonction actuel fait, un repérage du nombre de fois que ce mot apparait, (par exemple 7 fois), puis, cela lance une boucle FOR qui à pour but de trouver, supprimer, puis re scanne jusqu'a ce que tout les KOMMTEST soit supprimé. Cette fonction fonctionne très bien.

Le problème c'est que mon fichier peux comporter 12 feuilles, qui comporte chacune environ 55'000 lignes, vous pouvez donc facilement imaginer le temps que prend le programme pour effectuer cette fonction.

Connaissez-vous un moyen de rendre cette opération plus rapide ? Par une autre façon de faire pour repérer et supprimer un thermes dans un tableau.


Merci de votre aide.

Cordialement

Vorens
 
Dernière édition:
Re : Recherche et suprimmer ligne excel fonction d'un mot

Re,


Il suffit seulement de contrôler la première colonne car le mot ce trouvera uniquement dans celle-ci, et de supprimer la ligne entière ou ce trouve le mot indésirable. Je peut difficilement mettre en pièce jointe le fichier car il est beaucoup trop gros, contiens des fonctions d'importation de fichier, et contient des données confidentiel.

Lorque je lance la macro, le programme peut mettre jusqu'a 3-4 minutes à tout recalculer (il effectue environ 1 million de calculs). J'essais donc de trouver une solution pour racourcire ce temps de traitement et la fonction de scane des ligne à la recherche de ses mots indésirable prend un certain temps.
 
Re : Recherche et suprimmer ligne excel fonction d'un mot

Bonjour Vorens, Laetitia,

Comme le suggère Laetitia, on peut utiliser le filtre automatique :

Code:
Sub Supprime()
Dim w As Worksheet, plage As Range
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Worksheets
  w.AutoFilterMode = False
  w.[1:1].Insert
  Set plage = w.Range("A1", w.[A65536].End(xlUp))
  plage.AutoFilter 1, "*KOMMTEST*"
  plage.SpecialCells(xlCellTypeVisible).EntireRow.Delete
  w.AutoFilterMode = False
Next
End Sub

A+
 
Dernière édition:
Re : Recherche et suprimmer ligne excel fonction d'un mot

Bonjour Vorens, Laetitia, bonjour le forum,

tu sais, il est possible de créer un fichier allégé avec juste une poignée de données. Mais il est vrai que ça demande un effort...

Essaie la macro c-dessous (inspirée par la réponse de Laetitia) :
Code:
Sub Macro1()
Dim o As Worksheet 'déclare la variable o (Onglet)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim tot() As Long 'déclare la variable tot (Tableau des Occurrences Trouvées)
Dim x As Long 'déclare la variable x (incrément)
Dim y As Long 'déclare la variable y (incrément)
 
For Each o In Sheets 'boucle 1 : sur tous les onglets du classeur
    x = 0 '(ré)initialise la variable x
    'définit variable r (Recherche "KOMMTEST" dans la colonne A de l'onglet)
    Set r = o.Columns(1).Find("KOMMTEST", , xlValues, xlWhole)
    If Not r Is Nothing Then 'condition : si il existe au moins une occurrence de "KOMMTEST" dans la colonne A de l'onglet
        pa = r.Address 'définit l'adresse de la première occurrence trouvée
        Do 'exécute
            ReDim Preserve tot(x) 'redimensionne le tableau tot
            tot(x) = r.Row 'récupère le numéro de ligne de l'occurrence trouvée
            x = x + 1 'redéfinit la variable x
            Set r = o.Columns(1).FindNext(r) 'redéfinit la variable r (recherche suivante)
        'boucle tant qu'il existe des occurrences ailleurs qu'en pa
        Loop While Not r Is Nothing And r.Address <> pa
    End If 'fin de la condition
 
    For y = UBound(tot, 1) To LBound(tot, 1) Step -1 'boucle 2 : sur toutes les éléments du tableau tot (du dernier au premier)
        Rows(tot(y)).Delete shift:=xlShiftUp 'supprime la ligne correspondante
    Next y 'prochaine élément du tableau tot
Next o 'prochain onglet du classeur (boucle 1)
End Sub

[Édition]
Bonjour Job on s'est croisé... Ben au moins Vorens aura les deux options préconisées par Laetitia.
 
Re : Recherche et suprimmer ligne excel fonction d'un mot

rebonjour Vorens ,Robert,l'ami Job🙂🙂🙂
j'avais cela inspiration de l'ami STAPLE mais maitrise pas bien les filtres
Code:
Sub Staple()
Dim r As Range, rf As Range, ws As Worksheet
 Application.ScreenUpdating = False
 For Each ws In Worksheets
With ws
  Set r = _
  .[A1].CurrentRegion: r.AutoFilter 1, "KOMMTEST"
   Set rf = _
  .[_FilterDataBase]: rf.Resize(rf.Rows.Count - 1).SpecialCells(12).Delete Shift:=xlUp
  .AutoFilterMode = False
End With
Next
End Sub

tu mets *KOMMTEST* c'est comme l'instruction LIKE ??
 
- 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