Worksheet.find error 91

Bonjour,

j'ai tente de créer une macro pour supprimer des lignes dans ma base de donnée

la première partie dans l'onglet projet fonctionne bien car le projet existe bien et de base existera toujours car lancer via userform

cependant la deuxième bloque ici avec une erreur 91:

je spécifie que pour l'exemple utilisé l'id n'existe pas car aucun positionning de référencé et c'est certainement cela le soucis

project_Range = Worksheets("Positionning").Range("B1:B" & fin_pos).Find(ID_project).Row
capture
Voici la macro:

Private Sub Effacer_Projet_Click()

If MsgBox("Are you sure you want deleting this project", vbYesNo, "Confirmation") = vbNo Then Exit Sub

'cette partie fonctione bien
fin = Worksheets("Projects").Range("A" & Rows.Count).End(xlUp).Row
project_Range = Worksheets("Projects").Range("A1:A" & fin).Find(ID_project).Row
Match = Worksheets("Projects").Range("C" & project_Range & ":C" & fin).Find(Project_Acronym).Row
'Worksheets("Projects").Rows(Match).EntireRow.Delete

'on efface le projet dans positionning si existant:
fin_pos = Worksheets("Positionning").Range("A" & Rows.Count).End(xlUp).Row
project_Range = Worksheets("Positionning").Range("B1:B" & fin_pos).Find(ID_project).Row
Match = Worksheets("Positionning").Range("B" & project_Range & ":E" & fin_pos).Find(Project_Acronym).Row
MsgBox (Match)
End Sub

une idée de comment je pourrais gérer cela?

merci à vous

Salut,

Déjà évoqué maintes fois...

Lecture ici : Range.Find method (Excel) | Microsoft Learn

Merci pour votre retour et ce partage.

Néanmoins je me permets de revenir vers vous car maintenant je récupère bien la premiere ligne si le projet existe cependant il peut y avoir plusieurs lignes concernés par l'id en question!

aussi comment est il préférable de procéder (avec un for?)

car le but étant de supprimer les lignes concernées par l'id

merci

'on efface le projet dans positionning si existant:
fin_pos = Worksheets("Positionning").Range("A" & Rows.Count).End(xlUp).Row

With Worksheets("Positionning").Range("B1:B" & fin_pos)
Set C = .Find(ID_project, LookIn:=xlValues)
If Not C Is Nothing Then

Match = Worksheets("Positionning").Range("B" & C.Value & ":E" & fin_pos).Find(Project_Acronym).Row
MsgBox (Match)

End If
End With

Re,

C'est aussi expliqué dans la doc de Microsoft. Avec une boucle Do Loop, je note toutefois un problème dans le code fourni, penser à tester en fin de boucle la valeur de l'adresse de départ.

Bonjour,

Merci j'ai donc tenté

mais alors ca tourne en boucle sans jamais s'arrêter et j'ai du faire planter Excel pour tout arrêter!

With Worksheets("Positionning").Range("B1:B" & fin_pos)
Set C = .Find(ID_project, LookIn:=xlValues)
If Not C Is Nothing Then
 Do
Match = Worksheets("Positionning").Range("B" & C.Value & ":E" & fin_pos).Find(Project_Acronym).Row
MsgBox (Match)
Loop While Not C Is Nothing
End If
End With

je voulais m'assurer que les bonnes lignes étaient détectées avant d'insérer la ligne de suppression

Bonjour,

ca, cela veux dire que la lecture à été faite entre les lignes...

Microsoft en parle, et je l'ai aussi dis dans mon précédant post:

La méthode Find repart en début quand elle fait une recherche dans une boucle, il faut donc tester en fin de boucle si l'on est de retour sur la première occurence trouvée.

Loop While Not c is Nothing And FirstAddress <> c.Address

merci pour ces explications mais le problème est similaire

cela reste à afficher en boucle le MSgbox...

Enfin comment arréter cela sans faire planter excel

j'ai tenté le ctrl pause mais cela ne fonctionne pas

Re,

Postes ton code final pour voir...

Private Sub Effacer_Projet_Click()
If MsgBox("Are you sure you want deleting this project", vbYesNo, "Confirmation") = vbNo Then Exit Sub

'on commence par effacer le projet lui meme:
fin = Worksheets("Projects").Range("A" & Rows.Count).End(xlUp).Row
project_Range = Worksheets("Projects").Range("A1:A" & fin).Find(ID_project).Row
Match = Worksheets("Projects").Range("C" & project_Range & ":C" & fin).Find(Project_Acronym).Row
'Worksheets("Projects").Rows(Match).EntireRow.Delete

'on efface le projet dans positionning si existant:
fin_pos = Worksheets("Positionning").Range("A" & Rows.Count).End(xlUp).Row

With Worksheets("Positionning").Range("B1:B" & fin_pos)
Set C = .Find(ID_project, LookIn:=xlValues)
If Not C Is Nothing Then
 Do
Match = Worksheets("Positionning").Range("B" & C.Value & ":E" & fin_pos).Find(Project_Acronym).Row
MsgBox (Match)
Loop While Not C Is Nothing And FirstAddress <> C.Address
End If
End With

End Sub

je me reponds à moi meme :

j'ai trouvé

'on efface le projet dans positionning si existant:
With Worksheets("Positionning")
derlign = Worksheets("Positionning").Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To derlign
If (Cells(i, 2) = ID_project) And (Cells(i, 5) = Project_Acronym) Then
MsgBox (i)
'Worksheets("Positionning").Rows(i).EntireRow.Delete
End If
Next
End With
Rechercher des sujets similaires à "worksheet find error"