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 :

Code pour trouver le dossier le plus récent


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Code pour trouver le dossier le plus récent
    Bonjour à tous,

    Je cherche à réaliser une petite macro en langage VBA pour Excel afin de me faciliter la tache au quotidien.

    Le but de ma macro est d'ouvrir un fichier Excel automatiquement, voici mon problème :

    Je doit ouvrir le dossier le plus récent dans une liste de dossier C:\trblolo\dossier le plus récent

    Ensuite je dois ouvrir le fichier *.xls le plus récent qui se trouve dans ce dossier C:\trblolo\dossier le plus récent\fichier.xls le plus récent.

    Je ne trouve pas la solution à ce problème, pouvez vous m'aider s'il vous plaît

    A bientôt j'espère.

  2. #2
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour, cherche du coté de FileDateTime

    ou sinon, j'ai retrouvé une macro toute prête qui pourra t'aider
    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
    Option Explicit
    Dim i As Long, k As Long
    Public monTab2Dim() As Variant
    Sub essai()
    ListerFichiersDansDossier "Chemin_du_Dossier", True
       For i = 1 To UBound(monTab2Dim, 2)
    Debug.Print "Fichier " & monTab2Dim(1, i) & " modifié le " & monTab2Dim(4, i)
    Next
    End Sub
     Sub ListerFichiersDansDossier(NomDossierSource As String, InclureSousDossiers As Boolean)
    'd'après une macro d' Ole P Erlandsen (modifié fs 11/8/01)
     
    Dim FSO As Object 'As Scripting.FileSystemObject
    Dim DossierSource  As Object 'As Scripting.Folder
    Dim SousDossier  As Object 'As Scripting.Folder
    Dim Fichier  As Object 'As Scripting.File
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set DossierSource = FSO.GetFolder(NomDossierSource)
     
     
    For Each Fichier In DossierSource.Files
    ' remplissage du tableau
       k = k + 1
       ReDim Preserve monTab2Dim(1 To 7, 1 To k)
       monTab2Dim(1, k) = Fichier.Name  'Fichier
       monTab2Dim(2, k) = Fichier.ParentFolder & Application.PathSeparator  'racine
       monTab2Dim(3, k) = Fichier.DateCreated 'date création
       monTab2Dim(4, k) = Fichier.DateLastModified  'date modification
       monTab2Dim(5, k) = ""
       monTab2Dim(6, k) = Round(Fichier.Size / 1024, 1)  'taille du fichier
       monTab2Dim(7, k) = Fichier.Type  'type de fichier
    Next Fichier
     
    If InclureSousDossiers Then
       For Each SousDossier In DossierSource.SubFolders
          ListerFichiersDansDossier SousDossier.Path, True
       Next SousDossier
    End If
     
    Set Fichier = Nothing
    Set DossierSource = Nothing
    Set FSO = Nothing
    End Sub
    Cordialement

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci pour cette réponse

    Mais je ne comprend pas très bien le code, je suis débutant en VBA, j'ai fait une petite formation surtout pour aborder le langage.

    Pourrais -tu m'expliquer un peux s'il te plaît ?

    Merci d'avance

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    re

    quelle partie du code ne comprends tu pas?
    fred

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    En fait, il y a pas mal de choses que je ne comprends pas :

    J'ai transférer ce code brut sans modifications dans mon excel et il me fait une erreur de compilation (variable non définie) et cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ListerFichiersDansDossier(NomDossierSource As String, InclureSousDossiers As Boolean)
    est surlignée en jaune.
    Le message d'erreur indique erreur de compilation variable non définie et la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve monTab2Dim (1 To 7, 1 To k)
    est surligné en bleu


    Des commentaires sur le déroulement de ce code pourrais m'aider en fait.

    Il y a 2 sub aussi sa me trouble un peu !

    Désolé d'être lourd, mais je ne comprends pas trop en fait.

    Merci.

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,
    j'ai oublié de copier la zone de déclaration des variables, c'est ajouté au code (les 3 premières lignes).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Dim i As Long, k As Long
    Public monTab2Dim() As Variant
    Pour plus d'infos sur l'objet tu peux consulter l'article sur MSDN
    Utilisation du File System Object

    la macro ListerFichiersDansDossier est la macro qui liste les infos des fichiers d'un répertoire.

    La macro essai est celle qui lance la macro ListerFichiersDansDossie,
    tu dois renseigner les arguments:

    NomDossierSource : Une chaine qui représente le chemin de ton dossier.
    InclureSousDossiers une valeur booléenne soit False ou True (Faux ou Vrai)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub essai()
    ListerFichiersDansDossier "Chemin_du_Dossier", True
    'boucle dans le tableau
    For i = 1 To UBound(monTab2Dim, 2)
        'affichage du résultat dans la fenêtre Exécution de VBE
        Debug.Print "Fichier " & monTab2Dim(1, i) & " modifié le " & monTab2Dim(4, i)
    Next
    End Sub
    Cordialement

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup ! La macro se déroule sans erreur. Mais je n'ai aucun résultat qui s'affiche Je viens de trouver les résultats.

    Le code que tu m'as donné est un exemple, je dois m'inspirer de celui ci ?

    Je dois faire ma macro en incluant quelque part un filedatename d'après ce que je comprend.


    Ma première étape est de rechercher le dossier le plus récent qui se trouve par exemple dans D:\téléchargement\.
    Ensuite je dois ouvrir ce dossier et rechercher le fichier *.xls le plus récent.
    Puis enfin je dois ouvrir ce fichier.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Je reviens sur ma réponse précédente :

    Je trouve bien les résultats, ils s'affichent dans la fenêtre exécution.

    Je dirais que cette méthode me gène un peu, je vous explique pourquoi :

    Mon dossier de référence (D:\Téléchargement) contient une quantité importante de dossier.
    Ces dossiers eux mêmes contiennent beaucoup de fichiers.

    Le problème que je vais rencontrer avec ce code est qu'il référence tous les fichiers dans chaque sous dossier ce qui va être très lent.

    L'idéal si c'est possible est de trouver tous d'abord le dossier le plus récent qui se trouve dans mon dossier de référence (D:\Téléchargements).

    Je pense qu'il faut lister les sous dossiers se trouvant dans mon dossier de référence (D:\Téléchargements) puis ensuite comparer ou rechercher la date la plus récente.

    Et ensuite il faudrait lister les fichiers se trouvant dans le dossier précédemment trouvé puis ouvrir le fichier *.xls le plus récent.

    Est ce possible ?

    Merci pour votre aide, je commence à comprendre le code.

  9. #9
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,
    vas voir ce post, silkyroad donne une solution toute pr^te pour trouver le dernier fichier modifié d'un répertoire.
    Cordialement

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ta réponse !!!

    Le programme fonctionne très bien, il me trouve bien le fichier le plus récent.

    Voici le code utilisé :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    Option Explicit
    Option Base 1
     
    Dim h As Integer
    Dim Tableau2()
     
     
    Sub listeDossiersEtSousDossiers()
    Dim Racine As String, recentDir As String
     
    Racine = "D:\Documents\Laurent\"
    ListeSousRepertoires Racine, True 'recherche le repertoire le + récent
     
        recentDir = triDecroissant(Tableau2())
        Erase Tableau2
        h = 0
     
        listeFichiers_dateModification recentDir
        MsgBox triDecroissant(Tableau2())
     
    Erase Tableau2
    h = 0
    End Sub
    Sub ListeSousRepertoires(SourceFolderName As String, _
    IncludeSubfolders As Boolean) ' adapté de Ole P Erlandsen
    Dim Fso As Object, SourceFolder As Object, SubFolder As Object
    Dim RepItem As Object
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(SourceFolderName)
     
        h = h + 1
        ReDim Preserve Tableau2(2, h)
        Tableau2(1, h) = SourceFolder
        Tableau2(2, h) = SourceFolder.DateLastModified
     
        If IncludeSubfolders Then
            For Each SubFolder In SourceFolder.subFolders
            ListeSousRepertoires SubFolder.Path, IncludeSubfolders
            Next SubFolder
        End If
     
    End Sub
    Sub listeFichiers_dateModification(Chemin As String)
    Dim Fichier As String
    Dim Fso As Object, FileItem As Object
     
    Fichier = Dir(Chemin & "\*.*")
     
    Do
        h = h + 1
        ReDim Preserve Tableau2(2, h)
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)
     
        Tableau2(1, h) = FileItem
        Tableau2(2, h) = FileItem.DateLastModified 'lastmodified
     
        Fichier = Dir
    Loop Until Fichier = ""
     
    End Sub
    Function triDecroissant(Tableau()) As String
    Dim i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
     
    Do
        Valeur = 0
        For i = 1 To h - 1
            If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
                For z = 1 To 2
                    Cible = Tableau(z, i)
                    Tableau(z, i) = Tableau(z, i + 1)
                    Tableau(z, i + 1) = Cible
                Next z
            Valeur = 1
            End If
        Next i
    Loop While Valeur = 1
     
     
    '--- le plus récent ---
    triDecroissant = Tableau(1, 1)
    End Function
    J'ai encore une toute petite requete :

    Le code va ouvrir le répertoire le plus récent par rapport à une liste de répertoire --> OK
    Ensuite il cherche le fichier le plus récent de ce répértoire --> En fait je voudrais qu'il ouvre le fichier avec l'extension *.t00 (fichier avec un tableau de valeur généré par un autre logiciel facilement ouvert par Excel) le plus récent sans considérer les autres fichiers.

    Est ce possible de trier par extension les différents fichiers?

Discussions similaires

  1. Comment trouver la date la plus récente?
    Par shirya dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/05/2008, 15h59
  2. routine DOS pour sélectionnée le fichier le plus récent
    Par sofiane1111 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/09/2007, 10h56
  3. Code pour verouiller un dossier sous Windows XP
    Par PHIL45 dans le forum Delphi
    Réponses: 2
    Dernier message: 26/12/2006, 13h01
  4. Trouver l'enregistrement le plus récent
    Par PrinceMaster77 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/02/2005, 19h14

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