Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion des erreurs

7 réponses
Avatar
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

7 réponses

Avatar
dunkelzahn
On 1 mar, 09:11, Lepaic07 wrote:
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.

Avatar
Lepaic07
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
Avatar
Modeste
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)))

Avatar
Lepaic07
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
Avatar
Lepaic07
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
Avatar
JB
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 wrote:
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


Avatar
Lepaic07
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 !