Recherche et suppression d'une ligne - Excel VBA

Bonjour,

Je débute en VBA.

Ma question est simple.

Comment rechercher un terme dans une celllule, sélectionner le lignes associer et la supprimer.

Je résume :

Rechercher un terme (ex : DÉSIGNATION DES OUVRAGES dans mon tableau)

Supprimer la ligne où se trouve cette case.

Dans un second temps, je souhaitais supprimer à partir de cette case tout les lignes en dessous de celle-ci.

Je vous remercie d'avance pour vos réponses.

Bonjour Bat,

ta question est simple, en effet, et c'est aussi très simple de joindre un fichier exemple (sans données confidentielles) : pour cela, il suffit d'utiliser le bouton « Ajouter des fichiers » qui est situé juste sous la fenêtre d'édition de ton post.

dhany

Bonjour,

à tester,

Sub test()
n2 = Cells.SpecialCells(xlCellTypeLastCell).Row
mot = "DÉSIGNATION DES OUVRAGES"
On Error Resume Next
n1 = Cells.Find(What:=mot, After:=ActiveCell, LookIn _
        :=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Row
If Not IsError(n1) Then Rows(n1 & ":" & n2).Delete Shift:=xlUp
End Sub

Bonjour Bat,

ta question est simple, en effet, et c'est aussi très simple de joindre un fichier exemple (sans données confidentielles) : pour cela, il suffit d'utiliser le bouton « Ajouter des fichiers » qui est situé juste sous la fenêtre d'édition de ton post.

dhany

Désolé je pensais en avoir mis un ;p

J'ai reduit le tableau.

L'objectif est que dans les onglets QUANTITE_DPGF et PTHT_DPGF, je puisse supprimer les dernières lignes (après DESCRIPTION DES OUVRAGES) qui ne me sont pas utile dans ces onglets.

10test-vba.xlsm (53.86 Ko)

voici ton fichier modifié :

23test-vba.xlsm (55.95 Ko)

fais Ctrl e ➯ suppression des dernières lignes après "DESCRIPTION DES OUVRAGES"

note que le doublon en B4 ne sera pas pris en compte.


tu a écrit :

L'objectif est que dans les onglets QUANTITE_DPGF et PTHT_DPGF, je puisse supprimer...

* ça fait ce travail uniquement pour les 2 feuilles "QUANTITE_DPGF" et "PTHT_DPGF"

* ça fait rien du tout sur la 1ère feuille "DPGF"

dhany

voici ton fichier modifié :

test_vba.xlsm

fais Ctrl e ➯ suppression des dernières lignes après "DESCRIPTION DES OUVRAGES"

note que le doublon en B4 ne sera pas pris en compte.


tu a écrit :

L'objectif est que dans les onglets QUANTITE_DPGF et PTHT_DPGF, je puisse supprimer...

* ça fait ce travail uniquement pour les 2 feuilles "QUANTITE_DPGF" et "PTHT_DPGF"

* ça fait rien du tout sur la 1ère feuille "DPGF"

dhany

Je te remercie le code fonctionne parfaitement

Si cela est possible pourrait tu me commenter le code pour que je comprenne mieux ?

Bonsoir Bat,

tu a écrit :

pourrais-tu me commenter le code pour que je comprenne mieux ?

voici l'explication du code VBA :

With ActiveSheet .. End With : avec la feuille active

If .Name <> "QUANTITE_DPGF" And .Name <> "PTHT_DPGF" Then Exit Sub : on sort de la sub si le nom est ni "QUANTITE_DPGF", ni "PTHT_DPGF" car c'est seulement sur ces 2 feuilles que la sub doit être exécutée.

Dim lg1&, lg2& : idem que Dim lg1 As Long, lg2 As Long : 2 variables de type entier Long

lg1 et lg2 sont pour 2 n° de ligne, car on va supprimer des lignes de lg1+1 à lg2.

Application.ScreenUpdating = 0 : désactive la mise à jour de l'écran ➯ l'exécution du code est plus rapide


lg2 = Cells(Rows.Count, 3).End(3)(2).Row : idem que :

lg2 = Cells(Rows.Count, "C").End(xlUp).Row + 1

donc pour la feuille active, lg2 est le n° de la dernière ligne utilisée, selon la colonne C, avec ajout de 1 ;

cet ajout de 1 est uniquement car y'a une fusion des cellules C56:E57 ; sans ajout de 1 : retour 56 ;

donc la ligne 57 n'aurait pas été supprimée !


lg1 = Cells(Rows.Count, 2).End(3).Row : idem que :

lg1 = Cells(Rows.Count, "B").End(xlUp).Row

donc pour la feuille active, lg1 est le n° de la dernière ligne utilisée, selon la colonne B : retour 46

on va donc chercher "DESCRIPTION DES OUVRAGES" depuis cette ligne 46 vers le haut ; note que si on fait cette recherche depuis la ligne 3 vers le bas, on tombe sur le même texte en B4, et faudrait pas supprimer toutes les lignes qui sont en dessous !


Do While Cells(lg1, 2) <> "DESCRIPTION DES OUVRAGES" .. Loop : on boucle tant qu'on ne trouve pas le texte "DESCRIPTION DES OUVRAGES" ; lg1 = lg1 - 1 ; c'est car lg1 est diminué de 1 que la recherche se fait vers le haut :

une ligne plus haut à chaque tour de boucle.

If lg1 = 10 Then Exit Sub : sécurité pour éviter une boucle infinie si le texte n'est pas trouvé : donc si le texte est absent, on sort de la sub si on atteint la ligne 10 (ce choix est arbitraire, tu peut mettre une autre butée selon ta préférence).

Rows(lg1 + 1 & ":" & lg2).Delete : suppression des lignes lg1+1 à lg2 ; car faut pas supprimer le texte trouvé

"DESCRIPTION DES OUVRAGES".

dhany

Merci infiniment

Je ne suis pas sur mon ordinateur en ce moment donc quand je pourrais je regarderai le code à tête reposé et je reviendrai si j'ai des questions.

Merci encore.

Bon je pense que je n'ai pas tout compris au code.

Je l'ai essayé sur un autre fichier plus grand cette fois-ci il ne supprime que la ligne DESCRIPTION DES OUVRAGES.

Pourriez-vous m'expliquer d'où cela peur venir ?

Bonjour,

Le fichier de 51,97 Mo à 160ko.

Pour ceux qui veulent intervenir.

Cdlt.

Bonjour,

@Jean-Eric

merci d'avoir réduit la taille du fichier à 169 Ko !


@Bat

voici la nouvelle version, à partir du fichier de 169 Ko :

4numlot-nomlot.xlsm (168.82 Ko)

le problème était causé par une structure différente : ton tableau a une colonne C moins longue que la colonne B, contrairement à ton fichier exemple de départ (donc c'était pas prévu ! ).

dhany

Rechercher des sujets similaires à "recherche suppression ligne vba"