Ouvrir un fichier selon sa date - Macro

Bonjour !

Je vous sollicite une dernière fois car mon code touche bientôt à sa fin lol,

J'aimerais modifier le code ci-dessous afin qu'il ne traite QUE les fichiers avant une certaine date !

C'est à dire, si le fichier A est daté du 22/02/2019 et que je veux seulement traité ceux avant le 22/02/2018. Eh bah, le fichier A ne sera pas traité !

Est-ce possible à votre avis ?

Ca ne doit pas être bien dur mais je ne sais pas comment récupérer la date d'un fichier.

Ce que j'ai mis en gras est le début de code que j'ai écris afin de rajouter cette fonctionnalité !

Bien à vous.

Et si par ailleurs, quelqu'un sait comment fermer les fichiers après leurs ouvertures, ca serait la bienvenue.

Sub AnalyseClasseurs()
Dim Wb As Workbook ' représente un classeur
Dim Ws As Worksheet ' représente une feuille de calcul
Dim NbClasseurs As Integer ' Nombre de classeurs traités
Dim C As Integer ' Permet de parcourir les colonnes
Dim ColDate As Integer ' Colonne courante pour l'onglet DATE
Dim ColNom As Integer ' Colonne courante pour l'onglet NOM
Dim MyStamp As Integer

My Stamp = Wb.date ?
If My Stamp < .... then

NbClasseurs = 0

' On efface le contenu des onglets "DATE" et "NOM"
Sheets("DATE").Select
Cells.Select
Selection.ClearContents
Sheets("NOM").Select
Cells.Select
Selection.ClearContents
ColDate = 1 ' On démarre le remplissage à la colonne 1 pour l'onglet DATE
ColNom = 1 ' On démarre le remplissage à la colonne 1 pour l'onglet NOM


For Each Wb In Application.Workbooks ' Boucle sur chaque classeur ouvert
If Wb.Name <> ThisWorkbook.Name Then ' Si c'est pas CE classeur
NbClasseurs = NbClasseurs + 1
For Each Ws In Wb.Worksheets ' Boucle sur chaque feuille de chaque classeur

C = 1
While Ws.Cells(1, C) <> "" ' On passe les colonnes occupées en revue

If Ws.Cells(1, C) = "DATE" Then
' On copie la colonne
Ws.Columns(C).Copy (ThisWorkbook.Sheets("DATE").Columns(ColDate))
ColDate = ColDate + 1 ' On avance d'une colonne
ElseIf Ws.Cells(1, C) = "NOM" Then
' On copie la colonne
Ws.Columns(C).Copy (ThisWorkbook.Sheets("NOM").Columns(ColNom))
ColNom = ColNom + 1 ' On avance d'une colonne
End If

C = C + 1
Wend

Next Ws
End If
Next Wb

If NbClasseurs = 0 Then MsgBox ("ERREUR: Aucun classeur ouvert disponible")

End Sub

Bonjour,

à ma connaissance, l'objet classeur excel n'a pas une propriété donnant la date de dernier traitement.

Par contre un classeur excel est un fichier, et il existe 3 infos de date associées à un fichier (date de création, date de modification, date de dernier accès)

ces infos sont accessibles ainsi

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(chemin et nom duclasseur)
datecreation=f.datecreated
datemodification=f.datelastmodified
dateacces=f.datelastaccessed

à toi de déterminer si l'une de ces dates te convient pour ce que tu souhaites faire. Sinon tu devras gérer toi-même (par une info dans ton classeur), l'info date qui te convient et les traitements à faire en conséquence.

Merci beaucoup ! Tu aurais une idée de comment je pourrais intégrer ça a mon code ?

Bonjour,

voici le code intégré. Mais selon moi, ouvrir tous les classeurs et ne traiter que ceux dont la date convient n'est pas une bonne manière de faire.

Sub AnalyseClasseurs()
    Dim Wb As Workbook ' représente un classeur
    Dim Ws As Worksheet ' représente une feuille de calcul
    Dim NbClasseurs As Integer ' Nombre de classeurs traités
    Dim C As Integer ' Permet de parcourir les colonnes
    Dim ColDate As Integer ' Colonne courante pour l'onglet DATE
    Dim ColNom As Integer ' Colonne courante pour l'onglet NOM
    Dim fs As Object
    Dim f As Object
    Dim DateCreation As Date, DateModification As Date, DateAcces As Date, DateReference As Date
    NbClasseurs = 0
    DateReference = DateValue("19/04/2018") '<- date de référence
    ' On efface le contenu des onglets "DATE" et "NOM"
    Sheets("DATE").Cells.ClearContents
    Sheets("NOM").Cells.ClearContents
    ColDate = 1 ' On démarre le remplissage à la colonne 1 pour l'onglet DATE
    ColNom = 1 ' On démarre le remplissage à la colonne 1 pour l'onglet NOM

    Set fs = CreateObject("Scripting.FileSystemObject")

    For Each Wb In Application.Workbooks ' Boucle sur chaque classeur ouvert
        If Wb.Name <> ThisWorkbook.Name Then ' Si c'est pas CE classeur
            Set f = fs.GetFile(Wb.FullName)
            DateCreation = f.datecreated
            DateModification = f.datelastmodified
            DateAcces = f.datelastaccessed
            If DateCreation < DateReference Then
                NbClasseurs = NbClasseurs + 1
                For Each Ws In Wb.Worksheets ' Boucle sur chaque feuille de chaque classeur

                    C = 1
                    Do While Ws.Cells(1, C) <> "" ' On passe les colonnes occupées en revue

                        If Ws.Cells(1, C) = "DATE" Then
                            ' On copie la colonne
                            Ws.Columns(C).Copy (ThisWorkbook.Sheets("DATE").Columns(ColDate))
                            ColDate = ColDate + 1 ' On avance d'une colonne
                        ElseIf Ws.Cells(1, C) = "NOM" Then
                            ' On copie la colonne
                            Ws.Columns(C).Copy (ThisWorkbook.Sheets("NOM").Columns(ColNom))
                            ColNom = ColNom + 1 ' On avance d'une colonne
                        End If
                        C = C + 1
                    Loop
                Next Ws
            End If
        End If
    Next Wb

    If NbClasseurs = 0 Then MsgBox ("ERREUR: Aucun classeur ouvert disponible")

End Sub

Pourquoi ??

Pourquoi ??

moi je n'ouvrirais que les fichiers qu'il est nécessaire d'ouvrir, mais bon je ne sais pas quelle est la finalité de cette sélection ...

si la solution te convient c'est ce qui compte.

C'est adapté au programme de mon entreprise !

Mais merci infiniment :)

Hello, lorsque j'execute le code il me dit que my date n'est pas défini.. Donc je l'ai remplacement par date reference, mais ensuite il me surligne "Sheets("DATE").Cells.ClearContents" en disant que que l'indice est en dehors des dimensiosn du tableau ? Qu'est ce que ca veut dire ? Comment régler ça ?

bonsoir,

ce message indique que la feuille nommée "date" n'est pas trouvée dans le classeur actif.

Hello !

Et bien, j'ai tout essayé ce week-end... Mais je ne comprend pas pourquoi ça ne marche pas lorsque je rajoute votre bout de code.. Pourtant mes onglets sont biens définis.

re-bonjour,

vérifie si l'onglet "date" du classeur actif n'est pas protégé.

Hello ! Nope, il n'est pas protégé... Super bizarre

Alors c'est que le classeur actif n'est pas celui que tu crois.

mets cette instruction avant l'instruction Sheets("DATE").Cells.ClearContents et tu verras quel est le classeur actif.

msgbox activeworkbook.name

Non plus... Ça ne marche pas, ca me met toujours le même message d'erreur

re-Bonjour,

Non plus... Ça ne marche pas, ca me met toujours le même message d'erreur

correct, l'instruction ne sert qu'à te montrer quel est le classeur actif.

Désolé, je ne t'aide plus sans que tu mettes les fichiers concernés ou des fichiers exemples avec lesquels on peut reproduire l'erreur.

10donnees2.xlsx (8.60 Ko)
12donnees1.xlsx (8.76 Ko)

Les voici ! Cordialement

re-Bonjour

Ceci confirme que dans ton classeur "analyseclasseurs.xlsm", ni dans aucun des autres classeurs d'ailleurs, tu n'as pas de feuille (onglet) nommé "date".

mon aide s'arrête ici.

Rechercher des sujets similaires à "ouvrir fichier date macro"