Problème avec Dir(path, expression) [Résolu]

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

Votre réponse

13 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 6 févr. 2008 à 17:25
3
Merci
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

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de PCPT
LucyUnDemi 34 Messages postés mardi 18 décembre 2007Date d'inscription 12 mai 2009 Dernière intervention - 4 févr. 2008 à 15:31
0
Merci
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.
Commenter la réponse de LucyUnDemi
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 4 févr. 2008 à 17:44
0
Merci
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)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 4 févr. 2008 à 18:43
0
Merci
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)
Commenter la réponse de cs_Jack
cs_MPi 3872 Messages postés mardi 19 mars 2002Date d'inscription 13 juillet 2018 Dernière intervention - 4 févr. 2008 à 23:54
0
Merci
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
Commenter la réponse de cs_MPi
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 5 févr. 2008 à 01:52
0
Merci
lettre:\
C:\
Commenter la réponse de PCPT
cs_MPi 3872 Messages postés mardi 19 mars 2002Date d'inscription 13 juillet 2018 Dernière intervention - 5 févr. 2008 à 02:11
0
Merci
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Commenter la réponse de cs_MPi
LucyUnDemi 34 Messages postés mardi 18 décembre 2007Date d'inscription 12 mai 2009 Dernière intervention - 5 févr. 2008 à 09:02
0
Merci
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.
Commenter la réponse de LucyUnDemi
cs_MPi 3872 Messages postés mardi 19 mars 2002Date d'inscription 13 juillet 2018 Dernière intervention - 5 févr. 2008 à 10:50
0
Merci
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
Commenter la réponse de cs_MPi
LucyUnDemi 34 Messages postés mardi 18 décembre 2007Date d'inscription 12 mai 2009 Dernière intervention - 5 févr. 2008 à 14:54
0
Merci
(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.
Commenter la réponse de LucyUnDemi
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 5 févr. 2008 à 21:36
0
Merci
... à 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
Commenter la réponse de PCPT
LucyUnDemi 34 Messages postés mardi 18 décembre 2007Date d'inscription 12 mai 2009 Dernière intervention - 6 févr. 2008 à 17:03
0
Merci
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.
Commenter la réponse de LucyUnDemi
LucyUnDemi 34 Messages postés mardi 18 décembre 2007Date d'inscription 12 mai 2009 Dernière intervention - 7 févr. 2008 à 10:20
0
Merci
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.
Commenter la réponse de LucyUnDemi

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.