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 :

Copier plusieurs fichiers en filtrant sur la date de création [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Par défaut Copier plusieurs fichiers en filtrant sur la date de création
    Bonjour à tous,

    Je cherche a copier plusieurs fichier d'un emplacement "source" vers un emplacement "destination" en ouvrant une fenetre de dialogue.
    le souci c'est que dans le répertoire "source" j'ai plusieur fichiers, et je voudrais copier seulement les fichiers créer à une certaine date (date du jour). c'est possible de faire ce filtre sous VBA ?

    Voici le code qui me permet de copier les fichiers mais sans le filtre (je le fais manuellement a travers la fenetre de dialogue)

    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
    Sub Fichiers_Selection_multiple()
    Dim Fichier As Variant
    Dim NomFichier As String
    Dim I As Integer
     
    Fichier = Application.GetOpenFilename(Title:="Sélection multiple", MultiSelect:=True)
     
    If TypeName(Fichier) = "Boolean" Then
      Exit Sub
    Else
      For I = 1 To UBound(Fichier)
        NomFichier = Mid(Fichier(I), InStrRev(Fichier(I), "\") + 1)
        FileCopy Fichier(I), "N:\Projets01\AVANCES_GLOBAL\COMPTA\DEVELLOPEMENT INCIDENTS\DEVELLOPEMENTS\Automatisation comptabilité quotidienne\TEST" & "\" & NomFichier
      Next
    End If
    End Sub

    Je vous remercie par avance pour vos lumieres

    Cordialement,

    Freudsw

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Oui, c'est possible
    1. Soit ton fichier source est sous forme de tableau Excel et il comporte donc des filtres. Il suffit de récupérer le code correspondant à la manipulation des filtres grâce à l'enregistreur de macro.
    2. Soit ton fichier source est sous forme d'une simple plage de cellules, alors tu pourras utiliser les filtres d'Excel.
      1. Soit tu utilises toujours le même fichier et tu mets les filtres manuellement sur ce fichier.
      2. Soit ce sont des fichiers différents à chaque fois, mais avec la même structure et alors, tu peux créer un code qui met les filtres sur ce fichier. Fais le manuellement sur un fichier et obtiens le code grâce à l'enregistreur de macro.
      Ensuite, tu obtiens grâce à l'enregistreur de macro, le code associé à la manipulation des filtres.

    Y a plus qu'à adapter les codes obtenus par l'enregistreur de macro.
    J'espère que ça te permettra d'avancer

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Par défaut Merci pour ta réponse, mais....
    Merci pour ta réponse,

    Cepandant, je ne veux pas faire le filtre dans ma page, j'ai pas de données a filtrer.

    Au fait, j'ai une macro qui permet de copier un certain nombre de fichiers d'un répertoire vers un autre, j'ai une boite de dialogue qui s'ouvre qui me permet de selectionner les fichiers en question. Ce que je veux faire c'est introduire un filtre dans la macro qui me permet d'affichier seulement les fichier qui sont créés à une certaine date .

    Cordialement,

    Freudsw

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Dans ton sub :
    tu déclare à partir de quel date tu veux que les fichiers soient copier.
    (Schématiquement Si dateDeCréationdeMonFichier >= à MaDate alors copie)
    donc,
    tu listes le dossier voulu avec Dir en déclarant seulement le type de fichier que tu veux copier (xls, jpg ou autres …)
    et dans le listage et sur chaque fichiers trouvés tu applique la date de création avec (pour les déclarations) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Fso
        Set Fso = CreateObject("Scripting.FileSystemObject")
    pour ensuite (dans le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateFichier = Fso.GetFile(path & currentPath).DateCreated ' c'est un exemple donc à adapter
    ce qui fait non shématisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DateFichier >= MaDate then
       'ton code pour copier
    End If
    Donc utilisé Dir : https://excel.developpez.com/faq/?pa...BoucleFichiers
    et dans la boucle faire la comparaison des dates pour copier ou ne pas copier le fichier dans le répertoire voulu

    Edit : petite modif de textes
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Septembre 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2015
    Messages : 77
    Par défaut Merci pour ta réponse.
    J'ai essayé d'appliquer sur mon code et malheureusement ça ne fonctionne pas, j'exécute la Macro mais rien ne se passe, j'ai du surement zappé quelque chose.

    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
    Sub Fichiers_Selection_multiple()
    Dim Fichier As Variant
    Dim NomFichier As String
    Dim source14 As String
    Dim destination14 As String
    Dim I As Integer
    Dim MaDate As String
    Dim Fso
    Dim DateFichier
    Dim fichiers As String
     
     
    source14 = ThisWorkbook.Worksheets("Source répertoire").Range("B3").Value
    fichiers = Dir(source14 & "\" & "*.csv")
    destination14 = ThisWorkbook.Worksheets("Source répertoire").Range("B4").Value
    MaDate = ThisWorkbook.Worksheets("Source répertoire").Range("C1").Value
    ChDir source14
     
     
     
    Set Fso = CreateObject("Scripting.FileSystemObject")
     
    DateFichier = Fso.GetFile(fichiers).DateCreated
     
    If DateFichier = MaDate Then
    Fichier = Application.GetOpenFilename(Title:="Sélection multiple", MultiSelect:=True)
    If TypeName(Fichier) = "Boolean" Then
      Exit Sub
    Else
      For I = 1 To UBound(Fichier)
        NomFichier = Mid(Fichier(I), InStrRev(Fichier(I), "\") + 1)
        FileCopy Fichier(I), destination14 & "\" & NomFichier
      Next
    End If
    End If
    End Sub
    Tu pourrais ou est ce que je me suis plonté dans le code ?

    Je te remercie par avance.

    Cordialement,
    Freudsw

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    j'ai fait ça vite fait car très peu de temps, je ne l'ai pas testé il faut rajouter le code pour la copie à l'endroit indiqué
    affiche la fenêtre des variables locales et fait du pas à pas avec le code avec la touche F8 et regarde ce qu'affiche la fenêtre des variables locales
    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
    Sub CopieFichiers()
    Dim Source As String, Destination As String, MaDate As String, Fichier As String
    Dim Fso, DateFichier As String
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        'Définit le répertoire contenant les fichiers
        Source = ThisWorkbook.Worksheets("Source répertoire").Range("B3").Value
        'Définit le répertoire de destination
        Destination = ThisWorkbook.Worksheets("Source répertoire").Range("B4").Value
        MaDate = ThisWorkbook.Worksheets("Source répertoire").Range("C1").Value
     
        'Boucle sur tous les fichiers xls du répertoire.
        Fichier = Dir(Source & "*.csv")
        'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
        'Fichier = Dir(Chemin & "*.*")
     
        Do While Len(Fichier) > 0
            'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
            Debug.Print Source & Fichier
            DateFichier = Fso.GetFile(Source & Fichier).DateCreated
            If DateFichier = MaDate Then
                Debug.Print Fichier
                'Code pour copier le fichier
                FileCopy Source & Fichier, Destination & Fichier
            End If
            Fichier = Dir()
        Loop
        Set Fso = Nothing
    End Sub
    Edit : mise à jour du code avec la copie
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. [XP]copier plusieurs fichiers avec la commande copy
    Par Smip99 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 16/06/2008, 19h35
  2. copier des fichier entre PC sur domaine
    Par maboulette dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 30/03/2008, 17h53
  3. Copier un fichier rapport word sur application VB
    Par milki1 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 16/08/2007, 12h43
  4. Copier plusieurs fichiers depuis MS-ACCESS 2002
    Par Gias Service dans le forum Access
    Réponses: 3
    Dernier message: 21/03/2007, 23h28
  5. Autorun pour plusieurs fichiers en simultané sur clé USB
    Par princebaal dans le forum Windows
    Réponses: 1
    Dernier message: 06/10/2005, 13h35

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