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

A voir également:

2 réponses

f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Bonjour,
Ces "mots" sont ils dans la meme colonne???
0
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
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
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
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
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
Re,
Cela fera moins de 5 minutes, faut pas exabuser.
Est-ce-que ces "mots" pourront etre sur la meme ligne??
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
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
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 715
 
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