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 -
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
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:
- Excel : suppression de ligne par VBA
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
2 réponses
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.
A+
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+
Merci d'avance :)
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
La durée n'est pas un problème : au pire, je laisse mon ordinateur "mouliner" le temps qu'il faut...
Cela fera moins de 5 minutes, faut pas exabuser.
Est-ce-que ces "mots" pourront etre sur la meme ligne??
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.