Gestion des erreurs

Le
Lepaic07
Bonjour !
Voici mon problème ;
Ma macro utilise en plusieurs points un système de recherche et, dans le cas
ou aucune correspondance n'a été trouvé, le débogueur s'active (erreur "91")
Le but de mon gestionnaire d'erreur serais de scanner toute mon application
(faite de plusieurs procédures et userforms) qui s'activerais à l'ouverture
du classeur et se fermerais à la fermeture, sans passer par "on error" dans
chaque procédure et, dans le cas de l'erreur "91" proposer de re-renseigner
la recherche et de propôser de reprendre la macro au début en cas de toutes
autres erreurs.

Merci à tout le monde par avance !

Emilien
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
dunkelzahn
Le #4359691
On 1 mar, 09:11, Lepaic07
Bonjour !
Voici mon problème ;
Ma macro utilise en plusieurs points un système de recherche et, dans l e cas
ou aucune correspondance n'a été trouvé, le débogueur s'active (e rreur "91")
Le but de mon gestionnaire d'erreur serais de scanner toute mon applicati on
(faite de plusieurs procédures et userforms) qui s'activerais à l'ouv erture
du classeur et se fermerais à la fermeture, sans passer par "on error" dans
chaque procédure et, dans le cas de l'erreur "91" proposer de re-rensei gner
la recherche et de propôser de reprendre la macro au début en cas de toutes
autres erreurs.

Merci à tout le monde par avance !

Emilien


Que demandes tu exactement ? J'ai relu deux fois et je ne comprends
pas ce que tu cherches.

Lepaic07
Le #4359591
En bref :
- Mon application se compose de plusieurs modules et userforms.
- Il est possible que des erreurs "attendues" se produisent (comme une
recherche avec un mot erroné ou inexistant (erreur "91"
- Des utilisateurs "de base" doivent travailler sur cette application

Je voudrais créé un gestionnaire des erreur "centralisé" qui m'éviterai
d'utiliser la fonction On Error dans chaques procédures et ainsi rediriger
les utilisateur selon les erreurs (après ca je gère)

Ma question :
- Quel est le code me permettant d'activer le controle d'erreur des le
lancement de l'application et fonctionnat tout au long de l'application (sans
utiliser On Error dans chaque procédure !) ?

Merci d'avance
Modeste
Le #4359541
Bonsour® Lepaic07 avec ferveur ;o))) vous nous disiez :

Je voudrais créé un gestionnaire des erreur "centralisé" qui m'éviterai
d'utiliser la fonction On Error dans chaques procédures et ainsi rediriger
les utilisateur selon les erreurs (après ca je gère)


une erreur se gère à la source !!!!!!
le On Error est donc necessaire dans chaque proc
c'est ce On Error qui pourra alors transmettre à un module spécialisé les
conditions et circonstances de cette erreur
ainsi que tout les parametres utiles à ce traitement centralisé.

dans une application industrialisée, la partie traitement des erreurs,
correction ou interruption représente en général 20 à 25% du code !!!!



--
--
@+
;o)))

Lepaic07
Le #4358871
Merci Modeste pour ta réponse.
Je conçois bien qu'une erreur doit etre gérée à la source, mais dans une
application "industrialisée", 25% du code c'est lourd...
Je connais la gestion d'erreur dans les procédures avec "On Error", et je
l'utilise mais ma question est :

N'est il pas possible d'utiliser un AUTRE moyen (que je ne connaitrais pas)
pour éviter justement d'alourdir le code et donc le ralentir ? Comme une
sorte de système de gestion "centralisé" ?

A vos avis !

Emilien
Lepaic07
Le #4358641
Le deuxième soucis avec On Error GoTo, c'est qu'il est capable de gérer
qu'une seule erreur !
Cad :

Private Sub recherche()

Retour:
piece = InputBox("Veuillez indiquer la désignation de la pièce", Titre)

Range(Cells(3, 2), Cells(12, 2)).Select 'définie la zone de recherche

On Error GoTo Erreur

Selection.Find(What:=piece, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Activate

...
'Reste du code

Erreur:
Select Case Err.Number
Case 91
x = MsgBox("Le paramètre entré n'est pas valide, merci de
recommencer", vbCritical + vbOKOnly)
GoTo Retour

Case Else
Resume
End Select

End Sub

Dans cette configuration, et dans le cas ou les parametres d'entrés sont
erronés 2 fois de suite, le débogueur s'execute...

Alors si vous avez la solution, je suis preneur !

Merci ! Emilien
JB
Le #4358471
Bonjour,


Sub recherche()
On Error Resume Next ' Une erreur peut se produire dans la
séquence suivante
Do
Err = 0
piece = InputBox("Veuillez indiquer la désignation de la pièce",
Titre)
[A:A].Find(What:=piece, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse).Activate
If Err <> 0 Then MsgBox "Inconnu"
Loop While Err <> 0
'--suite
On Error GoTo 0 ' annule la gestion des erreurs
'
'
End Sub

Sur cet exemple, il est possible de ne pas utiliser la gestion
d'erreur.

Sub recherche2()
Do
piece = InputBox("Veuillez indiquer la désignation de la pièce",
Titre)
Set result = [A:A].Find(What:=piece, LookIn:=xlValues,
LookAt:=xlWhole)
If result Is Nothing Then
MsgBox "Inconnu"
Else
result.Select
End If
Loop While result Is Nothing
'--suite
'
'
End Sub


JB

On 2 mar, 12:05, Lepaic07
Le deuxième soucis avec On Error GoTo, c'est qu'il est capable de gér er
qu'une seule erreur !
Cad :

Private Sub recherche()

Retour:
piece = InputBox("Veuillez indiquer la désignation de la pièce", Ti tre)

Range(Cells(3, 2), Cells(12, 2)).Select 'définie la zone de recherche

On Error GoTo Erreur

Selection.Find(What:=piece, After:¬tiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection: =xlNext, _
MatchCase:úlse).Activate

...
'Reste du code

Erreur:
Select Case Err.Number
Case 91
x = MsgBox("Le paramètre entré n'est pas valide, merci de
recommencer", vbCritical + vbOKOnly)
GoTo Retour

Case Else
Resume
End Select

End Sub

Dans cette configuration, et dans le cas ou les parametres d'entrés sont
erronés 2 fois de suite, le débogueur s'execute...

Alors si vous avez la solution, je suis preneur !

Merci ! Emilien


Lepaic07
Le #4358211
Merci JB, ca résout en partie mon "problème" qui n'en est pas un !
Mis à part que le code est toujour aussi lourd...

Merci à tous pour votre aide !
Publicité
Poster une réponse
Anonyme