OVH Cloud OVH Cloud

Récupérer chemins d'acces de l'explorateur windows

8 réponses
Avatar
jcl
Bonjour à tous
J'espère qu'une fois encore un as saura me dire ce que je ne sais pas faire
Voila mon pb :
dans ma base j'ai un formulaire qui pointe sur un autre disque dur pour y
trouver le chemin des images qui y sont stockées (ça marche sur un réseau)
J'ai donc crée une table image avec les champs
Numauto
Nom_explicatif
Chemin
Répertoire P:\Person\Commun.......
Type_image jpg tif ou bmp...

Pour approcher mes images j'utilise un bouton avec la commande shell
"'explorer P:\Person\Commun.... ", vbnormalfocus et ça me permet de noter le
chemin exact pour pointer correctement sur l'image à inclure C'est pas cool
mais ça marche
N'y aurait il pas moyen d'avoir dans une liste déroulante ou dans une table
les acces windows pour mieux automatiser cette opération. Comment importer
ces répertoires et / ou quel est le paramétrage de la liste déroulante.
Question subsidiaire (si ça marche ?) Peut on explorer tous les disques
durs du réseau ?
Personnellement je ne sais pas le faire
Merci aux contributeurs qui ne sont pas en vacances

8 réponses

Avatar
jcl
Oui, merci ça me semble convenir
Je vais tester ça demain matin et te dirais si c'est OK
Je ne suis pas un génie d'access, juste un bidouilleur, et je n'ai pas tj
confiance en mes possibilités
Bonne soirée
Merci
"3stone" a écrit dans le message de news:
em4wW#
Salut,

jcl
Voila mon pb :
dans ma base j'ai un formulaire qui pointe sur un autre disque dur pour
y


trouver le chemin des images qui y sont stockées (ça marche sur un
réseau)


J'ai donc crée une table image avec les champs
Numauto
Nom_explicatif
Chemin
Répertoire P:PersonCommun.......
Type_image jpg tif ou bmp...

Pour approcher mes images j'utilise un bouton avec la commande shell
"'explorer P:PersonCommun.... ", vbnormalfocus et ça me permet de
noter le


chemin exact pour pointer correctement sur l'image à inclure C'est pas
cool


mais ça marche
N'y aurait il pas moyen d'avoir dans une liste déroulante ou dans une
table


les acces windows pour mieux automatiser cette opération. Comment
importer


ces répertoires et / ou quel est le paramétrage de la liste déroulante.
Question subsidiaire (si ça marche ?) Peut on explorer tous les disques
durs du réseau ?



Ceci conviendrait peut être mieux...

http://access.jessy.free.fr/htm/File/FileExistDir.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------






Avatar
jcl
Bonsoir
J'ai crée une table Directory avec un seul champ Directory mais je suis
coincé et ne sais pas comment me servir du code que tu m'as donné
J'ai crée une macro avec execute Direction() (le nom du module) mais
évidemment ça ne fonctionne pas
Merci de m'éclairer un peu que je comprenne enfin comment me servir de ce
genre de module
J'ai déclaré strTable Directory, strField Directory...
Bref comme je le pensais je ne vais pas plus loin
Merci de prendre la patience de me faire progresser
A bientot


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

Oui, merci ça me semble convenir
Je vais tester ça demain matin et te dirais si c'est OK
Je ne suis pas un génie d'access, juste un bidouilleur, et je n'ai pas tj
confiance en mes possibilités
Bonne soirée
Merci
"3stone" a écrit dans le message de news:
em4wW#
Salut,

jcl
Voila mon pb :
dans ma base j'ai un formulaire qui pointe sur un autre disque dur
pour



y
trouver le chemin des images qui y sont stockées (ça marche sur un
réseau)


J'ai donc crée une table image avec les champs
Numauto
Nom_explicatif
Chemin
Répertoire P:PersonCommun.......
Type_image jpg tif ou bmp...

Pour approcher mes images j'utilise un bouton avec la commande shell
"'explorer P:PersonCommun.... ", vbnormalfocus et ça me permet de
noter le


chemin exact pour pointer correctement sur l'image à inclure C'est pas
cool


mais ça marche
N'y aurait il pas moyen d'avoir dans une liste déroulante ou dans une
table


les acces windows pour mieux automatiser cette opération. Comment
importer


ces répertoires et / ou quel est le paramétrage de la liste
déroulante.



Question subsidiaire (si ça marche ?) Peut on explorer tous les
disques



durs du réseau ?



Ceci conviendrait peut être mieux...

http://access.jessy.free.fr/htm/File/FileExistDir.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------










Avatar
3stone
Salut,

jcl
J'ai crée une table Directory avec un seul champ Directory mais je suis
coincé et ne sais pas comment me servir du code que tu m'as donné
J'ai crée une macro avec execute Direction() (le nom du module) mais
évidemment ça ne fonctionne pas
Merci de m'éclairer un peu que je comprenne enfin comment me servir de ce
genre de module



Bon... allez ;-)

Pour les tests, commence par créer une table avec 2 champs.

Nom de la table: T_Fichier
Le premier champ: IDFichier - un numéroauto, clé primaire
Le second champ: NomFichier - un champ texte de longueur 100


Ensuite, le code que je t'ai indiqué...

http://access.jessy.free.fr/htm/File/FileExistDir.htm

tu le copie dans un module standard (onglet Module)
et tu le sauve sous le nom "modFileExistDir" par exemple.
Ajoute surtout le préfixe "mod" pour éviter tout disfonctionnement.


Récupère également ce code-ci...

http://access.jessy.free.fr/htm/File/GetDirectory.htm

que tu copie dans un autre module (onglet Module)
et que tu sauve sous le nom "modGetDirectory"

Pour te faire la main, et les premiers tests... crée un petit
formulaire avec une zone de texte que tu nomme "txtRepertoire"
(propriété, onglet Autres)


Crée un premier bouton (sans l'assistant) qui te permettra de sélectionner le répertoire.

Sur clic du bouton, tu mets ceci:

Me.txtRepertoire = GetDirectory("C:")


Crée un second bouton (également sans l'assistant) qui lancera le "remplissage" de ta table.
Sur clic de ce second bouton, tu mets:

If Len(Me.txtRepertoire) > 0 Then
Call FileExistDir(Me.txtRepertoire, "T_Fichier", "NomFichier")
MsgBox "Les fichiers sont sauvés dans la table...", vbInformation, "Ok..."
Else
Beep
MsgBox "Sélectionnez un chemin...", vbCritical, "Erreur"
End If



Compile le code écrit (menu "Déboguer, Compiler...")
Sauve ton formulaire "frmSauverRepertoire" par exemple.

Si tu suis tout ce qui est dit plus haut, cela fonctionnera du premier coup!
Il te reste à faire quelques tests...
et de dire merci à Jessy pour avoir préparer le code ;-))

Ok ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------

Avatar
jcl
Merci beaucoup, car je suis dur à la comprenette
J'essaye ce matin et te tiens au courant
Bonne journée - au frais-
Merci
"3stone" a écrit dans le message de news:

Salut,

jcl
J'ai crée une table Directory avec un seul champ Directory mais je suis
coincé et ne sais pas comment me servir du code que tu m'as donné
J'ai crée une macro avec execute Direction() (le nom du module) mais
évidemment ça ne fonctionne pas
Merci de m'éclairer un peu que je comprenne enfin comment me servir de
ce


genre de module



Bon... allez ;-)

Pour les tests, commence par créer une table avec 2 champs.

Nom de la table: T_Fichier
Le premier champ: IDFichier - un numéroauto, clé primaire
Le second champ: NomFichier - un champ texte de longueur 100


Ensuite, le code que je t'ai indiqué...

http://access.jessy.free.fr/htm/File/FileExistDir.htm

tu le copie dans un module standard (onglet Module)
et tu le sauve sous le nom "modFileExistDir" par exemple.
Ajoute surtout le préfixe "mod" pour éviter tout disfonctionnement.


Récupère également ce code-ci...

http://access.jessy.free.fr/htm/File/GetDirectory.htm

que tu copie dans un autre module (onglet Module)
et que tu sauve sous le nom "modGetDirectory"

Pour te faire la main, et les premiers tests... crée un petit
formulaire avec une zone de texte que tu nomme "txtRepertoire"
(propriété, onglet Autres)


Crée un premier bouton (sans l'assistant) qui te permettra de sélectionner
le répertoire.


Sur clic du bouton, tu mets ceci:

Me.txtRepertoire = GetDirectory("C:")


Crée un second bouton (également sans l'assistant) qui lancera le
"remplissage" de ta table.

Sur clic de ce second bouton, tu mets:

If Len(Me.txtRepertoire) > 0 Then
Call FileExistDir(Me.txtRepertoire, "T_Fichier", "NomFichier")
MsgBox "Les fichiers sont sauvés dans la table...", vbInformation,
"Ok..."

Else
Beep
MsgBox "Sélectionnez un chemin...", vbCritical, "Erreur"
End If



Compile le code écrit (menu "Déboguer, Compiler...")
Sauve ton formulaire "frmSauverRepertoire" par exemple.

Si tu suis tout ce qui est dit plus haut, cela fonctionnera du premier
coup!

Il te reste à faire quelques tests...
et de dire merci à Jessy pour avoir préparer le code ;-))

Ok ?


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------









Avatar
Pascal BENOIT
Bonjour !

Bien que la réponse que tu as donné soit destinée à une question de "jcl",
j'en profite quand même pour te remercier aussi, car cela a également
répondu à un besoin que j'avais exprimé autrement dans un autre fil !

Ca marche du tonnerre, et cela met vraiment en valeur les multiples
possibilités qu'ouvrent une bonne maîtrise du code vba et d'Access.

... ca me donne vraiemnt envie de m'y mettre ! ... mais je vais quand même
finir d'acquérir le minimum de rudiments nécessaire en Acces "de base"
avant ! ... et je risque donc de revenir solliciter les "grosses pointures"
que vous êtes (Annette, toi, Arnaud, etc.) d'ici là !

Merci encore !

Cordialement,
Pascal.
Avatar
3stone
Salut,

Pascal BENOIT

... et je risque donc de revenir solliciter...





Les contributeurs de ce forum font un maximum pour aider
les personnes qui le demande... gentiment ;-)




--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------

Avatar
Pascal BENOIT
Une petite remarque sur la fonction de récupération des fichiers d'un
répertoire :
Cela marche très bien pour tous les répertoires que j'ai testés ... SAUF
DEUX : Les répertoires "racine" > C:/ et D:/
Dans ce cas, la table est remplie des noms de fichiers auxquels il manque
le PREMIER caractère !

Je suppose que le problème tourne autour de cette partie de code :

For intFile = 1 To .FoundFiles.Count
strFile = .FoundFiles(intFile)
strFile = Right(strFile, Len(strFile) - (Len(StrDir) + 1))
^^^^^^^^^^^^^^^^
CurrentDb.Execute "INSERT INTO [" & StrTable & "] " _
& "([" & StrField & "])" _
& "SELECT """ & strFile & """ ;"
Next

... en effet, la particularité des "racines" est d'avoir un "" en plus par
rapport aux sous-rep :

C:toto ... pas de "" après toto
D: ... se termine par un ""


Cette petite modif du code vient à bout du bug :

With Application.FileSearch
.LookIn = StrDir: .FileName = "*.*"
If .Execute > 0 Then
For intFile = 1 To .FoundFiles.Count
strFile = .FoundFiles(intFile)
If Len(StrDir) = 3 Then
strFile = Right(strFile, Len(strFile) - (Len(StrDir) + 0))
Else
strFile = Right(strFile, Len(strFile) - (Len(StrDir) + 1))
End If
CurrentDb.Execute "INSERT INTO [" & StrTable & "] " _
& "([" & StrField & "])" _
& "SELECT """ & strFile & """ ;"
Next
End If
End With


Cordialement,
Pascal.
Avatar
Anor
Bonjour Pascal

J'avais rencontré le même problème en mettant au point la
fonction pour la sélection multiple de fichiers par API
que je propose sur mon site :

Regarde ici :
http://memoaccess.free.fr/files.htm#GetFileAPI
ou
http://perso.wanadoo.fr/memoaccess/files.htm#GetFileAPI

Finalement, je n'y avais pas pensé, mais ça te permet de récupérer
une variable qui contient tous les noms de fichiers séparés par des ;
et de sélectionner plus précisément les chemins de fichiers à récupérer,
et ce sans référence à cocher.

Il ne te reste plus qu'à bâtir la routine qui va redécomposer la variable en
x valeurs à rajouter par une requête ajout....

--
à+
Arnaud
----------------------------------------------
Conseils d'utilisation, sites recommandés :
http://users.skynet.be/mpfa/
Access Memorandum - www.anor.fr.st
----------------------------------------------

Pascal BENOIT a élucidé :
| Une petite remarque sur la fonction de récupération des fichiers d'un
| répertoire :
| Cela marche très bien pour tous les répertoires que j'ai testés ...
| SAUF DEUX : Les répertoires "racine" > C:/ et D:/
| Dans ce cas, la table est remplie des noms de fichiers auxquels il
| manque le PREMIER caractère !
|
| Je suppose que le problème tourne autour de cette partie de code :
|
| For intFile = 1 To .FoundFiles.Count
| strFile = .FoundFiles(intFile)
| strFile = Right(strFile, Len(strFile) - (Len(StrDir) + 1))
| ^^^^^^^^^^^^^^^^
| CurrentDb.Execute "INSERT INTO [" & StrTable & "] " _
| & "([" & StrField & "])" _
| & "SELECT """ & strFile & """ ;"
| Next
|
| ... en effet, la particularité des "racines" est d'avoir un "" en
| plus par rapport aux sous-rep :
|
| C:toto ... pas de "" après toto
| D: ... se termine par un ""
|
|
| Cette petite modif du code vient à bout du bug :
|
| With Application.FileSearch
| .LookIn = StrDir: .FileName = "*.*"
| If .Execute > 0 Then
| For intFile = 1 To .FoundFiles.Count
| strFile = .FoundFiles(intFile)
| If Len(StrDir) = 3 Then
| strFile = Right(strFile, Len(strFile) - (Len(StrDir)
| + 0)) Else
| strFile = Right(strFile, Len(strFile) - (Len(StrDir)
| + 1)) End If
| CurrentDb.Execute "INSERT INTO [" & StrTable & "] " _
| & "([" & StrField & "])" _
| & "SELECT """ & strFile & """ ;"
| Next
| End If
| End With
|
|
| Cordialement,
| Pascal.