Vba excel : chdir [Résolu]

cs_emlyd2207 12 Messages postés mercredi 21 décembre 2005Date d'inscription 24 novembre 2011 Dernière intervention - 29 déc. 2005 à 16:36 - Dernière réponse : ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention
- 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
Afficher la suite 

6 réponses

Meilleure réponse
cs_69chris 318 Messages postés jeudi 30 janvier 2003Date d'inscription 30 décembre 2005 Dernière intervention - 29 déc. 2005 à 16:39
3
Merci
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.

Merci cs_69chris 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

cs_chapata 215 Messages postés mercredi 2 février 2005Date d'inscription 9 avril 2010 Dernière intervention - 29 déc. 2005 à 17:10
0
Merci
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
cs_emlyd2207 12 Messages postés mercredi 21 décembre 2005Date d'inscription 24 novembre 2011 Dernière intervention - 29 déc. 2005 à 17:25
0
Merci
merci à chris et à chapata, ça marche maintenant très bien.
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 29 déc. 2005 à 17:29
0
Merci
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". )
cs_emlyd2207 12 Messages postés mercredi 21 décembre 2005Date d'inscription 24 novembre 2011 Dernière intervention - 29 déc. 2005 à 17:36
0
Merci
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
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 29 déc. 2005 à 17:40
0
Merci
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". )

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.