Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Macro ouvrir un fichier avec nom variable

Alex6942

XLDnaute Nouveau
Bonjour,

Je souhaiterai à partir d'un fichier excel (nommé "A") , ouvrir un autre fichier présent dans un dossier spécifique.
Cependant il faudrait ouvrir le dernier fichier crée, qui commence à chaque fois par "Bon de cmd" suivi de la date et heure d'extraction et qui ensuite finit par "client.xlsx"

Ce qui donne une liste similaire (avec le fichier que l'on veut ouvrir en gras, correspondant au dernier fichier) dans mon explorateur, classé alphabétiquement:

Bon de cmd 02/04/2021 06h00 client.xlsx
Bon de cmd 04/05/2021 15h00 client.xlsx
Bon de cmd 08/03/2021 12h00 client.xlsx
Bon de cmd 15/02/2021 19h00 client.xlsx

Une fois le fichier "bon de cmd" ouvert , il faudrait copier le tableau présent dans l'onglet "Notes" qui commence en cellule A1 et le copier sur mon fichier excel "A" dans un onglet nommé "Coller" et ensuite refermer le fichier "bon de cmd".

Si vous avez des idées.

Cordialement,
 
Solution
Hello herve62
Qu'à cela ne tienne
VB:
Sub copie()
    Dim chemin$, Fichier$, Dt$, LeFichier$
    Sheets("Coller").Cells.Clear
    chemin = "D:\Mes documents\toto\"    ' A adapter
    Fichier = Dir(chemin)
    Do While Fichier <> ""
        If UCase(Left(Fichier, 10)) = "BON...

Jacky67

XLDnaute Barbatruc
Bonjour,
Le code pourrait ressembler à ceci
Les onglets "Notes " des fichiers source et onglet "Coller" du fichier destination doivent exister. Le chemin est à adapter
VB:
Sub copie()
    Dim chemin$, Fichier$, Dt As Date, LeFichier$
    Sheets("Coller").Cells.Clear
    chemin = "D:\Mes documents\toto\" ' A adapter
    Fichier = Dir(chemin)
    Do While Fichier <> ""
        If UCase(Left(Fichier, 10)) = "BON DE CMD" And Fichier <> ThisWorkbook.Name Then
            If FileDateTime(chemin & Fichier) > Dt Then
                Dt = FileDateTime(chemin & Fichier)
                LeFichier = Fichier
            End If
        End If
        Fichier = Dir
    Loop
    Application.EnableEvents = False
    Workbooks.Open Filename:=chemin & LeFichier
    Sheets("Notes").UsedRange.Copy ThisWorkbook.Sheets("Coller").[a1]
    ActiveWorkbook.Close False
    Application.EnableEvents = True
End Sub
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
@Jacky67 : je suis dessus depuis hier et je pense que tu n'as pas bien lu l'énoncé ? car dans ton code je ne vois pas la référence à son codage de nom de fichier pour ses dates ??
Pour lui ce n'est pas la date d'enregistrement mais celle la création de l'extraction des données qu'il met dans le nom du fichier et là c'est moins évident sauf dans le cas ou sa structure correspond à mon code
tu peux voir que je prends le 13:31 et pas le 15:09

@Alex6942
Déjà n'a tu pas lu dans la charte qu'il fallait joindre un fichier ?? nous ne sommes pas des Devins !!

Sinon , primo règle de WIndows : le caractère "/" est interdit dans le nom d'un fichier

Donc en 1er changer le format des noms ;Pour mes essais ( mon repertoire en image ) j'ai fait par exemple: "bon de cmd 03-05-2021 16h30.xlsx" > on ne peut pas nommer un fichier avec 16:30 non plus d'ou le traitement nécessaire car j'extrais ta date et heure et traite comme telle pour la plus récente (max)
Ci joint la 1ère partie , pour le reste , euh.....??????
Une fois le fichier "bon de cmd" ouvert , il faudrait copier le tableau présent dans l'onglet "Notes"
Tableau .....????? > Moi c'est Hervé ....PAS ..JOSEPHINE ANGE GARDIEN ; Déjà que ta demande n'était pas évidente
 

Pièces jointes

  • convdate.xlsm
    46.5 KB · Affichages: 20

Jacky67

XLDnaute Barbatruc
Hello herve62
Qu'à cela ne tienne
VB:
Sub copie()
    Dim chemin$, Fichier$, Dt$, LeFichier$
    Sheets("Coller").Cells.Clear
    chemin = "D:\Mes documents\toto\"    ' A adapter
    Fichier = Dir(chemin)
    Do While Fichier <> ""
        If UCase(Left(Fichier, 10)) = "BON DE CMD" And Fichier <> ThisWorkbook.Name Then
            If IsNumeric(Mid(Fichier, 18, 4) & Mid(Fichier, 15, 2) & Mid(Fichier, 12, 2) & Replace(Mid(Fichier, 23, 5), "h", "")) Then
                If Mid(Fichier, 18, 4) & Mid(Fichier, 15, 2) & Mid(Fichier, 12, 2) & Replace(Mid(Fichier, 23, 5), "h", "") > Dt Then
                    Dt = Mid(Fichier, 18, 4) & Mid(Fichier, 15, 2) & Mid(Fichier, 12, 2) & Replace(Mid(Fichier, 23, 5), "h", "")
                    LeFichier = Fichier
                End If
            End If
        End If
        Fichier = Dir
    Loop
    Application.EnableEvents = False
    Workbooks.Open Filename:=chemin & LeFichier
    Sheets("Notes").UsedRange.Copy ThisWorkbook.Sheets("Coller").[a1]
    ActiveWorkbook.Close False
    Application.EnableEvents = True
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
ok pourquoi faire simple quand on peut faire compliqué ???
déjà moi là , abrupte je patauge ... t'imagine notre Zig ??? ( j'essaye de me mettre à son niveau pour qu'il comprenne ; mais bon déjà faudrait qu'il réponde
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…