Gestion erreur ?

Y

ya_v_ka

Guest
re salut tout le monde,
Petite question.
j'ai le code suivant:

Private Sub ListBox1_Click()
On Error GoTo Fin
Application.AskToUpdateLinks = False
If ListBox1.Value = Worksheets("Trad").Range("A102").Value Then Sheets.Add after:=Sheets(Sheets.Count), Type:="C:\contrôle.xlt"
If...
If ListBox1.Value = Worksheets("Trad").Range("A115").Value Then Sheets.Add after:=Sheets(Sheets.Count), Type:="C:\total.xlt"
Fin:
Application.AskToUpdateLinks = True
Unload Me
End Sub

je souhaiterais en cas d'erreur soit 1. afficher un msgbox perso signalant l'erreur, mais je ne sais pas ou la mettre ?
soit 2. faire apparaitre la fenetre excel de recherche de fichier... ce qui serait beaucoup plus propre...

merci d'avance pour vos propositions... et commencez cette année 2005 mieux que moi ! (cf bonne année 2005!)

Ya'v
 
M

myDearFriend

Guest
Bonsoir Ya'v, le Forum.


Ci-dessous, peut-être le début d'une solution :

NON TESTE !
Private Sub ListBox1_Click()
Dim Chemin As Variant
   Application.AskToUpdateLinks = False
   With Worksheets("Trad")
      Select Case ListBox1.Value
      Case .Range("A102").Value
         Chemin = "C:\contrôle.xlt"
      Case .range(....
         ....
      Case .Range("A115").Value
         Chemin = "C:\total.xlt"
      Case Else
         Chemin = Application.GetOpenFilename(FileFilter:="Feuille modèle (*.xlt)," _
         & "*.xlt", Title:="Sélectionnez le modèle de feuille souhaité...")
      End Select
   End With
&nbsp;&nbsp;&nbsp;If Chemin <> False Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheets.Add after:=Sheets(Sheets.Count), Type:=Chemin
&nbsp;&nbsp;&nbsp;Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MsgBox "Action abandonnée !"
&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Application.AskToUpdateLinks = True
&nbsp;&nbsp;&nbsp;Unload Me
End Sub


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
Y

ya_v_ka

Guest
Salut Didier,

merci, ca semble super... (pas encore testé non plus faut que je rentre tous les chemins ...

mais il me vient une nouvelle question: si tous les fichers nommées se trouvent dans le dossier C:\programesfiles\mesfichiers\mondossier\mon dossierxlt\mesxltperso\mesxltaajouter\ est-ce que je peux le mettre en variable au lieu de le répeter 15 fois ?

et ou puis-je trouver des infos sur les gestion d'erreur de excel prédéfinies ?

merci encore

ya'v
 
M

myDearFriend

Guest
Re&nbsp;Ya'v,


Tu pourrais facilement faire comme ça en reprenant l'exemple plus haut :

Case .Range("A102").Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chemin = "contrôle"
...
...
If Chemin <> False Then
&nbsp;&nbsp;&nbsp;Sheets.Add after:=Sheets(Sheets.Count), _
&nbsp;&nbsp;&nbsp; Type:="C:\programesfiles\mesfichiers\mondossier\mon dossierxlt\mesxltperso\mesxltaajouter\" & _
&nbsp;&nbsp;&nbsp; Chemin & ".xlt"
...

(Bien que le choix de "Chemin" pour cette variable ne soit plus vraiment judicieux dans ce cas)


Pour ta deuxième question : une recherche de "On Error" dans l'aide de VBA me semble déjà assez intéressante...


Cordialement.

Didier_mDF
myDearFriend-3.gif
 
Y

ya_v_ka

Guest
Re bonjour Didier, le Forum

Voilà j'ai testé et ... suis revenu au système précédent, avec une etiquette pour la gestion des erreurs. En effet, ta solution, je pense à cause de la concaténation du chemin de fichier, me renvoie une erreur d'execution 1004 en cas d'erreur...
Donc, maintenant la gestion d'erreur fonctionne, mais je me demande toujours, en cas de mauvaise données concernant le chemin de fichier, peut-on laisser l'utilisateur faire la recherche lui même avec une fenêtre de recherche (brows" classique d'Excel ?

Merci encore

Ya'v
 
Y

ya_v_ka

Guest
Bonjour Didier, le Forum

bin voilà chose promise, chose due... j'ai testé et modifié comme suit:

Private Sub ListBox1_Click()
Dim Fi As Variant
Dim Msg1 As String, Msg2 As String
Msg1 = Worksheets("Trad").Range("A215").Value
Msg2 = Worksheets("Trad").Range("A214").Value
Application.AskToUpdateLinks = False
On Error GoTo REr
With Worksheets("Trad")
Select Case ListBox1.Value
Case .Range("A102").Value
Fi = "Controlle_caisse"
...
Case Else
Fi = Application.GetOpenFilename(filefilter:="feuille modèle(*.xlt),*.xlt", Title:="sélectionnez le modèle souhaité...")
Sheets.Add after:=Sheets(Sheets.Count), Type:=Fi
GoTo Etq1
End Select
End With
If Fi <> False Then
Sheets.Add after:=Sheets(Sheets.Count), Type:="C:\Documents and Settings\Christian Cart\" & Fi & ".xlt"
Else
Msgbox Msg1, , Msg2
End If
Etq1:
Application.AskToUpdateLinks = True
Unload Me
Exit Sub
REr:
Fi = Application.GetOpenFilename(filefilter:="feuille modèle(*.xlt)," & "*.xlt", Title:="sélectionnez le fichier désiré...")
If Fi <> False Then
Sheets.Add after:=Sheets(Sheets.Count), Type:=Fi
Else
Msgbox "Demande invalidée !"
End If
Resume Etq1
End Sub

Peut-être un peu complexe, mais sionon le message d'erreur pour un fichier non trouvé est "erreur 1004" et la sub est annulée.

Mon dernier soucis... lorsque la fenêtre getopen.. est appelée depuis le case else et que l'on clic sur "annuler", ca me renvoie au getopen... de la gestion d'erreur REr (donc le False renvoyé est interpreté comme erreur...), et je ne sais comment y remedier (n'ai tenté que 22 solutions jusqu'ici !) ;-)

je vais continuer à plancher, mais tiens encore à te remercier grandement

Ya'v
 
M

myDearFriend

Guest
Bonjour Ya'v, le Forum.


Bon Ya'v, là franchement, j'ai bien peur qu'on se dirige tout droit vers l'usine à gaz...

Voici une partie de ton code :
On error goto REr
...
Case Else
Fi = Application.GetOpenFilename(filefilter:="feuille modèle(*.xlt),*.xlt", Title:="sélectionnez le modèle souhaité...")
Sheets.Add after:=Sheets(Sheets.Count), Type:=Fi
GoTo Etq1

End Select
End With
If Fi <> False Then
Sheets.Add after:=Sheets(Sheets.Count), Type:="C:\Documents and Settings\Christian Cart\" & Fi & ".xlt"
Else
Msgbox Msg1, , Msg2
End If
Etq1:
...

...lorsque la fenêtre getopen.. est appelée depuis le case else et que l'on clic sur "annuler", ca me renvoie au getopen... de la gestion d'erreur REr


Oui Ya'v, je te confirme que, dans ton code, si Fi vaut False alors Sheets.Add after:=Sheets(Sheets.Count), Type:=Fi ne peut que te générer une erreur qui va te rediriger vers "REr" (donc à nouveau vers un autre "GetOpenFilename")...
Par ailleurs, ton test If Fi <> False Then qui suit le End Select, ne sert à rien puisqu'avec ton Goto Etq1, même si Fi vaut False et qu'il ne génère pas d'erreur, ton code ne passera pas par là de toute façon.


Je te refais donc une ultime proposition basée sur le code proposé précédemment (sans gestionnaire d'erreur) en ayant toutefois revu la façon de gérer la variable "Chemin" :

Private Sub ListBox1_Click()
Dim Chemin As Variant
&nbsp; Application.AskToUpdateLinks = False
&nbsp; Chemin = "C:\Documents and Settings\Christian Cart\"
&nbsp; With Worksheets("Trad")
&nbsp;&nbsp;&nbsp;&nbsp;Select Case ListBox1.Value
&nbsp;&nbsp;&nbsp;&nbsp;Case .Range("A102").Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chemin = Chemin & "contrôle.xlt"
&nbsp;&nbsp;&nbsp;&nbsp;Case .range(....
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....
&nbsp;&nbsp;&nbsp;&nbsp;Case .Range("A115").Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chemin = Chemin & "total.xlt"
&nbsp;&nbsp;&nbsp;&nbsp;Case Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chemin = Application.GetOpenFilename(FileFilter:="Feuille modèle (*.xlt)," _
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; & "*.xlt", Title:="Sélectionnez le modèle de feuille souhaité...")
&nbsp;&nbsp;&nbsp;&nbsp;End Select
&nbsp; End With
&nbsp; If Chemin <> False Then
&nbsp;&nbsp;&nbsp;&nbsp;Sheets.Add after:=Sheets(Sheets.Count), Type:=Chemin
&nbsp; Else
&nbsp;&nbsp;&nbsp;&nbsp;MsgBox "Action abandonnée !"
&nbsp; End If
&nbsp; Application.AskToUpdateLinks = True
&nbsp; Unload Me
End Sub


Je te souhaite bon courage...

Cordialement.

Didier_mDF
myDearFriend-3.gif
 
Y

ya_v_ka

Guest
Bonjour Didier, le Forum

Encore une fois merci pour ta patience et participation, ce code fonctionne aussi bien que le précédent... mais me renvoie toujours une "erreur d'execution 1004" en cas de déplacement du fichier à inserer... mais suite à ta remarque sur l'usine à gaz j'ai réfléchi aussi... j'ai remis mon Onerrorgoto REr... mais ai placé mon REr: juste après le caseelse ET CA MARCHE. En effet pourquoi réinscrire du code qui existe déjà ?

Je te remercie encore, sans toi je n'y serais jamais parvenu (et désolé de devoir de nouveau rajouter mon grain de sel...)

Ya'v
 

Discussions similaires

Réponses
3
Affichages
661

Statistiques des forums

Discussions
312 971
Messages
2 094 046
Membres
105 927
dernier inscrit
rayade baali