Petit Ecolier
Messages postés11Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention31 juillet 2007
-
17 juil. 2007 à 12:29
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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 ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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)
Petit Ecolier
Messages postés11Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention31 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.
Petit Ecolier
Messages postés11Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention31 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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é...