Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

suppression de ligne sur une recherche

  • Initiateur de la discussion Initiateur de la discussion esftel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

esftel

XLDnaute Occasionnel
bonjour au forum,

j'ai construit une procedure qui suprime une ligne a chaque fois que le mot "total" apparait.

cela fonctionne mais dès que cette procedure ne trouve plus le mot "total", j'obtiens un message d'erreur. "erreur d'execution '91'

Voici mon code :
Code:
For J = 1 To 70
 
 ActiveCell.Range("A1").Select
   
   
   Cells.Find(What:="TOTAL", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchFormat:=False).Activate
    
    ActiveCell.Rows("1:1").EntireRow.Select
    Selection.Delete Shift:=xlUp
   
Next J

Si vous avez la solution, merci d'avance 😉
 
Re : suppression de ligne sur une recherche

Bonsoir

Il n'y a pas de J dans ta formule pour partir la boucle !

Aulieu de cells.Find une boucle:

For J = 70 To 1 Step -1
If Cells(J, 1) = "TOTAL" Then Cells(J, 1).Delete Shift:=xlUp
Next J

Avec inputbox pour faire le choix du mot a supprimé:

i = InputBox(prompt:="Entrer la recherche", Title:="Suppression")
For J = 70 To 1 Step -1
If i <> "" Then
If Cells(J, 1) = i Then Cells(J, 1).Delete Shift:=xlUp
End If
Next J

ou plus court:

i = InputBox(prompt:="Entrer la recherche", Title:="Suppression")
For J = 70 To 1 Step -1
If i <> "" Then If Cells(J, 1) = i Then Cells(J, 1).Delete Shift:=xlUp
Next J

A+

Temjeh


ÉDITION:
Merci Spitnolan80 pour l'info
 
Dernière édition:
Re : suppression de ligne sur une recherche

Bonsoir Esftel, Temjeh,

Ci après deux codes qui aboutissent au résultat souhaité avec la fonction Find, mais la proposition de Temjeh est bien plus simple.
Code:
Sub test1()
Dim cel As Range, cel1 As Range
With Range("A1:A70")
    Set cel = .Find("TOTAL", LookIn:=xlValues, lookat:=xlPart)
    If Not cel Is Nothing Then
        firstAddress = cel.Address
        Do
            Set cel1 = .FindNext(cel)
            cel.EntireRow.Delete
            Set cel = cel1
            On Error Resume Next
        Loop While Not cel Is Nothing And cel.Address <> firstAddress
    End If
End With
End Sub
Code:
Sub test2()
'***Adaptation d'un code de Pierrejean pour xld
Dim cel As Range
Dim n As Integer
Dim lignes As Collection
Set lignes = New Collection

With Range("A1:A70")
    Set cel = .Find("TOTAL", LookIn:=xlValues, lookat:=xlPart)
    If Not cel Is Nothing Then
        firstAddress = cel.Address
        Do
          lignes.Add cel.Row
          Set cel = .FindNext(cel)
        Loop While Not cel Is Nothing And cel.Address <> firstAddress
    End If
End With

For n = lignes.Count To 1 Step -1
    Rows(lignes(n)).Delete
Next

End Sub
Pour info, ce sujet a déjà été traité ici :
https://www.excel-downloads.com/threads/utilisation-de-la-fonction-find.78544/

@Temjeh : le J de la boucle de Esftel sert uniquement à relancer la recherche qui s'arrêterait sinon après le 1er TOTAL trouvé.

Cordialement
 
Re : suppression de ligne sur une recherche

Salut Temjeh
Salut spitnolan08

Temjeh, j'ai essayé ton code mais sans succés mais pourtant ton code me parrais en effet plus simple que celui de spitnolan08.

J'ai donc utilisé ton code spitnolan08, j'ai pris le premier.
En effet le J de mon code m'a permis de créer un boucle afn qu'il ne s'arrete pas sur le premier "TOTAL" trouvé .

cela dit, je suis pour l'instant au stade système D sur le VBA. (Donc franchement nul pour l'instant). Ma méthode c'est d'enregistrer une "macro commande" puis ensuite j'essai de voir, avec les moyens du bord, comment obtenir la solution souhaité.

Un grand merci a vous deux, parce que sans vous j'y serais encore quelques heures 😉 🙄
 
Re : suppression de ligne sur une recherche

Bonsoir

Dommage pour mon code il fonctionnais très bien...snif (ptêtre n'as tu pas mis le sub test() et le end sub a la fin)

Par-contre tu as un bon moyen de progresser avec l'enregistreur et tu modifie après le code à ton goût.

Ta persévérence te récompenseras


A+

Temjeh
 
Dernière édition:
Re : suppression de ligne sur une recherche

Re,
En effet le J de mon code m'a permis de créer un boucle afn qu'il ne s'arrete pas sur le premier "TOTAL" trouvé
Ce n'est pas nécessaire : le code boucle sur toutes les occurences existant dans la plage A1:A70.

Si le code Temjeh ne fonctionne pas c'est probablement que Total n'est qu'une partie du contenu des cellules. Sinon, je ne vois pas pourquoi il ne marcherait pas.

Cordialement
 
Dernière édition:
Re : suppression de ligne sur une recherche

Re,

Juste pour la forme, si mes suputations du post précédent étaient bonnes; utiliser ce code :
Code:
Sub test()
Dim J As Long
    For J = 70 To 1 Step -1
        If InStr(1, Cells(J, 1), "Total") <> 0 Then Cells(J, 1).Delete Shift:=xlUp
    Next J
End Sub
Cordialement
 
Re : suppression de ligne sur une recherche

Re salut,

Oui en effet tu as raison "Total" n'est qu'une partie du contenu des cellules, (Chose que je n'avais pas précisé dans mon premier post) et j'ai, de ce fait ecrit "total*" ou "*total*" dans son code mais toujours rien.

mais la encore je ne suis pas sur d'avoir bien fait.

Cordialement
 
Re : suppression de ligne sur une recherche

bonjour à tous

Comme te le dit Spitnolan 🙂,

if instr(cells(j,1),"total") pertmet de savoir si la chaine total se trouve dans cells, pas besoin des etoiles

j'ajouterais quand meme : If instr(Ucase(Cells(j,1)),"TOTAL")
le ucase transforme en Majuscule (dans ce cas temporairement) cells
Ce qui permet de controler les saisies telle que : total, Total, TOTAL

Bonne soirée à tous
 
Re : suppression de ligne sur une recherche

re,
cette methode supprime uniquement la cellule dans laquel ce trouve le mot "total" et non la ligne, ce qui me donne un décalage dans mes lignes.

Code:
Sub test()
Dim J As Long
    For J = 70 To 1 Step -1
        If InStr(1, Cells(J, 1), "Total") <> 0 Then Cells(J, 1).Delete Shift:=xlUp
    Next J
End Sub

Aussi, j'ai du changer la valeur 70 par 500 pour que la recherche se fasse sur toute ma base de donné (celle ci comprend plusieurs centaines de lignes et voir plus a l'avenir).
Donc si j'ai bien compris 70 correspond a un total de lignes sur lesquelles la procédure va réagir et non un nombre de fois répété.

Oups ! j'éspère etre claire et ne pas avoir dire une grosse connerie 🙂

cordialement,
 
Re : suppression de ligne sur une recherche

Re,
Salut Wilfried,

Effectivement, pour supprimer toute la ligne, il suffit de modifier en :
Code:
Sub test()
Dim J As Long
    For J = 70 To 1 Step -1
        If InStr(1, Ucase(Cells(J, 1)), "TOTAL") <> 0 Then Cells(J, 1).[COLOR=Blue]EntireRow.[/COLOR]Delete Shift:=xlUp
    Next J
End Sub
Cordialement

Edit : pour boucler sur toute la base : Remplacer 70 par Range("A65500").end(xlup).row
 
Dernière édition:
Re : suppression de ligne sur une recherche

Salut Temjed
saltut spitnolan08
salut wilfried42

un grand merci à vous trois pour vos propositions et pour info j'utilise donc le code suivant :
Code:
Dim J As Long
    For J = Range("A65500").End(xlUp).Row To 1 Step -1
        If InStr(1, UCase(Cells(J, 1)), "TOTAL") <> 0 Then Cells(J, 1).EntireRow.Delete Shift:=xlUp
    Next J

Merci encore et a très bientot je pense.... 🙄 ce n'est pas terminer pour moi le VBA

esftel
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
589
Réponses
3
Affichages
639
V
Réponses
4
Affichages
3 K
Valentin94
V
A
Réponses
9
Affichages
3 K
P
Réponses
5
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…