Excel : suppression de ligne par VBA

Fermé
lsarfati Messages postés 6 Date d'inscription vendredi 21 septembre 2012 Statut Membre Dernière intervention 21 septembre 2012 - 21 sept. 2012 à 00:57
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 21 sept. 2012 à 14:21
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 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
21 sept. 2012 à 08:11
Bonjour,
Ces "mots" sont ils dans la meme colonne???
0
lsarfati Messages postés 6 Date d'inscription vendredi 21 septembre 2012 Statut Membre Dernière intervention 21 septembre 2012
21 sept. 2012 à 09:06
Non, pas forcément ! Avez-vous une idée de la façon de procéder ?
Merci d'avance :)
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
21 sept. 2012 à 11:24
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 vendredi 21 septembre 2012 Statut Membre Dernière intervention 21 septembre 2012
21 sept. 2012 à 11:29
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 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
Modifié par f894009 le 21/09/2012 à 11:46
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 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
21 sept. 2012 à 11:49
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 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 711
Modifié par f894009 le 21/09/2012 à 14:22
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