Vba excel : chdir

Résolu
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011 - 29 déc. 2005 à 16:36
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 29 déc. 2005 à 17:40
je voudrais créer 2 boites de dialogues demandant de saisir l'année et l'autre, le mois, et reprendre ces 2 informations pour ouvrir automatiquement un fichier dans la directory de l'année et du mois concerné.
Ex : on saisit "2005" et "12" et la macro va ouvrir dans les directories : .../2005/12.

Ci-dessous mon code (attention, je suis débutant !!!). La création des boites de dialogues marche mais c'est le chemin d'ouverture qui ne marche pas. Quelqu'un peut m'aider ? Merci d'avance.

Sub ImportStocks()
'
' ImportStocks Macro
' Importation et mise en forme d'un fichier txt des stocks de JDE


Dim VANNEE As String
'variable correspondant à l'année qui est saisie ds la boite de dialogue
Dim VMOIS As String
'variable correspondant au mois qui est saisi ds la boite de dialogue


VANNEE = InputBox(prompt:="Saisir l'année concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS")
'boite de dialogue pour l'année
VMOIS = InputBox(prompt:="Saisir le mois concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS")
'boite de dialogue pour le mois


ChDir "U:\Compta\Renoux\CptaIndus\VANNEE\VMOIS"


Workbooks.OpenText FileName:= _
"U:\Compta\Renoux\CptaIndus\VANNEE\VMOIS\stocks.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(28 _
, 1), Array(35, 1), Array(39, 1), Array(46, 1), Array(52, 1), Array(79, 1), Array(90, 1), _
Array(120, 1), Array(140, 1), Array(143, 1), Array(160, 1))

End Sub

6 réponses

cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
29 déc. 2005 à 16:39
Salut,

Et bien rien de bien grave.
Dans cette chaine : "U:\Compta\Renoux\CptaIndus\VANNEE\VMOIS\stocks.txt", VANNEE et VMOIS sont des chaines de caractères et ne désigne en aucun cas les variables. Il faut donc définir le chemin comme :
"U:\Compta\Renoux\CptaIndus" & VANNEE & "" & VMOIS & "\stocks.txt"

Chris

N'oubliez pas de cloturer votre post.
3
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 4
29 déc. 2005 à 17:10
Hi,

69Chris à raison, toutes tes variables VBA ne sont pas des chaines de caractères ...
Il faut absolument les différenciés dans une chaine par

Ceci est ma chaine de caractère avec " & MaVariable & " sinon elle ne sera pas traitée en tant que variable.

Bon courage ...

ChaPaTa
0
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
29 déc. 2005 à 17:25
merci à chris et à chapata, ça marche maintenant très bien.
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
29 déc. 2005 à 17:29
Note que les commentaires, généralement, se mettent plutôt sur les lignes de codes que dessous même si, je te l'accorde, pour la lecture (surtout pour les débutants) c'est plus facile. Enfin, tu verras bien avec l'expérience (quand la nature de tes commentaires changera...) !
De plus, j'ai remarqué que tu n'employais pas d'indentations !!! Tes progs seront vite foutraques si tu ne prends pas rapidement cette habitude d'indenter ton code (pour info, "indenter" signifie "mettre des espaces devant ton code pour indiquer sa profondeur..."...).

Sinon, pour ton problème, en effet, ce n'est rien de grave. Je te conseille cependant de créer une variable spécialement pour stocker le chemin d'accès.

Dim varChemin As String
...
varChemin =
"U:\Compta\Renoux\CptaIndus" & VANNEE & "" & VMOIS & "\stocks.txt"

Mais je te conseillerais également de tester les données entrées afin d'éviter au maximum les erreurs (car ta technique est bien trop directe!!!) et, dans la foulée, mettre en place une gestion des erreurs...
C'est d'ailleurs ce qui est chiant avec les macros qui jouent avec les fichiers... c'est qu'il faut être très prudent...

Voici donc comment je ferais ton code :

'ImportStocks Macro
'Importation et mise en forme d'un fichier txt des stocks de JDE

Sub ImportStocks()

'Déclaration des variables locales :
'Variable correspondant à l'année qui est saisie ds la boite de dialogue
Dim varAnnee As String
'Variable correspondant au mois qui est saisi ds la boite de dialogue
Dim varMois As String
'Variable stockant temporairement le chemin d'accès du fichier
Dim varChemin As String
'Variable du texte du message d'erreur
Dim varMsgErreur As String

'Activation du gestionnaire d'erreur
On Error Goto GestionErreurs

'Boite de dialogue pour saisir l'année
varAnnee = InputBox(prompt:= "Saisir l'année concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS : ANNÉE")

'Boite de dialogue pour saisir le mois
varMois = InputBox(prompt:="Saisir le mois concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS : MOIS")

varChemin = "U:\Compta\Renoux\CptaIndus" & VANNEE & "" & VMOIS & ""
ChDir varChemin
Workbooks.OpenText FileName:= _
varChemin & "stocks.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(28 _
, 1), Array(35, 1), Array(39, 1), Array(46, 1), Array(52, 1), Array(79, 1), Array(90, 1), _
Array(120, 1), Array(140, 1), Array(143, 1), Array(160, 1))

'Désactivation du gestionnaire d'erreurs
On Error Goto 0

Exit Sub
GestionErreurs:
'Gestionnaire d'erreurs
varMsgErreur = "L'erreur N°" & err.Number & " est survenue." & vbNewLine
varMsgErreur = varMsgErreur & "Description de l'erreur :
" & vbNewLine
varMsgErreur = varMsgErreur & err.Description & vbNewLine & vbNewLine
varMsgErreur = varMsgErreur & "Veuillez verrifier les données entrées " & vbNewLine
varMsgErreur = varMsgErreur & "et recommancer." & vbNewLine
'varMsgErreur = varMsgErreur & "" & vbNewLine
MsgBox(varMsgErreur, vbOKOnly & vbCritical, "Erreur")
End Sub

Code à tester par tes soins!

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0

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

Posez votre question
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
29 déc. 2005 à 17:36
merci ScSami, je n'en demandais pas tant mais je prends toutes ces recommandations avec beaucoup d'intérêt. Je viens de finir ma formation vba débutant il y a à peine une semaine et je sens que je vais progressé très rapidement avec les membres de ce site. C'est très enthousiasmant de voir la réactivité et la convivialité des intervenants.
A bientôt très certainement
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
29 déc. 2005 à 17:40
Heu... Oui, j'oubliais...

'Boite de dialogue pour saisir l'année
varAnnee = InputBox(prompt:="Saisir l'année concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS : ANNÉE")
'Si le texte ne comporte pas exactement 4 caractères,
'Ou si l'expression n'est pas numérique,
'On génère une erreur personnalisée.
If Len(varAnnee) <> 4 Or IsNumeric(varAnnee) = False Then Err.Raise vbObjectError + 513, "MyProj.MyObject", "Le format entrée de l'année est invalide."
If Then

'Boite de dialogue pour saisir le mois
varMois = InputBox(prompt:="Saisir le mois concernant l'importation des stocks", Title:="IMPORTATION DES STOCKS : MOIS")
'Idem mais pour 2 caractères seulement!
If Len(varAnnee) <> 2 Or IsNumeric(varAnnee) = False Then Err.Raise vbObjectError + 513, "MyProj.MyObject", "Le format entrée du mois est invalide."


Mais à tester quand même (parce que fait de tête)!

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Rejoignez-nous