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 :

Macro pour ouvrir fichier d'un répertoire en fonction de sa date


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Points : 63
    Points
    63
    Par défaut Macro pour ouvrir fichier d'un répertoire en fonction de sa date
    Bonjour à tous, je souhaiterai ouvrir un fichier afin de réaliser un copié collé dans un autre classeur en fonction de la date qu l'on trouve dans son titre.

    Les fichiers du répertoire se nomment Real201410 - Real201411 - Real201412 donc de la forme "RealYearWeek"

    Ce répertoire s'incrémente d'un fichier chaque semaine et c'est ce dernier fichier que je souhaite importer automatiquement dans un autre classeur.

    J'ai déjà trouvé des infos pour isoler année + semaine (Merci Philippe Tulliez) mais je ne vois pas trop comment l'adapter :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ExtractYearWeek()
      Dim Name As String, Year As Integer, week As Byte
      Name = "Semaine 21: Real201407" ' Nom du fichier
      Name = Replace(Name, "Semaine", "")
      Year = Left(Right(Name, 6), 4) ' Année
      week = Left(Name, InStr(Name, ":") - 1) ' Week
    End Sub
    Et dans mon code perso, j'ai dèja le chemin du répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Nom = ActiveWorkbook.Name
         ChDrive "Q:"    ' Choix du lecteur
         ChDir "Q:\AR3\Données EXCEL"    'Choix du répertoire
        a = Application.GetOpenFilename("All files (*.*), *.*", _
                                        , "Sélection de vos fichiers ", , True)
    Je souhaiterai créer une boucle avec le nom du fichier qui ne bouge pas, et la valeur "YearWeek" .
    Le but de cette boucle serait de garder la valeur YearWeek la plus élevée afin d'ouvrir le fichier "RealYearWeek" ayant la date la plus récente.
    Merci pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Bonjour,

    Sans avoir testé et juste avec une petite recherche, je pense que la proposition de SilkyRoad faite ici peut t'intéresser.

    Chtik

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Points : 63
    Points
    63
    Par défaut
    Merci mais j'ai déja vu cette solution et elle ne convient pas car je souhaiterai importer mes fichiers en fonction de leur date se trouvant dans le titre et non en fonction de la date de modification de ce fichier.

    J'ai trouvé ce code sur un autre site.

    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
    Sub Macro1 () 
    Dim chemin$, fichier$, Frécent$, x$, y$, z$ 
        fichier = "Articles manquants pour approche - " 
        chemin = "V:\Commun\Appros\Fichier Simplifié" 
        x = Format(Date, "-mm"): y = Format(Date, "-dd"): z = Format(Date, "yyyy") 
    1       If FileExiste(chemin & "\" & fichier & z & x & y & ".xls") Then 
                Workbooks.Open (chemin & "\" & fichier & z & x & y & ".xls") 
            Else 
                If z = 2000 Then Exit Sub 
                If x = -1 And y = -1 Then 
                    z = z - 1: x = -12: y = -31: GoTo 1 
                End If 
                If y = -1 Then 
                    y = -31: x = x + 1: GoTo 1 
                Else 
                    y = y + 1: GoTo 1 
                End If 
                End If 
     
        ' Fichier le plus récent : 
        Frécent = fichier & z & x & y & ".xls"
    Et il me semble possible de l'adapter pour ma situation mais j'avoue avoir beaucoup de mal. Voila ce que j'ai pour le moment:
    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
    Sub Macro1 () 
    Dim chemin$, fichier$, Frécent$, x$, y$
        fichier = "Réalisés - " 
        chemin = "Q:\AR3" 
    x = Format(Date, "yyyy") : y = Format(Date, "-ww »)
       If FileExiste(chemin & "\" & fichier & x & y & ".xls") Then 
                Workbooks.Open (chemin & "\" & fichier & x & y & ".xls") 
            Else 
     
               If
     
     …?
     
    End If
    End if
     
     
        'Fichier le plus récent : 
        Frécent = fichier & x & y & ".xls"
    Oui, comme vous pouvez le constater, je n'ai pas changé grand chose :/

    Etant donné les noms de mes fichiers, il peut aussi être intéressant de garder "Real" et de chercher le nombre le plus élevé entre les différentes dates: 201352-201401-201402-201403
    Mais je ne vois pas comment m'y prendre :/

  4. #4
    Membre habitué
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Points : 169
    Points
    169
    Par défaut
    Salut,

    En continuant à partir de ce que tu as récupéré, voici pour ouvrir le fichier de la semaine actuelle ou de la semaine précédente.

    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
    Sub Macro1()
    Dim Chemin As String, Frecent As String, Fprecedent As String
    Dim Name As String, NamePrec As String, Year As Integer, Week As Long
     
      Year = Format(Date, "yyyy") ' Année
      Week = Format(Date, "ww") ' N° Semaine
     
        Name = "Real" & Year & Week ' Nom du fichier
        NamePrec = "Real" & Year & Week - 1
     
        Chemin = "Q:\AR3\Données EXCEL\"
        Frecent = Chemin & Name & ".xls"
        Fprecedent = Chemin & NamePrec & ".xls"
     
     '   MsgBox Frecent, vbOKOnly, "Fichier semaine en cours"
     '   Select Case MsgBox(Fprecedent, vbOKCancel, "Fichier semaine précédente")
     '      Case vbCancel
     '           Exit Sub
     '      Case vbOK
     
           If FileExiste(Frecent) Then
                Workbooks.Open (Frecent)
            Else
                If FileExistePrec(Fprecedent) Then
                Workbooks.Open (Fprecedent)
            Else
                MsgBox "Fichier inexistant", vbOKOnly, "Fichier non trouvé"
                End If
                End If
     End Select
    End Sub
     
    Function FileExiste(Frecent As String) As Boolean
        FileExiste = Dir(Frecent) <> "" And Frecent <> ""
    End Function
     
    Function FileExistePrec(Fprecedent As String) As Boolean
        FileExistePrec = Dir(Fprecedent) <> "" And Fprecedent <> ""
    End Function
    Si tu dois remonter plus loin dans les semaines antérieures, je doute que ce soit la meilleure solution.
    Il vaudrait mieux partir d'un listing des fichiers présents dans le répertoires et identifier le fichier ayant le nom maximum.
    Pour ça, il faudrait partir de la contribution de Qwazerty.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Points : 63
    Points
    63
    Par défaut
    Merci, j'ai mixé ta solution avec d'autres et je m'en sors soit avec :
    Ouverture du fichier selon un petit code:

    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
     Function ExisteFichier(Frécent As String) As Boolean
     ExisteFichier = (Dir(Frécent) <> "")
     End Function
    Sub Ouvrir()
    Dim chemin$, sousrep$, fichier$, Frécent$, x$
     
    Sheets("Résultat").Select
    Range("M24") = DatePart("ww", Date, 2, 2) 'permet d'avoir le numéro de la semaine dans la cellule M24
    Range("M25") = DatePart("yyyy", Date, 2, 2) 'permet d'avoir le numéro de l'année dans la cellule M25
     
    Sheets("Réalisées").Select
     
        chemin = "Q:\AR3\Données EXCEL\"
        sousrep = Sheets("Résultat").Range("M25").Value
        fichier = "pm W"
    x = (Sheets("Résultat").Range("M25").Value) & Sheets("Résultat").Range("M24").Value 'permet de récupérer au format voulue
    Frécent = chemin & sousrep & "\" & fichier & x & ".xlsx"
    While ExisteFichier(Frécent) = False
     
    x = x - 1
    Frécent = chemin & sousrep & "\" & fichier & x & ".xlsx"
    Wend
     
    Workbooks.Open (chemin & sousrep & "\" & fichier & x & ".xlsx")
     
    End Sub

    Soit ouverture du fichier le plus récemment créé (et non le plus récemment modifié):

    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
     
    Sub GetMostRecentFile()
     
        Dim FileSys As FileSystemObject
     
        Dim objFile As File
        'Dim FileSys As Object
        Dim myFolder As Folder
        Dim strFilename As String
        Dim dteFile As Date
     
        'set path for files - change for your folder
        Const myDir As String = "Q:\AR3\Données EXCEL\2014"
     
        'set up filesys objects
        Set FileSys = New FileSystemObject
        Set myFolder = FileSys.GetFolder(myDir)
     
     
        'loop through each file and get date last modified. If largest date then store Filename
        dteFile = DateSerial(1900, 1, 1)
        For Each objFile In myFolder.Files
            If objFile.DateCreated > dteFile Then
                dteFile = objFile.DateCreated
                strFilename = objFile.Name
            End If
        Next objFile
        Workbooks.Open myDir & "\" & strFilename
     
          Set FileSys = Nothing
          Set myFolder = Nothing
    End Sub

    Les noms sont un peu modifiés car il y a eu du changement il y a très peu de temps.

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

Discussions similaires

  1. [XL-2010] Macro pour Ouvrir un fichier Excel a partir d'un autre fichier Excel
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/06/2013, 13h27
  2. Réponses: 2
    Dernier message: 19/12/2011, 18h20
  3. macro pour ouvrir un fichier excel
    Par NEMEZISS dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/04/2009, 17h06
  4. Macro pour ouvrir un fichier excel avec des ','
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 30/05/2007, 18h08
  5. Réponses: 4
    Dernier message: 09/06/2006, 10h08

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