Autres Supprimer une ligne dans une feuille à partir d'une valeur rentrée dasn une cellule d'une autre feuille

jmc78

XLDnaute Nouveau
Bonsoir à tous,
Je fais appel à votre savoir, car je bloque sur l'écriture de ma macro, même après avoir regardé de nombreux tutos.
J'ai une feuille nommée "Historic", dans laquelle vient s'enregistrer en ligne les données d'un formulaire.
En colonne A de cette feuille, j'ai une numérotation automatique qui se fait au fur et à mesure des enregistrements.
Dans une autre feuille nommée "Recherche", j'ai une cellule vide en T1 dans laquelle j'inscris le n° de la ligne d'historique à rechercher.
Je cherche à écrire une macro qui prenne pour condition la valeur que je rentre dans la cellule T1 de ma feuille "recherche"
et qui aille chercher le n° correspondant dans la colonne A de ma feuille "Historic et supprime la ligne entière.
Voici ci-dessous ce que j'ai écris. (que les pros ne se moquent pas du néophyte !)
je suis en excel 2007

Sub supprimer()


Worksheets("Historic").Unprotect "Ro0892"

Dim ws_data As Worksheet

Dim lstrw As Long, rwnum As Long

Dim var As Variant


' identifier l'onglet
Set ws_data = Worksheets("Historic")

'identifier la derniere ligne du tableau
lstrw = ws_data.Cells(Rows.Count, 1).End(xlUp).Row

'commencer la boucle sur mes lignes

For rwnum = lstrw To 2 Step -1

'trouver la valeur à rechercher

var = Worksheets("Recherche").Range("T1")


' je pose ma condition

If Worksheets("Historic").Cells("A2:A2000") = var Then
cell.EntireRow.Delete

End If


Next

End Sub

Merci pour votre aide, car je suis lamentablement planté ;
Jean-Michel
 

jmc78

XLDnaute Nouveau
Alors là tu m'épates 😄
Si je n'ai pas passé 3 heures là-dessus cet après midi je ne m'appelle plus jm
ça fonctionne Nickel !!!!! Un grand merci mon ami à toi et aussi à Jacky67 pour votre gentillesse et l'attention que vous avez apporté à ma demande. J'espère aussi pouvoir un jour donner un coup de main.
Bon là il faut attendre un peu🤣🤣
Je vous souhaite une bonne soirée et un beau week-end
Jean-Michel
 

RyuAutodidacte

XLDnaute Impliqué
@jmc78
Autant pour moi j'ai une répétition dans mon code, tu peux l'écrire comme cela
VB:
Sub FindToDelete()
Dim RngFound As Range, maRecherche As String

    maRecherche = Sheets("Recherche").Range("T1").Value

    With Sheets("Historic")
        .Unprotect "Ro0892"
        
        With .Range("A2:A2000")
            Set RngFound = .Find(maRecherche, LookIn:=xlValues, Lookat:=xlWhole)
            While Not RngFound Is Nothing
                RngFound.EntireRow.Delete
                Set RngFound = .FindNext
            Wend
        End With
        
        .Protect "Ro0892"
    End With
    
    Set RngFound = Nothing
    
End Sub
 

Jacky67

XLDnaute Barbatruc
Re bonsoir Jacky, ci-joint mon fichier. Dans la feuille "Recherche" en T1 => j'inscris le n° de cachet (auto en colonne A)
ce que je souhaite c'est associer une macro à un bouton pour que la ligne qui porte le même numéro et qui se trouve dans la feuille "historic", soit supprimée. En core un grand merci pour ton aide.
Jean-Michel
Re
J'ai changer la numérotation provisoirement pour ne pas se retrouver avec des "#REF"
Mais il faudrait que tu te débrouille pour avoir une numérotation unique ou faire la recherche par le nom (conseillé) qui lui aussi doit être unique.
Car quand la ligne est supprimer la numérotation se refait, donc le 8 existe encore, et si tu re-clic, tu risques d'avoir des surprises.:(
Néanmoins la pj fait ce qui est demandé.
 

Pièces jointes

  • Outil Gestion Groupe - Copie.xlsm
    707.7 KB · Affichages: 2
Dernière édition:

jmc78

XLDnaute Nouveau
Bonjour Jacky, effectivement, tu as raison. ma méthode de numérotation est simpliste et comporte des lacunes. Je vais revoir cela pour que la séquence tienne compte de la suppression des lignes. C'est top ce que vous avez fait pour m'aider et je vous en remercie beaucoup toi et Ryu.
je vous tiens au courant de mon projet de fichier que je fais pour mes fils.
A bientôt
jm
 

jmc78

XLDnaute Nouveau
Désolé, mais il était tard et j'étais un peu HS; je te prie de m'en excuser.
J'ai réfléchi ce matin. la formule LIGNE()-1 fonctionne et remet l'historique à jour dans l'ordre chronologique.
La recherche n'est qu'une extraction de l'historique. Il suffit que j'intègre la colonne A dans ma requête et j'aurais une suite logique et sans trou
 

RyuAutodidacte

XLDnaute Impliqué
ok donc si tu as trouvé ta solution pour t'es numéro de ligne pour N° Cachet, il faut modifier le code car la nouvelle ligne 8 après suppression de la 1ère sera aussi effacer dû à ta formule Ligne()-1 :
Change le code en :
VB:
Sub FindToDelete()
Dim RngFound As Range, maRecherche As String

    maRecherche = Sheets("Recherche").Range("T1").Value

    With Sheets("Historic")
        .Unprotect "Ro0892"
       
        With .Range("A2:A2000")
            Set RngFound = .Find(maRecherche, LookIn:=xlValues, Lookat:=xlWhole)
            If Not RngFound Is Nothing Then
                RngFound.EntireRow.Delete
            End If
        End With
       
        .Protect "Ro0892"
    End With
   
    Set RngFound = Nothing
   
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 841
Messages
2 113 482
Membres
111 877
dernier inscrit
thierry@1965