On Error GoTo ligne ne marche qu'une fois ?

  • Initiateur de la discussion Initiateur de la discussion pmfontaine
  • 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 !

pmfontaine

XLDnaute Occasionnel
Bonjour à tous,
Pour gérer les erreurs dans une macro, On Error GoTo ligne, marche pour une erreur sur recherche non trouvée une première fois, mais si cette erreur se reproduit dans une boucle cela plante.
Voir le code si dessous et le fichier joint.

Sub gestion_erreur()
For a = 1 To 2
On Error GoTo Fin 'ajout
Cells.Find(What:='texte_rechercher', LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
Exit Sub 'ajout
Fin: 'ajout
MsgBox ('texte_rechercher Pas trouvé') 'ajout
Next a
End Sub

Merci d'avance pour votre aide, car je ne m'en sort pas avec l'aide de Visuel basic. [file name=gestionerreur.zip size=7269]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/gestionerreur.zip[/file]
 

Pièces jointes

bonsoir pmfontaine

j'ai pas tout compris ce que tu voulais faire avec ton code, mais essaye comme ceci.


Sub gestion_erreur()
Dim a As Byte
Dim c As Range

For a = 1 To 2
       
Set c = Cells.Find(What:='texte_rechercher', LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xl
Next, MatchCase:= _
       
False)

       
If c Is Nothing Then 'ici on test si c'est vide ou pas
                MsgBox ('texte_rechercher Pas trouvé')
'ajout
       
Else
                c.Activate
       
End If
Next a
End Sub


salut
 
Bonjour

Bon rien à dire il vaut mieux utiliser la méthode d'Hervé qui est beaucoup plus propre

Sinon pour expliquer le pourquoi lors d'une première erreur la deuxième n'est pas pris en compte tu trouves la raison dans l'aide. En fait tu es toujours dans la gestion de ta première erreur.

recopie de l'aide :

Un gestionnaire d'erreurs est 'validé' lorsqu'il a été désigné par une instruction On Error ; le gestionnaire d'erreurs 'actif' est un gestionnaire validé qui traite une erreur. Si une erreur se produit alors qu'un gestionnaire d'erreurs est actif (c'est-à-dire entre la ligne où survient une erreur et une instruction Resume, Exit Sub, Exit Function ou Exit Property), le gestionnaire d'erreurs de la procédure en cours ne peut gérer l'erreur. Le contrôle revient à la procédure appelante. Si la procédure appelante possède un gestionnaire d'erreurs validé, il est activé afin de gérer l'erreur. Si le gestionnaire d'erreurs de la procédure appelante est également actif, le contrôle est restitué aux procédures appelantes antérieures jusqu'à ce qu'un gestionnaire d'erreurs validé mais inactif soit trouvé. Si aucun gestionnaire d'erreurs validé et inactif n'est trouvé, l'erreur est fatale à l'emplacement où elle s'est produite. Chaque fois que le gestionnaire d'erreurs repasse le contrôle à une procédure appelante, cette procédure devient la procédure en cours. Lorsqu'une erreur est gérée par un gestionnaire d'erreurs dans n'importe quelle procédure, l'exécution reprend dans la procédure en cours à l'emplacement désigné par l'instruction Resume.
 
Bonjour,
Merci à tous les deux pour votre aide, et la solution d'Hervé marche TRES BIEN.
J'avais bien vu l'aide que Pascal76 me site, mais je pensais qu'il y avait moyen de mettre une ligne de réinitialisation de la gestion d'erreur que je n'avais pas trouvé.
 
bonjour pmfontaine, salut pascal

si tu voulais vraiment utiliser un gestionnaire d'erreur pour ton souci, voici la syntaxe :


Sub gestion_erreur()
Dim a As Byte

For a = 1 To 2
       
On Error GoTo Fin 'ajout
        Cells.Find(What:='texte_rechercher').Activate
Next a

Exit Sub 'ajout
Fin:
'ajout

If Err.Number = 91 Then
        MsgBox ('texte_rechercher Pas trouvé')
'ajout
       
Resume Next
Else
        MsgBox Err.Description
End If

End Sub


il te fallait utiliser resume next qui te permet de retourner à l'instruction qui suit celle ayant provoquer l'erreur.

de plus, généralement on ne place pas les gestionnaires d'erreurs dans les boucles for to, etc...mais apres la boucle, c'est ce qui permet d'utiliser des instruction comme resume next ou resume.

En tout cas, on n'utilise pas non plus de gestionnaire d'erreur pour ce type de manip (simple à gérer).

c'est comme utiliser un rouleau compresseur pour ecraser une fourmi.

salut
 
- 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
475
Réponses
3
Affichages
544
Réponses
12
Affichages
866
Retour