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

On Error GoTo ligne ne marche qu'une fois ?

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

  • gestionerreur.zip
    7.1 KB · Affichages: 34

Hervé

XLDnaute Barbatruc
bonsoir pmfontaine

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




salut
 

PascalXLD

XLDnaute Barbatruc
Modérateur
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.
 

pmfontaine

XLDnaute Occasionnel
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é.
 

Hervé

XLDnaute Barbatruc
bonjour pmfontaine, salut pascal

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




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
 

Discussions similaires

Réponses
2
Affichages
783
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…