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 :

Objet Scripting.FileSystemObject pour recuperer le nom du folder


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut Objet Scripting.FileSystemObject pour recuperer le nom du folder
    Rebonjour, Je cherche a selectionner, aller dans le sous dossier le plus recent, c'est a dire finalement le dernier. Dans ma feuille le range nommé "Link_Folder" est un lien vers ce folder , puis dans ce folder , j'ai des folder yyyymmdd qui contiennent des workbooks. Mon idee est donc d'y aller de selectionner le nombre( ca c'est bon) et puis le le nom pour ensuite y aller (ca je saurais y aller) mais la mon code me sort une erreur aparement le nom c'est pas possible ..



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test1234()
        'lien fixe
        Dim NbF As Integer
        Dim Nom As String
        Dim Folder As Folder
        Dim folderPath As New Scripting.FileSystemObject
        NbF = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders.Count
        Nom = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders(NbF).Name
     
     
    End Sub
    Allez le RC LEns

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,


    Citation Envoyé par tamtam64 Voir le message
    ....mais la mon code me sort une erreur ...
    cela aurais été bien de lire le message d'erreur !



    ensuite pense aussi que les index d'une collection commencent à 0 ..

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test1234()
        'lien fixe
        Dim NbF As Integer
        Dim Nom As String
        Dim Folder As Variant
        Dim folderPath As New Scripting.FileSystemObject
        NbF = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders.Count
       Set Folder = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders
    Next Folder
    End Sub
    erreur d'execution 5

    Argument ou appel de procedure incorrect

    Oui Oui j'ai essayé tout ce que je pouvais avant de poster , c'est a dire un autre indice , et quand je met un espion on me donne bien les item et le nom , en tipe variant , donc j'ai essayé en mettant en variant mais ca ne marche pas .... c'est vraiment bizarre.
    Allez le RC LEns

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    a oui ... tu dois utiliser For Each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For Each Folder In folderPath.GetFolder(ThisWorkbook.Worksheets("Feuil1").Range("A29")).SubFolders
            Nom = Folder.Name
        Next

  5. #5
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut Oui mais ...
    Oui mais moi je ne veux pas parcourir tous les dossiers , je souhaiterais juste prendre le nom du dernier.
    Et aparement avec item on pourrait le faire sauf que ca ne marche pas du tt .

    Je ne trouve pas la solution meme avec l'espion.
    Allez le RC LEns

  6. #6
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut Bon bin je contourne le probleme
    Malheureusement , je pense que ce n'est pas possible , je recherche meme sur des sites anglais , apparement c'est pas possible
    donc j'ai trouvé une autre solution mais bon c'est pas super mais je la communique pour ceux que ca interesse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub test1234()
        'lien fixe
        Dim NbF As Integer
        Dim Nom As String
        Dim Folders As Folders
        Dim MyFolder As Folder
        Dim Lien As String
        Dim i As Long
        Dim folderPath As New Scripting.FileSystemObject
        NbF = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders.Count
       Set Folders = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder")).SubFolders
       For Each MyFolder In Folders
        i = i + 1
            If i = NbF Then
            Nom = MyFolder.Name
            End If
       Next MyFolder
       Lien = folderPath.GetFolder(ThisWorkbook.Worksheets("DB").Range("Link_Folder") & Nom).Path
    End Sub
    Voila, je recupere bien le dossier le plus recent, c'est a dire le dernier , puisque les noms des fichiers est une date yyyymmdd

    je clos le sujet demain au cas ou quelqu'un veuille rajouter une idee.
    Allez le RC LEns

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par tamtam64 Voir le message
    Malheureusement , je pense que ce n'est pas possible.

    Même chose pour moi.

    je clos le sujet demain au cas ou quelqu'un veuille rajouter une idee.

    Dans le cas d'un classeur particulier, rien ne t'empêche, qu'au moment où ta macro change de dossier, de le noter à quelque part sur une feuille de calcul dans un endroit où tu es sûr qu'elle ne sera pas écrasée ou modifiée par accident.

    Tu risques d'avoir besoin de lancer Excel comme administrateur, mais VBA fournit SaveSetting ou SaveSettings (je ne me souviens plus) et GetSetting pour conserver et récupérer des informations dans le registre. (Il me semble qu'il y a aussi moyen de le faire avec FileSystemObject.)

    Tu peux aussi te faire un petit fichier texte d'une ligne avec ton information

    Ou, en faisant du zèle, utiliser l'API Windows pour en faire un fichier .ini. Mais, j'ai bien dit que c'était faire du zèle
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  8. #8
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut Ouai
    Merci pour ton aide, mais je vais rester dans quelque chose que je maitrise , je n'aime pas trop utiliser des choses que je ne maitrise pas , mais peut etre lors d'une amelioration effectivement, je me mettrais aux api quand je serais au point .
    Mais la j'ai fais mon programme et ca marche trés bien . Merci je clos le sujet
    Allez le RC LEns

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu souhaites récupérer le dossier le plus récent parmi une liste de sous dossier dont le lien du folder parent est dans ton fichier excel ?
    ensuite tu dois réaliser une action sur chaque classeur du dossier ?

    si tous les sous dossiers de ton dossier parent sont sur le format yyyymmdd, je ne comprend pas la difficulté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Base 1
    Sub test1234()
        Dim Folder As Object
        Dim Fichier As Object
        Dim folderPath As New Scripting.FileSystemObject
        Dim TabFold() As Date
        Dim Nom As String
     
        ' tableau des noms de dossiers convertis en jj/mm/aaaa
        ReDim TabFold(1)
        For Each Folder In folderPath.GetFolder(ThisWorkbook.Worksheets("Feuil1").Range("A1")).SubFolders
            Nom = Right(Folder.Name, 2) & "/" & Mid(Folder.Name, 5, 2) & "/" & Left(Folder.Name, 4)
            If IsEmpty(TabFold(1)) Then
                TabFold(1) = Nom
            Else
                ReDim Preserve TabFold(UBound(TabFold) + 1)
                TabFold(UBound(TabFold)) = Nom
            End If
        Next Folder
     
        ' tri
        For i = LBound(TabFold) To UBound(TabFold) - 1
            For j = i + 1 To UBound(TabFold)
                If TabFold(i) > TabFold(j) Then
                    Temp = TabFold(j)
                    TabFold(j) = TabFold(i)
                    TabFold(i) = Temp
                End If
            Next j
        Next i
     
        'détection du plus récent
        Nom = TabFold(UBound(TabFold))
        Nom = Right(Nom, 4) & Mid(Nom, 4, 2) & Left(Nom, 2)
     
        ' instanciation du dossier
        Set Folder = folderPath.GetFolder(ThisWorkbook.Worksheets("Feuil1").Range("A1")).SubFolders(Nom)
     
        ' boucle sur les fichiers
        For Each Fichier In Folder.Files
                ' cherche tes fichiers Excel ici
        Next Fichier
    End Sub

  10. #10
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à consulter : Manipulation des fichiers en VBA, il y a, il me semble, un exemple de recherche récursive, après il faudra l'adapter à ton contexte. Voir également dans la FAQ

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

Discussions similaires

  1. Question sur l'objet Scripting.FileSystemObject
    Par arnaud_matard dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/08/2008, 14h00
  2. Réponses: 2
    Dernier message: 08/08/2007, 08h57
  3. cherche scripts whois pour vérification de nom de domaine
    Par casaoui-web dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 17/04/2007, 15h28
  4. Réponses: 1
    Dernier message: 06/12/2006, 15h24

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