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 :

comment faire une mise a jour automatique d'une feuille a partir d'un répertoire?


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut comment faire une mise a jour automatique d'une feuille a partir d'un répertoire?
    Bonjour à tous

    Première chose , cela ce fait-il?

    je m'explique:

    j'aimerais pouvoir faire de ma feuille excel, qu'elle puisse ce mettre automatiquement a jour lorsque j'ajoute de nouveau fichier dans le répertoire d'ou elle prend sa source. Est-ce réalisable, a partir d'une macro peut-etre?

    À la fin de cet exercise , cela me permettrait a partir d'un choix que cela m'afficherait le dernier fichier associé a ce choix, plus précisément a chaque fois que j'ajouterais le dernier épisodes d'une série nommé dans ce répertoire, quand je choisirais dans une liste déroulante ce nom de série, le dernier épisode s'afficherais, je pourrais ainsi savoir beaucoup plus rapidement ou j'en suis rendu.

    mais avant tout je dois savoir si on peux '' lier'' un répertoire a excel.

    J'ai essayé avec kutools, ca fonctionne en parti, je peux importer les fichiers du répertoire sur la feuille et refaire le meme scénario pour chaque série, mais je ne peux créer de macro en utilisant kutools, je part la macro mais excel n'enregistre pas mes choix ds les onglets de kutools.

    merci de votre habituelle collaboration.

    un jour j'en connaitrai surement assez pour rendre la pareille

  2. #2
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Bonjour,

    J'ai quelque chose d'approchant qui m'est utile dans mon quotidien au boulot.

    Une fonction qui compte le nombre de fichiers par répertoire.

    A intégrer dans un module :

    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
    Option Explicit
    Function GetFileList(FileSpec As String) As Variant
     
    Application.ScreenUpdating = False
     
    Dim Filecount As Integer
    Dim Filename As String
     
    Application.Volatile
     
    Filecount = 0
    Filename = Dir(FileSpec)
    If Filename = "" Then Exit Function
     
    Do While Filename <> ""
        Filecount = Filecount + 1
        Filename = Dir()
    Loop
     
    GetFileList = Filecount
     
    Application.ScreenUpdating = True
     
    End Function
    Dans une cellule, tu appelles la fonction de cette manière :

    =GetFileList("chemin du dossier")

    J'espère que cela pourra te mettre sur la piste de la résolution de ton problème.

    Bien à toi,

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    merci bcp de ton temps

    j'essaie ca


    ok j'ai testé ca me renvoie le nombre de fichiers dans le répertoire, mais pas le nom du dernier fichiers

  4. #4
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Bonjour,

    J'ai précisé que ça se rapprochait de ce que tu cherchais mais il faut alors l'adapter à tes besoins.

    Regarde le sujet : https://www.developpez.net/forums/d9...er-repertoire/.

    Ca devrait te mettre sur la piste de ce que tu souhaites.

    Bien à toi !

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    merci de ton temp et de ton aide, malheureusement je n'ai pas les connaissances et compétences pour savoir comment l'adapter et faire les changement nécessaire, même en regardant les liens, je ne suis pas en mesure de comprendre les erreurs.

    Je vous admire vous tous qui comprennez ce langage

    je croyais que cela serait beaucoup plus ''friendly use'' si je peux me permettre ce terme.

    je tomberai peut etre un jour sur quelque chose qui le fera du premier coup.

    merci encore

  6. #6
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Bonjour,

    C'est très "friendly" (pour reprendre ton terme) comme forum tu sais.

    Si tu donnes un poisson à quelqu'un, il mangera un jour. Si tu lui apprends à pêcher, il mangera tous les jours

    C'est un peu le principe du forum. Les personnes ne sont pas là pour faire le boulot à ta place mais pour t'aiguiller en fonction des problèmes que tu rencontres.

    Je t'avoue que je ne suis pas au top dans le langage VBA mais je glâne, ci et là, des bouts de code que je teste et que j'essaye d'adapter en fonction de mes besoins. Ce forum m'a déjà aidé plus d'une fois

    Il se peut que quelqu'un passe par cette discussion avec une solution toute faite et te la partage.

    Ne perds pas espoir

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    oh mais je me suis peut mal exprimé, le terme friendly user je faisais référence au langage excel et la facon de batir une programmation en aucun temps je voulais dire a propos du forum.

    J'apprécie trop l'aide qu'on m'apporte ici, c'est seulement que meme en me l'expliquant je ne comprend peu dans la facon de le faire. j'essaie avec vos réponse, mais si j'ai un code d'erreur, je n'ai pas vos connaissance pour me pointer vers la solution, le pourquoi de mes question suivante.

    désolé si je me suis mal exprimé

  8. #8
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Salut,

    Je pense avoir trouvé, sur ce forum, quelque chose qui pourrait très certainement répondre à ta demande.

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    Option Explicit
     
    Sub TestListeFichiers()
        Dim Dossier As String
     
        'Définit le répertoire pour débuter la recherche de fichiers.
        '(Attention à ne pas indiquer un répertoire qu contient trop de sous-dossiers ou de
        'fichiers, sinon le temps de traitement va être très long).
        Dossier = "CHEMIN DU DOSSIER"
     
        'Appelle la procédure de recherche des fichiers
        ListeFichiers Dossier
     
        'Ajuste la largeur des colonnes A:E en fonction du contenu des cellules.
        Columns("A:E").AutoFit
        MsgBox "Terminé"
    End Sub
     
     
     
    Sub ListeFichiers(Repertoire As String)
        '
        'Nécessite d'activer la référence "Microsoft Scripting RunTime"
            'Dans l'éditeur de macros (Alt+F11):
            'Menu Outils
            'Références
            'Cochez la ligne "Microsoft Scripting RunTime".
            'Cliquez sur le bouton OK pour valider.
     
        Dim Fso As Scripting.FileSystemObject
        Dim SourceFolder As Scripting.Folder
        Dim SubFolder As Scripting.Folder
        Dim FileItem As Scripting.File
        Dim i As Long
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = Fso.GetFolder(Repertoire)
     
        'Récupère le numéro de la dernière ligne vide dans la colonne A.
        i = Range("A65536").End(xlUp).Row + 1
     
        'Boucle sur tous les fichiers du répertoire
        For Each FileItem In SourceFolder.Files
            'Inscrit le nom du fichier dans la cellule
            Cells(i, 1) = FileItem.Name
            'Ajoute un lien hypertexte vers le fichier
            ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), _
                Address:=FileItem.ParentFolder & "\" & FileItem.Name
            'Indique la date de création
            Cells(i, 2) = FileItem.DateCreated
            'Indique la date de dernier acces
            Cells(i, 3) = FileItem.DateLastAccessed
            'Indique la date de dernière modification
            Cells(i, 4) = FileItem.DateLastModified
            'Nom du répertoire
            Cells(i, 5) = FileItem.ParentFolder
     
            i = i + 1
        Next FileItem
     
     
        '--- Appel récursif pour lister les fichier dans les sous-répertoires ---.
        For Each SubFolder In SourceFolder.subfolders
            ListeFichiers SubFolder.Path
        Next SubFolder
     
    End Sub
    Teste ça

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    Merci énormément pour tout ton temps que tu m'as consacré, j'apprécie grandement ton geste

    mais ca fonctionne pas, j'ai toujours le code NAME qui s'affiche et je ne sais pas pourquoi.

    ce que je fais c'est copier le code dans un module et ensuite dans une case je tape =ListeFichiers("I:\Séries") et NAME? s'affiche dans cette case.

    j'enleve les "", enleve les () enleve les deux en meme temps, ajoute un espace avant la premiere (
    , bref j'essaie des chose mais toujours l' erreur NAME qui revient.

    je suis un cas non récupérable.


    merci encore

  10. #10
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Pour utiliser une macro dans une cellule Excel, il faut employer une fonction (Function) et non pas une procédure (Sub). C'est pour ça que tu as en retour Name : il ne trouve pas la fonction ListeFichiers.

    Voici une fonction matricielle :
    Code VB : 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
    Option Explicit
    Function ListeFichiers(Dossier As String) As Variant
    Dim t(), i&, f$
      f = Dir(Dossier)
      Do While f <> ""
        i = i + 1
        ReDim Preserve t(1 To i)
        t(i) = f
        f = Dir
      Loop
      ListeFichiers = Application.Transpose(t)
    End Function
     
    Sub Test()
    Dim t
      t = ListeFichiers("D:/Temp/")
      Stop
    End Sub

    Le résultat est une matrice,
    pour l'utiliser il faut sélectionner la plage de cellules destinée à recevoir la liste des fichiers, puis saisir la formule :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =ListeFichiers("I:\Séries")
    et valider cette formule par Ctrl+Maj+Entrée

    Dans la barre de formule, les formules matricielles sont encadrées par des accolades :
    Nom : ListeFichiers.jpg
Affichages : 496
Taille : 22,1 Ko

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    merci @ toi

    mais je crois que je suis vraiment pas dans mon domaine, même avec toutes l'aide que vous m'apportez et les exemples, je ne suis toujours pas capable d'y arriver.

    j'ai toujours la même erreur de NAME?., pourtant j'ai copié :

    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
    Option Explicit
    Function ListeFichiers(Dossier As String) As Variant
    Dim t(), i&, f$
      f = Dir(Dossier)
      Do While f <> ""
        i = i + 1
        ReDim Preserve t(1 To i)
        t(i) = f
        f = Dir
      Loop
      ListeFichiers = Application.Transpose(t)
    End Function
     
    Sub Test()
    Dim t
      t = ListeFichiers("D:/Temp/")
      Stop
    End Sub

    dans un module, mais dois-je adapter certains paramètres à l'intérieur avec mes données ou tout est supposé fonctionner avec cette commande : =ListeFichiers("I:\Séries") ?

    Ma version Excel est en anglais, est-ce un problème ?

    je vous en bouffe de l'énergie, désolé

  12. #12
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,

    As-tu activé les macros ?
    Un fichier exemple :
    LF.xlsm

  13. #13
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Bonjour CptMorgan,

    Peux-tu me donner le chemin exact du dossier dans lequel tu souhaites exécuter la macro stp ?

    Je vais l'intégrer à un fichier Excel que je t'enverrai et tu n'auras plus qu'à appuyer sur un bouton

    Bàt,

  14. #14
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Bonjour, si tout tes fichiers du répertoire on la même structure, tu peux essayer PowerQuery.
    Onglet Données -> données Externes->Nouvelle requête-> A partir d'un Fichier -> A partir d'un repertoire.
    Il te reste plus qu'à te familiariser avec tout ceci, mais ça ce fait bien.

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    Citation Envoyé par Guy7700 Voir le message
    Bonjour CptMorgan,

    Peux-tu me donner le chemin exact du dossier dans lequel tu souhaites exécuter la macro stp ?

    Je vais l'intégrer à un fichier Excel que je t'enverrai et tu n'auras plus qu'à appuyer sur un bouton

    Bàt,
    ("I:\Séries")
    mais dans ce répertoires j'ai environ 25 sous répertoires qui eux contiennent les épisodes de séries. et j'ai la même chose a 4 autres endroits différents qui en tout donne environ 120 séries., donc pour résumer c'est:

    I:\Séries\"nom de la séries" et au final ce que je cherche a faire( comme c'est là , c'est beaucoup plus vous tous) à chaque fois que j'ajouterai un épisodes, j'aurais toujours le derniers qui s'afficherait , ce qui serait moins long que de parcourir tous les dossiers a chaque fois.

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    Citation Envoyé par weetoz Voir le message
    Bonjour, si tout tes fichiers du répertoire on la même structure, tu peux essayer PowerQuery.
    Onglet Données -> données Externes->Nouvelle requête-> A partir d'un Fichier -> A partir d'un repertoire.
    Il te reste plus qu'à te familiariser avec tout ceci, mais ça ce fait bien.

    Merci

    j'ai essayé , mais cela coupe une parties des fichiers car il en a trop

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Re,

    As-tu activé les macros ?
    Un fichier exemple :
    LF.xlsm
    oui Monsieur

    si je clique sur votre fichier LF.xlsm, ca fonction pour le dossier en question , mais si je veux ajouter au bout le nom du sous-dossier pour lister les fichiers en dessous de celui-ci ca me dit : "You can't change part of a array"

    merci

  18. #18
    Membre éprouvé
    Homme Profil pro
    Employé administratif
    Inscrit en
    Mars 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Mars 2018
    Messages : 116
    Par défaut
    Bonjour CptMorgan,

    Essaye ceci : CptMorgan.xlsm

    Bien à toi,

  19. #19
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par CptMorgan Voir le message
    oui Monsieur

    si je clique sur votre fichier LF.xlsm, ca fonction pour le dossier en question , mais si je veux ajouter au bout le nom du sous-dossier pour lister les fichiers en dessous de celui-ci ca me dit : "You can't change part of a array"

    merci
    C'est normal, il s'agit d'une formule matricielle ! il faut modifier la matrice entière.
    Pour modifier une formule matricielle, il faut sélectionner toutes les cellules de la matrice, modifier la formule, et la valider par Ctrl+Maj+Entrée.
    Pour modifier la taille de la matrice, sélectionner toutes les cellules de la matrice et supprimer l'ancienne matrice. Puis sélectionner la nouvelle plage matricielle, saisir la formule et la valider par Ctrl+Maj+Entrée.

  20. #20
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2013
    Messages : 49
    Par défaut
    Citation Envoyé par Guy7700 Voir le message
    Bonjour CptMorgan,

    Essaye ceci : CptMorgan.xlsm

    Bien à toi,


    WOWWWW!!! ca fonctionne presque a 100%.

    ok cette commande m'affiche tous les épisodes de tous les dossiers .....mais dans la même colonne. Je sais que je vais devoir creer cette meme procédure pour le nombre de dossier que j'ai.

    j'aimerais en arriver a avoir tous les épisodes de chaques dossiers dans une colonne séparé, car au final lorsque je cliquerai sur la macro, elle ajoutera tous les nouveaux épisodes que j'aurai ajouté dans chaque dossier, ainsi par la suite sur une autre feuille, s'affichera le dernier épisodes à jour des série.

    donc le fichier que tu m'as crée est GÉNIAL, j'aurais simplement besoin que tu me guides , à savoir quoi changer dans la macro pour que la deuxieme affiche un autre dossier dans la colonne B, et que l'autre affiche dans la colonne C et ainsi de suite.

    je pourrais ainsi créer 120 macros qui génererait 120 colonnes affichant tous les épisodes et ensuite une seule macro qui partirait les 120 toutes seule

    merci énormément de ta patience et de ton temps, vraiment!!!

Discussions similaires

  1. Comment faire une photo galerie à partir de Blob?
    Par patmaba dans le forum PL/SQL
    Réponses: 0
    Dernier message: 03/08/2012, 09h00
  2. Réponses: 3
    Dernier message: 18/06/2012, 14h07
  3. Comment faire les mises a jour de mon site
    Par halimux dans le forum Débuter
    Réponses: 1
    Dernier message: 18/05/2009, 14h29
  4. Réponses: 3
    Dernier message: 11/04/2009, 05h27
  5. Réponses: 13
    Dernier message: 02/09/2007, 12h15

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