Chemin de dossiers et fichiers en VBA

steph34

XLDnaute Junior
Bonjour au forum

J’essaie d'adapter un code de BOISGONTIER (merci à lui:D) trouvé sur le forum.
Celui ci permets de créer un liste de validation dont la source se trouve dans un classeur fermé.
Dans son exemple les deux fichiers portent la même ext. (xls) et se trouve dans le même dossier.

Pour ma part un fichier xslm et l'autre xslx et se trouvent dans deux dossiers distincts.
J'ai bidouiller le code mais j'arrive pas.:(

Un coup de main serai bienvenue

Je vous joint le fichier classé tel que je le souhaiterai et avec les modifs d'extension (qui ne fonctionne pas).

Merci de votre aide
 

Pièces jointes

  • 01_Gestion.zip
    24.4 KB · Affichages: 48
  • 01_Gestion.zip
    24.4 KB · Affichages: 44
  • 01_Gestion.zip
    24.4 KB · Affichages: 42

Gdal

XLDnaute Nouveau
Re : Chemin de dossiers et fichiers en VBA

Bonjour,

En faite il faut juste remonter d'un niveau dans l'arborescence et ensuite ajouter le dossier 02.

Le code, trouver sur ce forum ici, de Pierrot93 pour remonter d'un niveau
Code:
Dim c As String
c = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\")- 1)

Et maintenant le fichier modifié. Par contre je n'ai pas testé car j'ai un soucis avec le pilote ...
Regarde la pièce jointe 01_Gestion.zip

Gdal
 

Pièces jointes

  • 01_Gestion.zip
    27.4 KB · Affichages: 37
  • 01_Gestion.zip
    27.4 KB · Affichages: 28

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Bsr Gdal

merci de ton envoi mais ca ne fonctionne pas
erreur généré:


Capture2.jpg

merci de ton intérêt.
 

Pièces jointes

  • Capture2.jpg
    Capture2.jpg
    59.3 KB · Affichages: 107
  • Capture2.jpg
    Capture2.jpg
    59.3 KB · Affichages: 107
Dernière édition:

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Re

merci de ton fichier et de ton intérêt.

Il mets bien à jour la liste mais toujours une erreur à l'ouverture


encore merci

Edit: pardon super il fonctionne très bien c'est moi qui suis une âne:eek: un grand merci
 
Dernière édition:

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Re

Donc je deviens fada:confused:

je n'arrive pas à faire fonctionner le code. j'ai cette erreur

Capture5.PNG


Capture6.jpg

me sélectionne en bleu: Dim rs As ADODB.Recordset

Et j'arrive pas à comprendre la nature de l'erreur
merci encore de la patience
 

Pièces jointes

  • Capture6.jpg
    Capture6.jpg
    27.3 KB · Affichages: 94
  • Capture6.jpg
    Capture6.jpg
    27.3 KB · Affichages: 90
  • Capture5.PNG
    Capture5.PNG
    29.7 KB · Affichages: 86
  • Capture5.PNG
    Capture5.PNG
    29.7 KB · Affichages: 88
Dernière édition:

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Re Gdal

Pfoufff... quel travail. Chapeau.
J'ai une erreur au remplissage (mais c'est normal Le non de la base n'est pas le même)
Capture8.PNG

mais ton fichier (V2) fonctionnait bien.
Je suis arrivée avec ce précédent fichier (V2) à le modifier en fonction de mes paramètres.
Mais j'ai une erreur (copie écran 3 mess. plus haut)
J'aimerai que tu m'explique cette erreur pour que je puisse comprendre ou j'ai faut.

merci encore
 

Pièces jointes

  • Capture8.PNG
    Capture8.PNG
    36.1 KB · Affichages: 93

Gdal

XLDnaute Nouveau
Re : Chemin de dossiers et fichiers en VBA

Bonjour,

Mais j'ai une erreur (copie écran 3 mess. plus haut)
J'aimerai que tu m'explique cette erreur pour que je puisse comprendre ou j'ai faut.

merci encore
Je ne sais pas trop....
Mais ce que tu peux faire, c'est tester le code pas à pas. Pour cela il faut mettre des points d'arrêts aux emplacements ou tu souhaites que ton code se mette en pause.
C'est très simple
- Clique dans la marge, Cf. flèche jaune, au niveau de la ligne, un point rouge doit apparaître.
(On ne peut pas mettre de point d'arrêt sur une ligne déclarant une variable Dim ....)
211764-chemin-de-dossiers-et-fichiers-en-vba-capture6.jpg
- Ensuite utilise ton fichier afin de déclencher le code, lorsque le code sera exécuté en arrivant sur ton point d'arrêt, la fenêtre vba s'ouvrira, le code sera en pause
- A ce moment, tu peux voir les valeurs que les variables prennent. Clique droite sur une variable, Ajouter un espion, entrée. (Afficher la fenêtre Espion, Menu Affichage/Fenêtre espion
- Pour le code poursuive d'une ligne, touche F8
- Pour que le code reprenne normalement, touche F5

Sinon, poste le fichier qui pose problème, je jetterais un oeil.

Gdal
 

Patrice310

XLDnaute Nouveau

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Bonjour Gdal, Patrice

Gdal: Bon, j'arrive pas, je bidouille depuis tout à l'heure mais j'avance pas. Je te joint le fichier pour appréciation.
ce que je comprend pas c'est que ton fichier (V2) fonctionne tel quel sans problème. Je transpose sur le mien et là non.:confused:. Il bug sur la première ligne. J'ai mis le point d'arrêt (rouge) comme tu m'a expliqué mais c'est la première ligne et le code s’arrête là.

Patrice: merci de ton lien. Mais j'avoue que je m'y perds.

Merci encore de votre intérêt.
 

Pièces jointes

  • ESSAI.zip
    59.8 KB · Affichages: 36
  • ESSAI.zip
    59.8 KB · Affichages: 29
  • ESSAI.zip
    59.8 KB · Affichages: 32

Gdal

XLDnaute Nouveau
Re : Chemin de dossiers et fichiers en VBA

Re,

Bonjour Gdal, Patrice

Gdal: Bon, j'arrive pas, je bidouille depuis tout à l'heure mais j'avance pas. Je te joint le fichier pour appréciation.
ce que je comprend pas c'est que ton fichier (V2) fonctionne tel quel sans problème. Je transpose sur le mien et là non.. Il bug sur la première ligne. J'ai mis le point d'arrêt (rouge) comme tu m'a expliqué mais c'est la première ligne et le code s’arrête là.

Patrice: merci de ton lien. Mais j'avoue que je m'y perds.

Merci encore de votre intérêt.

J'ai cherché un peu... En faite pour trouver l'erreur j'ai mis une bonne partie du code en commentaire, avec l'apostrophe en début de ligne. Ensuite je l'es ai retirés progressivement jusqu'à tomber sur la ligne:
Code:
Set rs = cnn.Execute("SELECT noms FROM BD_Materiels where noms<>''")

Deux problèmes:
1_ Dans ton fichier Matériels_TP_LVM, tu as modifié le nom de la colonne... Tu comprends le problème maintenant? Ta requête est fausse:
"SELECT noms FROM BD_Materiels where noms<>''"

2_ Le nom de la colonne aurait certainement posé un problème:
Véhicule/Type
Lorsque des noms doivent sertir dans du code, il y a certaines règles:
- Pas d'accents
- Pas de caractères spéciaux. Ex.: :/!
- Pas d'espaces

Sinon, tu seras obligés de prévoir. Ta requête devient:
Code:
Set rs = cnn.Execute("SELECT [Véhicule/Type] FROM BD_Materiels where [Véhicule/Type]<>''")

Maintenant, je pense que tu vas utiliser régulièrement ce type de code dans ton fichier? Pour éviter les erreurs, sur des codes répétitifs, le mieux est de créer un fonction.
Code:
Function fctChargerLst(sNomDossier As String, sNomFichierAvcExt As String, sNomBase As String, sNomEnteteCol As String) As ADODB.Recordset

    ' Gestion des erreurs
    On Error GoTo fctChargerLst_Error
    
    ' Récupérer le répertoire courant
    Dim sRepertoire As String
    sRepertoire = Mid(ThisWorkbook.Path, 1, InStrRev(ThisWorkbook.Path, "\") - 1)
   
    ' Chemin complet Répertoire + Fichier + Extension
    Dim sCheminComplet As String
    sCheminComplet = sRepertoire & "\" & sNomDossier & "\" & sNomFichierAvcExt

    ' Connexion au fichier
    Dim rs As ADODB.Recordset
    Set cnn = New ADODB.Connection
    cnn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & sCheminComplet & ";"
    
    ' Requête sur la table
    Set rs = cnn.Execute("SELECT [" & sNomEnteteCol & "] FROM " & sNomBase & " where [" & sNomEnteteCol & "]<>''")
    
    ' Affecter les enregistrements à la fonction
    Set fctChargerLst = rs

    On Error GoTo 0
    Exit Function

fctChargerLst_Error:

    MsgBox "Erreur " & Err.Number & " (" & Err.Description & ") dans la procédure fctChargerLst du document VBA Feuil2"
End Function

Ensuite pour l'utiliser, il suffit de l'appeler et de lui transmettre les informations nécessaires:
Code:
'-----------< 1ère méthode >--------------
'    Dim rs As ADODB.Recordset
'    Set rs = fctChargerLst("02_LVM", "Matériels_TP_LVM.xlsx", "BD_Materiels", "Véhicule/Type")
    
'    Sheets("Listes_Auto").[C2:C99].ClearContents
'    Sheets("Listes_Auto").[C2].CopyFromRecordset rs
'-----------------------------------------

'-----------< 2sde méthode >--------------
    Sheets("Listes_Auto").[C2:C99].ClearContents
    Sheets("Listes_Auto").[C2].CopyFromRecordset fctChargerLst("02_LVM", "Matériels_TP_LVM.xlsx", "BD_Materiels", "Véhicule/Type")
'-----------------------------------------

Bon je m'arrête et je te donne ton fichier modifié:
Regarde la pièce jointe ESSAI_V1.zip

Gdal
 

Pièces jointes

  • ESSAI_V1.zip
    58.3 KB · Affichages: 51
  • ESSAI_V1.zip
    58.3 KB · Affichages: 50

steph34

XLDnaute Junior
Re : Chemin de dossiers et fichiers en VBA

Re Gdal

Merci de toutes ces explications et surtout de ton fichier qui fonctionne parfaitement (merci pour ce travail).
je vais donc m'appliquer à comprendre comment cela marche, car tu l'as bien compris il me faut m'en servir pour les autres listes.

Maitrisant très mal le VBA effectivement j'avais pris ce "noms" pour un élément du code et pas le "nom" de la colonne.

Pour voir le changement sur l'ancien fichier j'ai donc modifié "Véhicules/Type" par "noms" et ben figure toi que j'ai la même erreur.:confused:
Est ce que chez toi c'est pareil. Juste pour comprendre si il n'y avait que cela qui clochait.

En tout cas vraiment merci pour le temps que tu as consacré à mon problème.

Bonne fin de WE
 

Discussions similaires

Réponses
9
Affichages
289

Statistiques des forums

Discussions
312 209
Messages
2 086 267
Membres
103 168
dernier inscrit
isidore33