On Error GoTo

Résolu
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007 - 17 juil. 2007 à 12:29
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 17 juil. 2007 à 23:35
Bonjour,
Voici mon code
' --------------------------------------
' Mise en forme du graph aerau
' --------------------------------------
    On Error GoTo Acou
    Sheets("Graph_aerau").Select
        With ActiveChart
            .HasTitle = True            If mm 1 Or mm - pp 1 Then
                .ChartTitle.Characters.Text = "Courbe réduite aéraulique de " & mm - pp & " ventilateur"
            Else
                .ChartTitle.Characters.Text = "Courbes réduites aérauliques de " & mm - pp & " ventilateurs"
            End If
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "delta'"
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "mu"
            .ChartArea.Select
        End With
' --------------------------------------
' Mise en forme du graph acou
' --------------------------------------
Acou:
    On Error GoTo Finir
    Sheets("Graph_acou").Select
        With ActiveChart
            .HasTitle = True            If mm 1 Or mm - nn 1 Then
                .ChartTitle.Characters.Text = "Courbe réduite acoustique de " & mm - nn & " ventilateur"
            Else
                .ChartTitle.Characters.Text = "Courbes réduites acoustiques de " & mm - nn & " ventilateurs"
            End If
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "phi ouverture réduite'"
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "lw dB(A)"
            .ChartArea.Select
        End With
    Sheets("Données").Select
Finir:
    Application.ScreenUpdating = True
End Sub

Voici mon poblème : quand je lance la Macro, il se peut que Graph_acou ou Graph_aerau n'existe pas. Par consequent j'ai une erreur qui apparaît. Je décide donc de passer à l'instruction suivante si cette erreur apparaît. Pour le premier graphe cela fonctionne, mais pas pour le deuxième graphe. J'ai la fenêtre d'erreur d'indice en dehors de la plage qui stoppe mon programme. Le problème viendrait-il du fait que je fais suivre 2 On Error GoTo à la suite ?

Merci d'avance

10 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 15:43
J'ai l'impression que je me suis trompré en effet de lien.

Voyons onc si ma mémoire de ce que j'avais lu dans le bon lien est bonne :

Sub listons_feuilles()
 Dim feuille
 For each feuille in ActiveWorkBook.Sheets
   msgbox feuille.name
 next
end sub

te donnerait les noms des feuille existantes

Reste à faire une fonction :

Private function coucou(nom_feuille as string) as boolean
      coucou = false
     dim feuille
     For each feuille in ActiveWorkBook.Sheets
           If feuille.name = nom_feuille then
                coucou = True
                 exit for
           End If
      next
End Function

et à appeler la vérification ainsi :

dim mon_nom as string
mon_nom = "feuille_supposee"
if coucou(mon_nom) then
     msgbox mon_nom & " est bien une feuille"
else
    msgbox mon_nom & " n'est pas une feuille"
end if

reste à savoir si mamémoire est bonne (je n'ai pas envie de rechercher à nouveau) mais il te suffit d'essayer, n'est-ce pas ?
3
Zakata Messages postés 59 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 17 juillet 2009
17 juil. 2007 à 13:01
Salut

Pour répoondes à ta question, je pense que ca ne pose pas de problème de mettre plusieurs gestion d'erreur au sein d'une même procédure.

Sur quelle ligne ton programme bug t il ?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 13:01
Bonjour,

Je te suggère de faire quelques petits tests... de te gratter la tête... d'observer... et d'en tirer profit :

Test 1, donc :

Private Sub Command3_Click()
  On Error GoTo a
  Error = 3
  MsgBox "on va voir si je passe par là, hein ?"
a:
  On Error GoTo b
  MsgBox "je suis en a"
b:
  MsgBox "je suis en b"
End Sub

Examines bien et note tout !
Puis : test 2 :
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 13:05
Et zut...

Bon... voilà le test 2

:Private Sub Command3_Click()
  On Error GoTo a
  Error = 3
  MsgBox "on va voir si je passe par là, hein ?"
a:
  If Err Then GoTo b
  MsgBox "je suis en a"
b:
  MsgBox "je suis en b"
End Sub

tu vois la différence ?
Si oui... tu réfléchis... tu comprends... tu te sers de ces "subtilités"- là

Ceci étant dit : il est nettement préférable de ne passer par une gestion d'erreur que lorsqu'il est rigoureusement impossible de pouvoir écrire ce qui provoquerait une éventuelle erreur ! Bien évidemment !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 13:27
Correction ! Lire :
ne passer par une gestion d'erreur que lorsqu'il est rigoureusement impossible de pouvoir écrire ce qui ne provoquerait pas une éventuelle erreur

Je ne connais pas VBA, mais il y a surement un moyen de vérifier l'existence ou non d'une feuille...(plutôt que de gérer une erreur sur son inexistence éventuelle)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 13:31
Ouais, apparemment :

Lire donc :

http://xlbysteph.free.fr/aideinformatique/xl_test_existence.htm

On y trouve ce qu'il faut pour tester cette existence et, donc, d'avoir à gérer une erreur ...
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
17 juil. 2007 à 14:38
-> Zakata : Mon prog bug à la ligne Sheets("Graph_acou").Select
En effet cette feuille n'existe pas. Mais ce que je ne comprends pas c'est pourquoi le On Error GoTo Finir situé juste au-dessus ne remarque pas qu'il y a un retour d'erreur.

->jmfmarques : je ne comprends pas ta ligne If Err Then GoTo b
Est-ce que Err est une fonction ???
Ton premier test fait la même chose, "je suis en a" et "je suis en b", qu'il y est On Error GoTo b ou non. J'ai déplacé b: en le remontant au dessus de MsgBox "on va voir si je passe par là, hein ?". le prog affiche "je suis en b". Du coup on peut en déduire qu'il n'y a pas d'erreur à la suite de "je suis en a".
Ton 2eme test file directement sur "je suis en b". Cela se comprend d'après l'ordre que tu as mis et si je passe la signification de ta condition.
Sinon merci pour le lien. J'avais déjà regardé ça, mais je pensais que c'était plus simple de passer par ma gestion d'erreur puisque je ne cherche pas à savoir si une feuille existe, mais plutôt à la mettre en forme si elle existe. Excel m'informant par une erreur qu'elle n'existe pas, autant se servir de ce retour.
D'ailleurs sur le lien que tu m'a donné, ils font la même chose que moi, il se servent du retour d'erreur.
0
Petit Ecolier Messages postés 11 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 31 juillet 2007
17 juil. 2007 à 16:37
Juste une remarque, je ne sais pas pourquoi tu as listé les feuilles mais c'est pas grave, car le reste fonctionne.
C'est beaucoup plus rigoureux que de travailler avec les erreurs.
Bonne mémoire donc jmfmarques
Merci beaucoup
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 juil. 2007 à 16:51
Je n'ai listé que pour te montrer le mécanisme...


L'appel de la fonction, par contre, ne liste pas et te renvoir True (si la feuille existe) ou False (si elle n'existe pas).
Dans ton appli, donc, tu ne fais la mise en Forme que si la feuille existe.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 juil. 2007 à 23:35
Maintenant que JMF t'a montré comment éviter cette gestion d'erreur, j'aurais 2 points concernant ton bout de code.

Premièrement, tu n'as pas mis de Exit Sub juste avant ton étiquette d'erreur " Acou: "
Donc, à chaque fois que tu actives cette procédure, tu y passeras.

Deuxièment, un peu comme te le démontraient les codes de JMF, tu entres dans la partie de gestion " Acou: ", et tu inscrit immédiatement d'aller vers " Finir: ", donc le code entre les 2 ne sera jamais exécuté...

Fin de la parenthèse...

MPi
0
Rejoignez-nous