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

(vba) erreur d'aiguillage ...

14 réponses
Avatar
j-pascal
Bonjour,

Un truc que je ne comprends pas dans ce qui suit :

'------------------------
(...proc ...)

'ChDrive "C"
On Error GoTo rRr
ChDir "C:\Documents and Settings\toto\Bureau"
rRr:
ChDir "C:\Documents and Settings\"
'------------------------

Dans mon test, le répertoire "C:\Documents and Settings\toto\Bureau" existe
et pourtant je me retrouve inéxorablement sur "C:\Documents and Settings\"
!!
Le 'ChDrive "C" est-il indispensable ?
Les procédures événementielles peuvent-elles être responsables de ce
dysfonctionnement ?

Par ailleurs, 'On Error Resume Next ' n'aurait-il pas le même usage ?

Merci d'avance pour vos lumières,

Cordialement,

JP

4 réponses

1 2
Avatar
j-pascal
Bonsoir,

Comme je viens de le dire à Daniel.C pour un autre sujet, ta réponse a
illuminé ma journée !!
La joie de trouver une solution est assurément proportionnelle aux doutes et
aux moments de solitude qu'on traverse pour arriver jusque là !
Merci ++++++++++++++++++++++++

PS : je n'ai pas pu tester jusqu'au bout, le code "If Err <> 0 Then ..."
mais je vais m'y remettre. J'ai remplacé ton "Err" par "Error" ;-)
PS : ce qui me console, c'est que la solution n'était apparemment pas si
aisée ...

JP

"MichDenis" a écrit dans le message de news:

'------------------------
(...proc ...)

'ChDrive "C"
On Error GoTo rRr
ChDir "C:Documents and SettingstotoBureau"
rRr:
ChDir "C:Documents and Settings"
'------------------------

Le fait d'écrire "On Error Goto rRr signifie seulement que
si un problème survient avec la procédure, au lien de se planter
la procédure continuera à la ligne de l'étiquette rRr.

Cependant, si aucune erreur n'est relevé, toutes les lignes de code
seront exécutées y compris la ligne en cas d'erreur. Résultat : Tu te
retrouve dans le répertoire : ChDir "C:Documents and Settings"

Pour éviter cela, il est possible de faire ceci :
'------------------------------
On Error Resume Next
If Dir("C:Documents and SettingstotoBureau", vbDirectory) <> "" Then
ChDir "C:Documents and SettingstotoBureau"
Else
ChDir "C:Documents and Settings"
End If
If Err <> 0 Then
Err = 0
MsgBox "Aucun des répertoires n'existe."
Exit Sub ' met fin à la procédure
' ou l'action que tu veux exécuter si problème
End If
'Le reste de ton code...
'------------------------------





Avatar
j-pascal
Bonsoir Philippe,

Je note ton présent conseil, ce qui suppose effectivement que je place la
fin du code de ma proc avant l' "Exit Sub" ... (Une petite ligne "commentée"
peut avoir une importance capitale ;-) ).
J'ai appris des trucs sur le GoTo que je ne m'autorisais pas à utiliser
jusque là ayant lu, je ne sais où, qu'il valait mieux en éviter l'usage pour
une question de lisibilité du code ...
Au risque d'être indélicat en risquant la comparaison, je n'ai pas été
insensible à la suggestion de MichDenis ;-)

Merci pour ton aide,

JP


"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de news:

Bonsoir Jean-Pascal,
Tu n'as pas besoin du rR2, comme ceci :

On Error GoTo rRr

ChDir "C:Documents and Settingsjean-pascalBureau"
nomFichier = Application.GetOpenFilename(typeFichier, , Titre)
'éventuellement encore d'autres choses que tu as à faire exécuter...
exit sub
rRr:
ChDir "C:Documents and Settings"

En principe, on place la gestion d'erreurs en fin de procédure et on donne
l'instruction de sortie juste avant, de manière à ce que les instructions
correspondant aux erreurs gérées ne soient exécutées que si on l'a
demandé.
--
http://www.excelabo.net/mpfe/connexion.php
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:uAO$
Finalement j'opte pour ceci, qui semble fonctionner :

'--------------------
On Error GoTo rRr

ChDir "C:Documents and Settingsjean-pascalBureau"
GoTo rRr2
rRr:
ChDir "C:Documents and Settings"
rRr2:
nomFichier = Application.GetOpenFilename(typeFichier, , Titre)
'--------------------

Ce n'est sûrement pas terrible mais je n'ai trouvé que ça ;-(

@+ ?

JP

"jps" a écrit dans le message de news:

ben, j-pascal, c'est normal que tu sortes de la proc puisque tu n'as pas
d'erreur dans le chemin de ton bureau ; tu tombes forcément dans le Exit
Sub
pour en avoir le coeur net, écris un faux chemin et tu vas bien vois the
result...
jps

"j-pascal" a écrit dans le message de news:

Bonsoir,

Il me semble que tout marchait parfaitement lorsque tu m'avais proposé
ce code la première fois, et là ??

Je viens de faire un essai chez moi avec :
'-----------------------
On Error GoTo rRr
ChDir "C:Documents and Settingsjean-pascalBureau" 'jean-pascal
ou toto au boulot ...
Exit Sub
rRr:
ChDir "C:Documents and Settings"
'-----------------------

Chez moi, mon bureau correspond bien à "C:Documents and
Settingsjean-pascalBureau"
et pourtant, si j'exécute le code, je sors !! (Exit Sub) !!!
Je ne comprends pas ;-(

@+ ?

JP

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news:
Bonsoir,
Il semble qu'il manque une sortie avant la gestion d'erreur :

ChDir "C:Documents and SettingstotoBureau"
exit sub
rRr:
ChDir "C:Documents and Settings"
--
http://www.excelabo.net/mpfe/connexion.php
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour,

Un truc que je ne comprends pas dans ce qui suit :

'------------------------
(...proc ...)

'ChDrive "C"
On Error GoTo rRr
ChDir "C:Documents and SettingstotoBureau"
rRr:
ChDir "C:Documents and Settings"
'------------------------

Dans mon test, le répertoire "C:Documents and SettingstotoBureau"
existe et pourtant je me retrouve inéxorablement sur "C:Documents
and Settings" !!
Le 'ChDrive "C" est-il indispensable ?
Les procédures événementielles peuvent-elles être responsables de ce
dysfonctionnement ?

Par ailleurs, 'On Error Resume Next ' n'aurait-il pas le même usage ?

Merci d'avance pour vos lumières,

Cordialement,

JP


















Avatar
MichDenis
| J'ai remplacé ton "Err" par "Error" ;-)

Surtout pas, Dans VBA, il y a un objet qui s'appelle Err.
par défaut, sa propriété est Number

Test ceci :

Sub test()

On Error Resume Next
Set k = Workbooks("x")
MsgBox Err
'Ou la même chose
Msgbox Err.Number

End Sub

Donc, à la sortie du If ... Else... end if

Si Err.number <> 0 ou Err <> 0 donc il y a eu une erreur

ERROR N'A RIEN À VOIR AVEC ERR



"j-pascal" a écrit dans le message de news:

Bonsoir,

Comme je viens de le dire à Daniel.C pour un autre sujet, ta réponse a
illuminé ma journée !!
La joie de trouver une solution est assurément proportionnelle aux doutes et
aux moments de solitude qu'on traverse pour arriver jusque là !
Merci ++++++++++++++++++++++++

PS : je n'ai pas pu tester jusqu'au bout, le code "If Err <> 0 Then ..."
mais je vais m'y remettre. J'ai remplacé ton "Err" par "Error" ;-)
PS : ce qui me console, c'est que la solution n'était apparemment pas si
aisée ...

JP

"MichDenis" a écrit dans le message de news:

'------------------------
(...proc ...)

'ChDrive "C"
On Error GoTo rRr
ChDir "C:Documents and SettingstotoBureau"
rRr:
ChDir "C:Documents and Settings"
'------------------------

Le fait d'écrire "On Error Goto rRr signifie seulement que
si un problème survient avec la procédure, au lien de se planter
la procédure continuera à la ligne de l'étiquette rRr.

Cependant, si aucune erreur n'est relevé, toutes les lignes de code
seront exécutées y compris la ligne en cas d'erreur. Résultat : Tu te
retrouve dans le répertoire : ChDir "C:Documents and Settings"

Pour éviter cela, il est possible de faire ceci :
'------------------------------
On Error Resume Next
If Dir("C:Documents and SettingstotoBureau", vbDirectory) <> "" Then
ChDir "C:Documents and SettingstotoBureau"
Else
ChDir "C:Documents and Settings"
End If
If Err <> 0 Then
Err = 0
MsgBox "Aucun des répertoires n'existe."
Exit Sub ' met fin à la procédure
' ou l'action que tu veux exécuter si problème
End If
'Le reste de ton code...
'------------------------------





Avatar
j-pascal
Bonjour,

J'ai testé et ... compris.

Merci pour cette précision (j'ai rarement regretté de "penser" tout haut ...
souvent au risque de dire une bêtise ... et parfois au bénéfice d'apprendre
qqch ;-) )

Merci encore pour ton aide.

Bon week-end,

JP

"MichDenis" a écrit dans le message de news:

| J'ai remplacé ton "Err" par "Error" ;-)

Surtout pas, Dans VBA, il y a un objet qui s'appelle Err.
par défaut, sa propriété est Number

Test ceci :

Sub test()

On Error Resume Next
Set k = Workbooks("x")
MsgBox Err
'Ou la même chose
Msgbox Err.Number

End Sub

Donc, à la sortie du If ... Else... end if

Si Err.number <> 0 ou Err <> 0 donc il y a eu une erreur

ERROR N'A RIEN À VOIR AVEC ERR



"j-pascal" a écrit dans le message de news:

Bonsoir,

Comme je viens de le dire à Daniel.C pour un autre sujet, ta réponse a
illuminé ma journée !!
La joie de trouver une solution est assurément proportionnelle aux doutes
et
aux moments de solitude qu'on traverse pour arriver jusque là !
Merci ++++++++++++++++++++++++

PS : je n'ai pas pu tester jusqu'au bout, le code "If Err <> 0 Then ..."
mais je vais m'y remettre. J'ai remplacé ton "Err" par "Error" ;-)
PS : ce qui me console, c'est que la solution n'était apparemment pas si
aisée ...

JP

"MichDenis" a écrit dans le message de news:

'------------------------
(...proc ...)

'ChDrive "C"
On Error GoTo rRr
ChDir "C:Documents and SettingstotoBureau"
rRr:
ChDir "C:Documents and Settings"
'------------------------

Le fait d'écrire "On Error Goto rRr signifie seulement que
si un problème survient avec la procédure, au lien de se planter
la procédure continuera à la ligne de l'étiquette rRr.

Cependant, si aucune erreur n'est relevé, toutes les lignes de code
seront exécutées y compris la ligne en cas d'erreur. Résultat : Tu te
retrouve dans le répertoire : ChDir "C:Documents and Settings"

Pour éviter cela, il est possible de faire ceci :
'------------------------------
On Error Resume Next
If Dir("C:Documents and SettingstotoBureau", vbDirectory) <> "" Then
ChDir "C:Documents and SettingstotoBureau"
Else
ChDir "C:Documents and Settings"
End If
If Err <> 0 Then
Err = 0
MsgBox "Aucun des répertoires n'existe."
Exit Sub ' met fin à la procédure
' ou l'action que tu veux exécuter si problème
End If
'Le reste de ton code...
'------------------------------









1 2