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

Comment travailler avec les erreurs de programme

4 réponses
Avatar
Alex St-Pierre
Bonjour!
J'ai construis un programme vba qui va être utilisé par beaucoup de personne
et il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester) Je me demandais qu'elle est la meilleure façon de travailler
avec celles-ci.

Le programme contient une vingtaine de modules avec des Sub qui call d'autre
Sub. Avec des "On error Resume Next" et "On error Goto 0" un peu partout.

1) S'il y a erreur, y-a-t-il arrêt de la macro automatiquement? Si oui, je
voudrais dire: On error Call MsgErreur mais avec les "On error Resume Next",
est-ce que ça veut dire qu'il faut écrire On error Call MsgErreur partout
après les "On error goto 0" et au début de chaque macro?

2) Le code VBA va être verrouillé. Je pense qu'en cas d'erreur, il n'y aura
aucun déboguage possible. Y-a-t-il une façon de savoir où le programme plante
et d'inscrire un code à l'utilisateur?

Merci !
Alex
--
Alex St-Pierre

4 réponses

Avatar
JB
On 3 fév, 04:45, Alex St-Pierre
wrote:
Bonjour!
J'ai construis un programme vba qui va être utilisé par beaucoup de p ersonne
et il est possible qu'il reste des erreurs dans mon code. (c'est impossib le
de tout tester) Je me demandais qu'elle est la meilleure façon de trava iller
avec celles-ci.

Le programme contient une vingtaine de modules avec des Sub qui call d'au tre
Sub. Avec des "On error Resume Next" et "On error Goto 0" un peu partout.

1) S'il y a erreur, y-a-t-il arrêt de la macro automatiquement? Si oui, je
voudrais dire: On error Call MsgErreur mais avec les "On error Resume Nex t",
est-ce que ça veut dire qu'il faut écrire On error Call MsgErreur par tout
après les "On error goto 0" et au début de chaque macro?

2) Le code VBA va être verrouillé. Je pense qu'en cas d'erreur, il n' y aura
aucun déboguage possible. Y-a-t-il une façon de savoir où le progra mme plante
et d'inscrire un code à l'utilisateur?

Merci !
Alex
--
Alex St-Pierre

S'il y a erreur, y-a-t-il arrêt de la macro automatiquement?


Si la gestion des erreurs n'est pas activée par On Error Resume Next
ou On error Goto 0, l'exécution du pgm est stoppée.


il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester)


Il n'y a pas de miracle, Il faut prévoir tous les cas d'erreurs. En
cas d'erreur imprévue, il faut stopper l'exécution du pgm.

Sub essai()
'....
'....
On Error Resume Next ' si erreur continuer
onglet = "Toto"
Sheets(onglet).Select
Select Case err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
finPgm
End Select
On Error GoTo 0 ' on désactive la gestion d'erreur
'suite du pgm
'....
End Sub

Sub finPgm()
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) =
Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = err.Description
ActiveWorkbook.Save
Stop
End Sub

JB

Avatar
Alex St-Pierre
Salut JB!
Dans l'exemple de la création d'une feuille, j'utilise l'approche:
On Error Resume Next
Set wsTmp = ThisWorkbook.Worksheets("Toto")
If wsTmp Is Nothing Then
Set wsTmp = ThisWorkbook.Worksheets.Add
wsTmp.Name = "Toto"
End If
J'ai ajusté chaque situation pour essayer que rien n'arrive. J'ouvre les
librairies Word à l'ouverture d'Excel et les fermes à la ferme à la
fermeture. Si jamais elles ne sont pas ouvertes, le programme ne roule pas et
un message apparait pour dire où aller cliquer dans Excel pour ajuster le
niveau de sécurité. S'il y a des références manquantes, le programme les
enlèves. Tout les procédures qui réfère à Word sont déclarées p/r à
Word.Application car certaines existent à la foie dans Word et Excel. Bref,
s'il y a une erreur, je sais pas où ça va se produire.
1- Si je met rien pour attraper les erreurs, est-ce que le programme va
arrêter immédiatement dans tous les cas?
2- Puis-je mettre quelque chose du style "On error GoTo finPgm"?
Merci!
Alex
--
Alex St-Pierre


"JB" wrote:

On 3 fév, 04:45, Alex St-Pierre
wrote:
Bonjour!
J'ai construis un programme vba qui va être utilisé par beaucoup de personne
et il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester) Je me demandais qu'elle est la meilleure façon de travailler
avec celles-ci.

Le programme contient une vingtaine de modules avec des Sub qui call d'autre
Sub. Avec des "On error Resume Next" et "On error Goto 0" un peu partout.

1) S'il y a erreur, y-a-t-il arrêt de la macro automatiquement? Si oui, je
voudrais dire: On error Call MsgErreur mais avec les "On error Resume Next",
est-ce que ça veut dire qu'il faut écrire On error Call MsgErreur partout
après les "On error goto 0" et au début de chaque macro?

2) Le code VBA va être verrouillé. Je pense qu'en cas d'erreur, il n'y aura
aucun déboguage possible. Y-a-t-il une façon de savoir où le programme plante
et d'inscrire un code à l'utilisateur?

Merci !
Alex
--
Alex St-Pierre

S'il y a erreur, y-a-t-il arrêt de la macro automatiquement?


Si la gestion des erreurs n'est pas activée par On Error Resume Next
ou On error Goto 0, l'exécution du pgm est stoppée.


il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester)


Il n'y a pas de miracle, Il faut prévoir tous les cas d'erreurs. En
cas d'erreur imprévue, il faut stopper l'exécution du pgm.

Sub essai()
'....
'....
On Error Resume Next ' si erreur continuer
onglet = "Toto"
Sheets(onglet).Select
Select Case err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
finPgm
End Select
On Error GoTo 0 ' on désactive la gestion d'erreur
'suite du pgm
'....
End Sub

Sub finPgm()
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) > Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = err.Description
ActiveWorkbook.Save
Stop
End Sub

JB





Avatar
MichDenis
n'ajoute pas les bibliothèques de Word à ton projet Excel, utilise plutôt
une "liaison tardive" comme ceci :

Cette façon de faire s'applique quelle que soit la version de Word
installée sur l'ordinateur. Évidemment, l'application Word doit être
présente.

'----------------------------
Dim Wd as object
Dim Dc as Object

On error resume next
Set Wd = Getobject(,"Word.application")
if err <>0 then
Err = 0
Set Wd = CreateObject("Word.Application")
end if

Wd.Visible = True ' -< rend l'application Word visible
Set Dc = Wd.Documents.Open("Chemin & fichier.Doc" à ouvrir)
'Le reste de ton code...

'Pour fermer le fichier
Dc.Close True 'sauvegarde et fermeture du fichier wd
'Fermer l'application Word
Wd.quit
'----------------------------




"Alex St-Pierre" a écrit dans le message de news:

Salut JB!
Dans l'exemple de la création d'une feuille, j'utilise l'approche:
On Error Resume Next
Set wsTmp = ThisWorkbook.Worksheets("Toto")
If wsTmp Is Nothing Then
Set wsTmp = ThisWorkbook.Worksheets.Add
wsTmp.Name = "Toto"
End If
J'ai ajusté chaque situation pour essayer que rien n'arrive. J'ouvre les
librairies Word à l'ouverture d'Excel et les fermes à la ferme à la
fermeture. Si jamais elles ne sont pas ouvertes, le programme ne roule pas et
un message apparait pour dire où aller cliquer dans Excel pour ajuster le
niveau de sécurité. S'il y a des références manquantes, le programme les
enlèves. Tout les procédures qui réfère à Word sont déclarées p/r à
Word.Application car certaines existent à la foie dans Word et Excel. Bref,
s'il y a une erreur, je sais pas où ça va se produire.
1- Si je met rien pour attraper les erreurs, est-ce que le programme va
arrêter immédiatement dans tous les cas?
2- Puis-je mettre quelque chose du style "On error GoTo finPgm"?
Merci!
Alex
--
Alex St-Pierre


"JB" wrote:

On 3 fév, 04:45, Alex St-Pierre
wrote:
Bonjour!
J'ai construis un programme vba qui va être utilisé par beaucoup de personne
et il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester) Je me demandais qu'elle est la meilleure façon de travailler
avec celles-ci.

Le programme contient une vingtaine de modules avec des Sub qui call d'autre
Sub. Avec des "On error Resume Next" et "On error Goto 0" un peu partout.

1) S'il y a erreur, y-a-t-il arrêt de la macro automatiquement? Si oui, je
voudrais dire: On error Call MsgErreur mais avec les "On error Resume Next",
est-ce que ça veut dire qu'il faut écrire On error Call MsgErreur partout
après les "On error goto 0" et au début de chaque macro?

2) Le code VBA va être verrouillé. Je pense qu'en cas d'erreur, il n'y aura
aucun déboguage possible. Y-a-t-il une façon de savoir où le programme plante
et d'inscrire un code à l'utilisateur?

Merci !
Alex
--
Alex St-Pierre

S'il y a erreur, y-a-t-il arrêt de la macro automatiquement?


Si la gestion des erreurs n'est pas activée par On Error Resume Next
ou On error Goto 0, l'exécution du pgm est stoppée.


il est possible qu'il reste des erreurs dans mon code. (c'est impossible
de tout tester)


Il n'y a pas de miracle, Il faut prévoir tous les cas d'erreurs. En
cas d'erreur imprévue, il faut stopper l'exécution du pgm.

Sub essai()
'....
'....
On Error Resume Next ' si erreur continuer
onglet = "Toto"
Sheets(onglet).Select
Select Case err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
finPgm
End Select
On Error GoTo 0 ' on désactive la gestion d'erreur
'suite du pgm
'....
End Sub

Sub finPgm()
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) > Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = err.Description
ActiveWorkbook.Save
Stop
End Sub

JB





Avatar
JB
On 3 fév, 14:53, Alex St-Pierre
wrote:
SalutJB!
Dans l'exemple de la création d'une feuille, j'utilise l'approche:
On Error Resume Next
Set wsTmp = ThisWorkbook.Worksheets("Toto")
If wsTmp Is Nothing Then
Set wsTmp = ThisWorkbook.Worksheets.Add
wsTmp.Name = "Toto"
End If
J'ai ajusté chaque situation pour essayer que rien n'arrive. J'ouvre les
librairies Word à l'ouverture d'Excel et les fermes à la ferme à la
fermeture. Si jamais elles ne sont pas ouvertes, le programme ne roule pa s et
un message apparait pour dire où aller cliquer dans Excel pour ajuster le
niveau de sécurité. S'il y a des références manquantes, le progra mme les
enlèves. Tout les procédures qui réfère à Word sont déclaré es p/r à
Word.Application car certaines existent à la foie dans Word et Excel. B ref,
s'il y a une erreur, je sais pas où ça va se produire.
1- Si je met rien pour attraper les erreurs, est-ce que le programme va
arrêter immédiatement dans tous les cas?
2- Puis-je mettre quelque chose du style "On error GoTo finPgm"?
Merci!
Alex
--
Alex St-Pierre



"JB" wrote:
On 3 fév, 04:45, Alex St-Pierre
wrote:
Bonjour!
J'ai construis un programme vba qui va être utilisé par beaucoup de personne
et il est possible qu'il reste des erreurs dans mon code. (c'est impo ssible
de tout tester) Je me demandais qu'elle est la meilleure façon de t ravailler
avec celles-ci.

Le programme contient une vingtaine de modules avec des Sub qui call d'autre
Sub. Avec des "On error Resume Next" et "On error Goto 0" un peu part out.

1) S'il y a erreur, y-a-t-il arrêt de la macro automatiquement? Si oui, je
voudrais dire: On error Call MsgErreur mais avec les "On error Resume Next",
est-ce que ça veut dire qu'il faut écrire On error Call MsgErreur partout
après les "On error goto 0" et au début de chaque macro?

2) Le code VBA va être verrouillé. Je pense qu'en cas d'erreur, i l n'y aura
aucun déboguage possible. Y-a-t-il une façon de savoir où le pr ogramme plante
et d'inscrire un code à l'utilisateur?

Merci !
Alex
--
Alex St-Pierre

S'il y a erreur, y-a-t-il arrêt de la macro automatiquement?


Si la gestion des erreurs n'est pas activée par On Error Resume Next
ou On error Goto 0, l'exécution du pgm est stoppée.

il est possible qu'il reste des erreurs dans mon code. (c'est impossi ble
de tout tester)


Il n'y a pas de miracle, Il faut prévoir tous les cas d'erreurs. En
cas d'erreur imprévue, il faut stopper l'exécution du pgm.

Sub essai()
'....
'....
On Error Resume Next ' si erreur continuer
onglet = "Toto"
Sheets(onglet).Select
Select Case err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
finPgm
End Select
On Error GoTo 0 ' on désactive la gestion d'erreur
'suite du pgm
'....
End Sub

Sub finPgm()
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) =
Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = err.Description
ActiveWorkbook.Save
Stop
End Sub

JB- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



1- Si je met rien pour attraper les erreurs, est-ce que le programme va
arrêter immédiatement dans tous les cas?


S'il n'y a pas d'instruction 'On Error' programmée, l'exécution du
pgm s'interrompt immédiatement en cas d'erreur.

2- Puis-je mettre quelque chose du style "On error GoTo finPgm"?


Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter
l'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour erreurs
non prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = err.Description
ActiveWorkbook.Save
Stop
End Sub

JB