Excel : suppression de ligne par VBA

lsarfati Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis débutant en VBA et je souhaite programmer une macro qui me permette de rechercher plusieurs mots (qu'on appellera "mot1", "mot2" et "mot3" par exemple) sur une feuille Excel. Je ne sais pas d'avance sur quelle ligne ou colonne il seront.
(N.B : une cellule peut contenir plusieurs mots, "mot1", "mot2" ou "mot3" étant l'un des mots).
Je souhaite rechercher en effaçant chaque ligne comportant l'un des mots "mot1", "mot2", ou "mot3".

Merci par avance

Laurent

2 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Ces "mots" sont ils dans la meme colonne???
    0
    1. lsarfati Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      Non, pas forcément ! Avez-vous une idée de la façon de procéder ?
      Merci d'avance :)
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Oui. si vos "mots" sont vraiment dans des colonnes dispersees et que le nombre de lignes est assez consequent le traitement risque d'etre un long
      0
    3. lsarfati Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      Combien de temps cela prendrait-il pour un tableau de 5000 x 6 cellules ?
      La durée n'est pas un problème : au pire, je laisse mon ordinateur "mouliner" le temps qu'il faut...
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Cela fera moins de 5 minutes, faut pas exabuser.
      Est-ce-que ces "mots" pourront etre sur la meme ligne??
      0
    5. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Bonjour,

      personnellement, je pense à utiliser la fonction Recherche en VBA pour détecter d'abord les lignes contenant le mot "mot1", et les supprimer.
      Refaire une passe pour les lignes restantes avec le mot "mot2", et enfin avec le mot "mot3".

      Pas trop le temps de faire la macro, mais c'est l'idée qui me vient à la tête.
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    En fonction de ce que j'ai compris de votre demande:
    Recherche de x mots dans une plage de xx lignes et 6 colonnes consecutives

    Un exemple de code a mettre dans VBA d'un module ou ThisWorkbook

    La saisie de la liste peut s'automatiser.

    Sub test()  
      Dim col_Test As Range, Liste_Mot(15), derlig_test  
      Dim Nbr, cpt, LigTr, Col_Cherch, rang_Mot  
        
      t = Timer  
      Erase Liste_Mot  
        
      'Liste des mot a chercher sans trou dans la liste  
      Liste_Mot(1) = "A"  
      Liste_Mot(2) = "B"  
      Liste_Mot(3) = "C"  
      Liste_Mot(4) = "D"  
      Liste_Mot(5) = "E"  
      Liste_Mot(6) = "F"  
      Liste_Mot(7) = ""  
      Liste_Mot(8) = ""  
      Liste_Mot(9) = ""  
      Liste_Mot(10) = ""  
        
      'mettre le nom de la feuille  
      With Worksheets("Feuil1")  
        For rang_Mot = 1 To 15  
          Mot_Cherch = Liste_Mot(rang_Mot)  
          If Mot_Cherch = "" Then Exit For  
            For col = 1 To 6  
              'derniere ligne utilisée de la feuille  
              derlig_test = Worksheets(1).Cells.Find("*", , , , xlByRows, xlPrevious).Row  
              Set col_Test = .Range(Cells(1, col), Cells(derlig_test, col))  
              'Nombre d'apparitions  
              Nbr = Application.CountIf(col_Test, Mot_Cherch)  
              If Nbr > 0 Then  
                LigTr = 1  
                For cpt = 1 To Nbr  
                  'Colonne en caractere  
                  Col_Cherch = Chr(64 + col)  
                  'Recherche position mot  
                  LigTr = .Columns(Col_Cherch).Find(Mot_Cherch, .Cells(LigTr, Col_Cherch), , , xlWhole).Row  
                  'Suppression ligne  
                  .Rows(LigTr & ":" & LigTr).Delete Shift:=xlUp  
                Next cpt  
              End If  
            Next col  
        Next rang_Mot  
      End With  
      Z = Timer - t  
    End Sub  
    


    A+
    0