Problème avec Dir(path, expression)

Résolu
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009 - 4 févr. 2008 à 15:30
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009 - 7 févr. 2008 à 10:20
La vie est trop courte pour la passer a haïre.

13 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 févr. 2008 à 17:25
suffit simplement d'attendre (sleep/doevents) jusqu'à ce que la lettre soit reconnue (avec l'API GetLogicalDriveStrings par exemple)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
4 févr. 2008 à 15:31
Bonjour a tous !

Comme vous l'aurez compris en lisant le titre j'ai un problème avec la fonction Dir !
Voici comment je l'utilise :
Dim dossier As String
dossier = Dir(lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*", vbDirectory)

Donc voici le problème :
Cette fonction ne fonctionne que quand je suis en mode pas à pas, car quand je l'utilise en mode rapide il me dis que la variable dossier est vide ( dossier = "" )

Voici le code comple de la methode :
Dim rep As String
'obtient le premier fichier ou répertoire
dossier = Dir(lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*", vbDirectory)
fichier = Dir(lettre & ":\Année 2007\OFFRES" & dossier & "", vbHidden)
'boucle tant que le répertoire n'a pas été entièrement parcouru
Do While (fichier <> "")
    'teste si c'est un fichier ou un répertoire
    If (GetAttr(lettre & ":\Année 2007\OFFRES" & dossier & "" & fichier) And vbDirectory) <> vbDirectory Then
        TableNom(i) = fichier
        TableDate(i) = DateDiff("n", FileDateTime(lettre & ":\Année 2007\OFFRES" & dossier & "" & fichier), DateTime.Now)
        TableChemin(i) = lettre & ":\Année 2007\OFFRES" & dossier & "" & fichier
    End If
    'passe à l'élément suivant
    fichier = Dir
    i = i + 1
Loop
Dim FichierRecent As String
FichierRecent = FichierExcel 'trie les fichier pour ne garder au final que le fichiers .xls le plus recent
chemin = "Z:\Année 2007\OFFRES" & dossier & "" & FichierRecent
Debug.Print chemin

J'éspére avoir été assez claire dans l'énonce de mon problème.
Merci beaucoup pour votre precieuse aide.
Je vous contacte dès qu'il y a du nouveau.
__________________________________
La vie est trop courte pour la passer a haïre.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 févr. 2008 à 17:44
Salut
La commande DIR se réinitialise si tu t'en ressert plusieurs fois
Voir <cette source>

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 févr. 2008 à 18:43
Excuses, j'ai répondu un peu vite (quand on fait plusieurs choses en même temps ...)
Quand il te dit que Dossier est vide, que vaut
    lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*"
que tu lui as fourni ?
Quand il génère le défaut, clique sur Debug
Tape Ctrl-G pour faire apparaitre la fenêtre de debug et tape la commande :
   ? lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*"
(le ? = Print vers la fenêtre)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
4 févr. 2008 à 23:54
Pourquoi le : ?

Je ne pense pas que tu puisses nommer un répertoire ou un fichier avec un :

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 févr. 2008 à 01:52
lettre:\
C:\
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 févr. 2008 à 02:11
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
5 févr. 2008 à 09:02
Bonjour a tous !

En faite ma variable 'lettre' contient, la lettre d'un lecteur reseau monté précédement !
C'est justement le montage de ce lecteur reseau qui pose problème.
Quant je monte le lecteur reseau juste avant l'execution de ce précédent code ca ne fonctinne pas ; mais si je monte (et démonte) le lecteur reseau a l'ouverture (et a la fermeture) du programme ca fonctionne !
Mais je préférerais que le lecteur reseau soit monte et demonte avant et apres l'execution de ce code

Merci pour vos reponses je continue a chercher une amélioration de mon coté.
___________________________________
La vie est trop courte pour la passer a haïre.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 févr. 2008 à 10:50
Bon, je vais essayer de ne pas dire de bêtises cette fois-ci...

Je ne comprends pas pourquoi ça fonctionne en mode pas-à-pas (?), par contre...
Tu écris ceci

dossier = Dir(lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*", vbDirectory)
Donc, disons = X:\Année 2007\OFFRES\XYZ*

Puis tu ajoutes ceci,
fichier = Dir(lettre & ":\Année 2007\OFFRES" & dossier & "", vbHidden)
Donc, = X:\Année 2007\OFFRES\X:\Année 2007\OFFRES\XYZ\

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
5 févr. 2008 à 14:54
(Re) Bonjour a tous !
Merci pour les reponses et précisions

En faite MPi²
dossier = Dir(lettre & ":\Année 2007\OFFRES" & Form1.txt_AchReal.Text & "*", vbDirectory)disont que : lettre "X" et Form1.txt_AchReal.Text "Dus"
ça me donne comme resultat : dossier = "Dus Jean-Claude"
Ensuite
fichier = Dir(lettre & ":\Année 2007\OFFRES" & dossier & "", vbHidden)
me donne : fichier = "Scénes de JC Dus Les Bronzés 3.doc"
donc fichier est le resultat de la recherche d'un fichier (meme cache) dans le dossier 'dossier'
Donc logiquement j'ai pensé comme toi MPi² mais je me suis rendus compte que Dir("X:\Doc\Dus*", vbDirectory) renvoyais que le resultat de "Dus*", de meme pour le fichier.
________________________________________
La vie est trop courte pour la passer a haïre.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 févr. 2008 à 21:36
... à mon avis çà ne fonctionne pas parce que le code est executé alors que le lecteur n'est pas encore monté

pour info on peut atteindre une lettre réseau sans "lecteur réseau monté"
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
6 févr. 2008 à 17:03
Et Op encore un message dans le vent ; je le refais :

Bonjour

Et bien ... En faite Je pense que quand j'éxécute en pas a pas ou monte le lecteur reseau au lancement de la forme ; le lecteur reseau a bien le temps d'être assimile par le programme. Mais si je le monte juste avant l'execution de mon programme il n'as pas le temps d'être assimilé par le systeme et donc ça plante.
Ca me parais louche mais les faits sont la ; je me suis donc resolut a Monter et Démonter le lecteur reseau au lancement et a l'arret du programme.

Merci pour l'aide et a une prochaine.
______________________________________
La vie est trop courte pour la passer a haïre.
0
LucyUnDemi Messages postés 34 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009
7 févr. 2008 à 10:20
Bonjour à tous et Merci

Merci a PCPT !
Ton idée fonctionne bien, j'ai donc appliqué la technique du 'Sleep' apres avoir monté mon lecteur réseau ainsi donc il a bien le temps d'être assymillé (<= Y a une faute là non ?) et quand le programme repart tout fonctionne.

Pour ceux que ça interresse, voici le lien ou j'ai trouve comment utiliser cette technique :
http://www.vbfrance.com/codes/TUTO-TECHNIQUE-ATTENDRE_21180.aspx
Donc merci a Jack aussi !
______________________________________
La vie est trop courte pour la passer a haïre.
0
Rejoignez-nous