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

VBA Discussion :

Copier un fichier dont une partie du nom change tous les jours


Sujet :

VBA

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut Copier un fichier dont une partie du nom change tous les jours
    bonsoir,

    J'ai un petit probleme ici.

    Je fais une petite macro toute simple qui copie le contenu d'un classeur source vers un autre classeur destination. Le problème, c'est qu'une partie du nom du fichier change tous les jours ( Exemple : efsf_frontoffice_extract_yyyymmdd_hhmmss et les minutes et secondes changent à chaque fois. Mais chose importante les heures sont toujours les memes donc en fait j;aimerais lui dire daller chercher le nom du fichier contenant efsf_frontoffice_extract_yyyymmdd_hh et non efsf_frontoffice_extract_yyyymmdd_hhmmss.

    Voici le code que je pensais utiliser :

    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
    Sub Workbook_Open()
     
    Dim Wb_Source As Workbook, Wb_Dest As Workbook
    Dim i As Integer
    Dim fso As Object, Src$, Dest$, Fich$
    Dim Rep_source As String, Rep_dest As String, Rep_dest2 As String
    Dim Date_Jour As String, Date_Jour1 As String, Date_Jour2 As String, Date_Jour3 As String
    Dim j1 As Byte, j2 As Byte
     
        If Weekday(Now) = 2 Then 'lundi
            j1 = 3
            j2 = 4
        End If
        If Weekday(Now) = 3 Then 'mardi
            j1 = 1
            j2 = 4
        End If
        If Weekday(Now) = 4 Or Weekday(Now) = 5 Or Weekday(Now) = 6 Then 'mercredi, jeudi, vendredi
            j1 = 1
            j2 = 2
        End If
     
        Date_Jour = Format(Now, "yyyy_mm_dd")
        Date_Jour1 = Format(Now - j1, "yyyy_mm_dd")
        Date_Jour3 = Format(Now, "yyyymmdd")
     
     
     
        Rep_source = "C:\murex_ftp\reports\itd\fo_citi\" & Date_Jour3 & "\"
        Rep_dest = "M:\01_Murex\Citi\"
     
         ArrWd = Split(("efsf_frontoffice_extract"), ";")
         ArrWd2 = Split(("Source"), ";")
     
     
        Set Wb_Dest = Workbooks.Open(Rep_dest & "Extended_ MurexCitiFileExtractwith adjusted time_JPA new macro.xlsm") 'ouvre le classeur destination
     
     
    For i = 0 To UBound(ArrWd)
        Set Wb_Source = Workbooks.Open(Rep_source & ArrWd(i) & "_" & Date_Jour3 & ".csv", , True) 'ouverture en lecture seule du classeur source
        Wb_Source.Sheets(1).Cells.Copy Wb_Dest.Sheets(ArrWd2(i)).Range("a1")  'copier/coller
        Wb_Source.Close False 'ferme le classeur source
    Next i
     
     
    Wb_Dest.Close True 'ferme le classeur destination avec enregistrement
     
     
    End Sub
    Merci pour votre aide

  2. #2
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    utilise la méthode instr, et tu recherche sur "efsf_frontoffice_extract_", ça risque de te sortir une liste de fichiers, et après tu fais le tri
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Bonjour ,

    Merci pour ta réponse cependant je ne connais pas cette méthode.

    Merci

  4. #4
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Aie le réflexe google.

    InStr vba et tu aurais eu la réponse en 2s.

    Mais comme je suis quelqu'un de sympa, je te mets un petit cas pratique.
    la méthode instr retourne la première position d'une occurrence dans une chaine de caractère :

    Par exemple :
    instr("toto", "o") retourne 2

    instr("to_ta", "ta") retourne 4

    instr("toto", "b") retourne 0

    Tu peux te servir de cette méthode pour déterminer si ton fichier existe. Tu lui passe la date voulue :

    "efsf_frontoffice_extract_20150111_08", si le résultat > 0, ça veut dire que ton fichier existe, sinon c'est qu'il n'est pas dans le répertoire spécifié.

    Ensuite, tu remplace le 20150111_08 par une variable, tu le concatène a ton début de nom de fichier et le tour est joué
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Merci mais je ne sais pas comment implémenter ça dans mon code . Je suis perdue...
    Help

  6. #6
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    pourquoi ne pas passer par une fenetre qui te permettrait de sélectionner le classeur voulu ?

    Est ce que tu fais du traitement de masse ou bien c'est un traitement à lancer de temps en temps ?

    Pour ouvrir un écran de sélection, tu as le browse file

    L'aide ici
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Je le fais 3 fois par jour mais avec toujours le même nom pour chacun des jours.
    Juste la date change mais ça je contrôle..

    Je ne vois pas de quoi tu parles par une fenêtre

  8. #8
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    qqc comme ça :

    Nom : Wf_Excel_Browse.jpg
Affichages : 896
Taille : 54,5 Ko

    Comme ça, tu te balade dans ton ordinateur pour aller chercher le fichier que tu veux traiter, et tu n'as pas le pb de la date ou autre, tu le choisi manuellement.

    Tu appele cet écran avec la méthode Application.GetOpenFilename (de l'aide ici)
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta reponse mais je veux vraiment quelauechose d'automatique.

    La personne qui me fera le code aura un present =)

  10. #10
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    j'ai pas pour habitude de fonctionner à la carotte.

    si ta problématique est simplement d'identifier un fichier dans un dossier, tu peux utiliser inStr.
    Après, est ce qu'il y a plusieurs fichier excel dans le dossier ?
    Est ce qu'il se peut que plusieurs fichier datent du même jour ?

    Comment est ce que tu définie que tu veux traiter le fichier de 15h et pas celui de 9h ?
    Automatisé dans quel sens ? ça se lance en routine a heure régulière ? Tu appuie sur un bouton et ça lance la macro ?

    Je t'ai filé des morceaux de code et/ou des idées pour ton problème. Si tu ne comprends pas une méthode, je peux t'expliquer. Mais faire ton code, non, je ne pense pas.

    Et les questions que j'ai posé attendent une réponse évidement, sinon je ne pourrais jamais t'aider a penser la résolution de ton problème.
    Et faire du code pour faire du code, c'est inutile par ce que tu perdra autant de temps a le maintenir par la suite.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Merci

    je vais repondre a tes questions

    Dans le repertoire Rep_source = "C:\murex_ftp\reports\itd\fo_citi\" & Date_Jour3 & "\" il y a toujours 4 fichiers avec la date du jour et le debut de l'heure identiques pour chacun de ces fichiers ci dessous

    efsf_frontofficeoffice_extract_yyyymmdd_100417.csv donc peu importe le jour ce fichier sera compose de la meme maniere sauf les minutes et les secondes a la fin seront differentes exemple pour aujourdhui ca sera efsf_frontofficeoffice_extract_20150113_10mmss.csv ou mmetss seront differents c'est pour cela que je nechercherais que par les heures hh

    efsf_frontofficeoffice_extract_yyyymmdd_120417.csv meme raisonnement efsf_frontofficeoffice_extract_20150113_12mmss.csv

    efsf_frontofficeoffice_extract_yyyymmdd_130417.csv meme raisonnement efsf_frontofficeoffice_extract_20150113_13mmss.csv

    efsf_frontofficeoffice_extract_yyyymmdd_180417.csv meme raisonnement efsf_frontofficeoffice_extract_20150113_18mmss.csv

    Mon code marche tres bien jusqua arrive aux heures car si je lui daller chercher le fichier avec 10,12,13 ou 18 en hh, il trouvera pas car les fichiers sont en hhmmss et non que hh.


    Meme avec ton instr je sais pas comment csa va fonctionner avec mon debut de code.

    merci encore pour ton aide

  12. #12
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    ce morceau de code regarde tous les fichiers dans le répertoire test qui est sur le bureau, filtre pour ne traiter que les csv, et regarde si il ont le début du nom qui commence par efsf_frontofficeoffice_extract_yyyymmdd_hh

    en fonction de l'heure (ici, 9h, 12h, 15h, 18h) exécute un code différent.

    Certaines choses sont codées en dur, mais tu peux variabiliser ce que tu souhaite.

    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
     
    Option Explicit
    Public Const HOUR1 = "09"
    Public Const HOUR2 = "12"
    Public Const HOUR3 = "15"
    Public Const HOUR4 = "18"
     
    Public Sub testFichierExist()
     
        Dim objFSO      As Object
        Dim objFolder   As Object
        Dim objFile     As Object
        Dim dt_          As Date
     
        Set objFSO = CreateObject("Scripting.FileSystemObject")
     
        Set objFolder = objFSO.GetFolder("c:\users\b002lca\desktop\test\")
     
        dt_ = DateSerial(2015, 1, 10)
     
        For Each objFile In objFolder.Files
            If LCase(objFSO.GetExtensionName(objFile)) = "csv" Then
                Select Case Left(objFile.Name, Len("efsf_frontofficeoffice_extract_yyyymmdd_hh"))
                Case "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR1
                    MsgBox "fichier a traiter heure numéro 1"
                Case "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR2
                    MsgBox "fichier a traiter heure numéro 2"
                Case "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR3
                    MsgBox "fichier a traiter heure numéro 3"
                Case "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR4
                    MsgBox "fichier a traiter heure numéro 4"
                Case Else
                    MsgBox "Fichier pas conforme"
                End Select
            End If
        Next
     
    End Sub
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 20
    Points : 4
    Points
    4
    Par défaut
    Bonjour,


    Merci pour votre reponse.

    Votre code marche bien pour recoonaitre le fichier mais je narrive pas a incrementer votre code dans le mien pour quil puisse

    1) reperer le fichier dont jai besoin

    2) Ouvrie et copier coller (code que jai deja fait )

    Je n'arrive pas a mettre en relatrion votre code dans le miens

    merci pour votre reponse

    Beatrice

  14. #14
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Si le code passe dans un des case du select, c'est que tu as repéré le fichier dont tu as besoin.

    Ensuite, tu dois affecter une variable de type Workbook pour pouvoir travailler dessus comme un classeur normal.

    Donc, dans les DIM, tu dois mettre un truc genre

    plus bas, avant le select case, tu dois initialiser ta variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set objWB = new Workbook
    Ensuite, après le test sur le format csv, tu set ta variable avec le fichier

    Ensuite, suivant ce que tu as besoin de faire dans chaque case, tu fais ce que tu as a faire.
    Si pour tous les cas du case c'est la meme chose, tu regroupe le case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select Case Left(objFile.Name, Len("efsf_frontofficeoffice_extract_yyyymmdd_hh"))
                Case "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR1, "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR2, "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR3, "efsf_frontofficeoffice_extract_" & Format(dt_, "yyyymmdd_") & HOUR4
                      'Je fais ce que j'ai a faire sur mon fichier
                Case Else
                      'ce n'est pas mon fichier, ne fait rien
    end select
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

Discussions similaires

  1. [XL-2007] Ouvrir le bon fichier (verifier une partie du nom)
    Par cathodique dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/01/2015, 12h27
  2. Réponses: 2
    Dernier message: 27/08/2014, 23h31
  3. Copier un fichier excel sous un autre nom en supprimant les formules
    Par Quentin15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2011, 12h19
  4. Ouvrir un fichier dont la fin du nom change via regex?
    Par Benduroy dans le forum Langage
    Réponses: 14
    Dernier message: 22/04/2011, 14h25
  5. Réponses: 1
    Dernier message: 15/05/2009, 09h31

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