IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA : récupérer un chemin de fichier fluctuant [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Septembre 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 37
    Par défaut VBA : récupérer un chemin de fichier fluctuant
    Bonjour,
    J'ai cherché et essayé plusieurs solutions mais n'ai rien trouvé qui soit opérationnel : j'ai besoin de récupérer des chemins d'accès & noms de fichiers qui peuvent être fluctuants car manipulés par plusieurs personnes. Concrètement pour un mailing je dois récupérer les chemins des différents disponibles de la semaine suivante.
    1/ Répertoire parent identique à celui du classeur où se trouve la macro récupéré avec le workbook.path
    2/ sous dossier défini par exemple "GAMME"
    3/ sous-dossier contenant le n° de la semaine mais pouvant être appelé Semaine 41 ou semaine 41 ou sem 41 avec ou non des caractères derrière
    4/ nom du fichier contenant le n° de sem et le nom du tarif défini dans mon classeur ou dans la macro (par exemple NET)

    J'ai testé avec "*", "*[a-z]*", rien n'a fonctionné. Je précise qu'à chaque fois il n'y a qu'un sous-dossier ou nom de fichier remplissant les critères. J'avais réussi à inclure un nom de feuille partiel dans une formule une fois et il me trouve toujours le nom de la feuille en entier donc je me dis que ça doit être possible...

    Dernier code testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dossier = ThisWorkbook.Path
    Set fich_gamme_net = Workbooks.Open(dossier & "\GAMME\" & "*[a-z]*" & nosem & "\" & "*[a-z]*" & nosem & "*NET*" & ".xls")
    Génère un message d'erreur disant qu'il est impossible d'ouvrir le fichier avec les *[a-z]* apparaissant tels quels dans le nom du fichier

    Code avec nom de feuille partiel qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell.Offset(0, -14).FormulaR1C1 = "=VLOOKUP(R[0]C[6],'export*'!R1C1:R9500C4,2,FALSE)"
    export étant suivi de la date de l'export et donc variable
    dans la formule de ma cellule j'ai bien le nom de la feuille en entier.

    J'espère avoir été suffisamment claire, c'est pas simple à expliquer.

    Merci d'avance pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Le simple semble de procéder par étape, en utilisant la fonction Dir().
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DPath = ThisWorkbook.Path
    FPath = Dir(DPath & "\*em*" & NumSem & "*", vbDirectory)
    If FPath <> "" Then
        FName = Dir(DPath & "\" & FPath & "\*" & NumSem & "*" & Tarif & "*")
        If FName <> "" Then
            MsgBox "Vous pouvez ouvrir le fichier : " & DPath & "\" & FPath & "\" & FName
        End If
    End If

  3. #3
    Membre averti
    Femme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Septembre 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 37
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Bonjour,

    Le simple semble de procéder par étape, en utilisant la fonction Dir().
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DPath = ThisWorkbook.Path
    FPath = Dir(DPath & "\*em*" & NumSem & "*", vbDirectory)
    If FPath <> "" Then
        FName = Dir(DPath & "\" & FPath & "\*" & NumSem & "*" & Tarif & "*")
        If FName <> "" Then
            MsgBox "Vous pouvez ouvrir le fichier : " & DPath & "\" & FPath & "\" & FName
        End If
    End If
    Bonjour,
    Merci pour la réponse rapide
    Il manque le niveau 2, j'ai essayé d'adapter ainsi mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DPath = ThisWorkbook.Path
    DPath = ThisWorkbook.Path
    FPath = Dir(DPath & "\GAMME\*" & nosem & "*", vbDirectory)
    If FPath <> "" Then
        Fname = Dir(DPath & "\" & FPath & "\*" & nosem & "*" & "NET" & "*")
        'If FName <> "" Then
            MsgBox "Vous pouvez ouvrir le fichier : " & DPath & "\" & FPath & "\" & Fname
        'End If
    End If
    Il manque le sous dossier GAMME et le nom de fichier dans ce qui ressort dans la msgbox

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Ah oui, j'ai oublié le point 2...

    Vous pouvez essayer le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DPath = ThisWorkbook.Path
    FPath = Dir(DPath & "\GAMME\*" & nosem & "*", vbDirectory)
    If FPath <> "" Then
        Fname = Dir(DPath & "\GAMME\" & FPath & "\*" & nosem & "*NET*")
        If FName <> "" Then
            MsgBox "Vous pouvez ouvrir le fichier : " & DPath & "\GAMME\" & FPath & "\" & Fname
        Else
            MsgBox "Il n'a pas été possible de trouver le fichier associé à la semaine " & nosem & " !", vbCritical
        End If
    Else
        MsgBox "Il n'a pas été possible de trouver le dossier associé à la semaine " & nosem & " !", vbCritical
    End If
    Attention cependant : la méthode ci-dessus caractérise très peu les noms de dossiers1 et de fichiers. Elle est donc peu robuste.
    Si le nom de fichier obtenu n'est pas celui souhaité, il est possible d'améliorer le tout en scannant tous les fichiers/sous-dossiers d'un dossier et en cherchant un schéma orthographique donné par l'utilisation, soit de 'opérateur Like, soit d'expressions régulières (plus puissant mais nécessite l'ajout d'une référence).

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    visiblement ton fichier a nom fluctuant se trouve dans un sous dossier (avec un nom fluctuant aussi) du dossier"GAME" qui lui même est enfant de thisworbook.path

    étant donné que seul le chemin et seul un, partie du sous dossier est connu et seul 1 ou 2 morceaux du nom du fichier recherché est connu

    il va te falloir parcourir dossier et sous dossier jusqu'au fichier en partant de la racine connu soit thisworkbook.path & "\game\"
    on peut déjà parler de fonction récursive avec dir tu a des exemples dans les contributions

    a chaque sous dossier on le parcourt
    je te ferais un exemple demain quand tu aura un peu cherché
    des exemples il y en a à foison
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Femme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Septembre 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Septembre 2016
    Messages : 37
    Par défaut
    Merci pour vos réponses.

    J'ai simplifié la macro en ajoutant une formule dans une feuille Excel existante pour fusionner les étapes 1 & 2, et ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    dossier = Sheets("Données").Range("D7").Value
    tarif = NET
    dossier_sem = Dir(dossier & "*" & numsem & "*", vbDirectory)
    If dossier_sem <> "" Then
        PJ = Dir(dossier & dossier_sem & "\*" & numsem & "*" & tarif & "*")
        If PJ <> "" Then
            MsgBox "Vous pouvez ouvrir le fichier : " & dossier & dossier_sem & "\" & PJ
        Else
            MsgBox "Il n'a pas été possible de trouver le fichier associé à la semaine " & numsem & " !", vbCritical
        End If
    Else
        MsgBox "Il n'a pas été possible de trouver le dossier associé à la semaine " & numsem & " !", vbCritical
    End If

    Le but est de remplir ce tableau qui référence les pièces à joindre :
    Dispo 1 Dispo 2 Dispo 3
    Tarif 1 ou 1bis
    Tarif 2
    Tarif 3
    En fait j'aimerais faire varier les variables dossier et tarif pour remplir mes 9 cases sans avoir à répéter tout le code à chaque fois, ce qui fonctionnerait mais est assez fastidieux et difficile à entretenir.
    Est-ce là que les fonctions récursives vont pouvoir m'être utiles? J'avoue être restée sur des fonctions basiques jusque là. Je vais chercher et reviens vers vous si je rame trop, ce qui sera sûrement le cas

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/09/2017, 10h02
  2. Récupérer le chemin du fichier dans un input file
    Par michel81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/12/2008, 11h29
  3. Réponses: 4
    Dernier message: 06/03/2008, 17h10
  4. Récupérer le chemin du fichier d'une bdd
    Par [DreaMs] dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/04/2006, 16h58
  5. Réponses: 10
    Dernier message: 24/10/2005, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo