Récupérer le nom du fichier Excel

Bonjour tout le monde,

J'espère que vous vous portez bien et votre confinement se passe plutôt bien.

Alors, concernant ce sujet, je souhaite rajouter un bout de code à ma macro pour récupérer le nom du fichier où je l'exécute. Cela est possible ?

J'ai 2 fichiers excel : un qui contient la macro et le deuxième où exécute la macro, son nom change à chaque fois.

La macro existante récupère le nom du premier fichier original, mais moi j'aimerais plutôt récupérer le nom du deuxième, celui où on l'exécute.

Merci pour votre aide !!

Bonjour,

x = ActiveWorkbook.Name

Bonsoir,

Je n'ai pas réussi malheureusement. Merci,

Voilà mon code vba :

Option Explicit
Public critere%

Sub dispatcher()
Dim Tbl As Variant, data As Variant, i As Long
Dim dico1 As Object, cle1 As Variant, result1 As Variant
Dim wb As Excel.Workbook
Dim MonRepertoire, Repertoire As FileDialog, racine As String
Dim colonne$

    critere = 1 ' colonne A

    racine = Split(ThisWorkbook.Name, ".")(0)

    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    Application.FileDialog(msoFileDialogFolderPicker).Title = "Choix du répertoire de stockage des fichiers générés"
    Repertoire.Show
    If Repertoire.SelectedItems.Count = 0 Then Exit Sub
    MonRepertoire = Repertoire.SelectedItems(1)

    Dim c As Range
    Set c = Rows(1).Find("Colonne*")
    If Not c Is Nothing Then
        data = Range(Cells(1, 1), Cells(Range("A1").End(xlDown).Row, Rows(1).Find("Colonne*").Column))
    Else
        data = Cells(1, 1).CurrentRegion
    End If

    Set dico1 = CreateObject("Scripting.Dictionary")
    For i = LBound(data) + 1 To UBound(data) ' hors en-tête
        dico1(data(i, critere)) = ""
    Next

    Application.ScreenUpdating = False
    For Each cle1 In dico1.Keys
        result1 = filtreArray(data, critere, cle1)
        Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & "Model.xlsx")
        wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(result1, 1), UBound(result1, 2)) = result1
        If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\" & racine & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\" & racine & "_" & Cells(2, 7) & ".xlsx")
        End If
        wb.Close
        Set wb = Nothing
    Next
    Application.ScreenUpdating = True

    MsgBox "Terminé, fichiers sauvegardés sous """ & MonRepertoire & "\" & """ !"
End Sub

le fichier que tu enregistres sous... (racine & "_" & cle1 & ".xlsx") ?

Plutôt sous :

(MonRepertoire & "\" & racine & "_" & cle1 & ".xlsx")
  If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\" & racine & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\" & racine & "_" & Cells(2, 7) & ".xlsx")

avant l'enregistrement sous le nom du fichier est "Model.xlsx"

voir ligne:

Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & "Model.xlsx")

après l'enregistre sous

NouveauNom = wb.name

ça me colle toujours le nom du fichier initial (entouré en bleu).

Moi je veux celui du fichier où on exécute la macro qui change à fois (entouré en rouge).

Merci,

capture

@Bofala ...

là je vois 2 changements : la date et la version ... il faut changer les 2 ?

tu peux toujours mettre :

wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & FORMAT(Date,"yyyymmdd") & "_Vx" & "_" & Cells(2, 7) & ".xlsx")

mais je ne sais pas ce que vaut x pour la version !

En fait, la macro doit simplement prendre le nom du fichier où on exécute la macro tel qu'il est et le mettre dans la partie entouré dans l'image.

Dans cet exemple c'est : SUIVI_ETAORG_20200420_V3

Ce nom n'est pas standard. Sur ce fichier, nous avons une date du 20200420, mais sur un autre, tu as une autre. Le principe est de juste copier coller le nom sur les noms des 18 fichiers générés grâce à la macro.

Image en PJ : résultat avec ton bout de code que j'ai rajouté.

Merci de votre aide,

capture1
  If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & FORMAT(Date,"yyyymmdd") & "_V3" & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & FORMAT(Date,"yyyymmdd") & "_V3" & "_" & Cells(2, 7) & ".xlsx")

ou bien

  If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_20200420_V3" & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_20200420_V3" & "_" & Cells(2, 7) & ".xlsx")

comme tu le demandes mais je te rappelle que nous ne sommes pas le 20 avril d'une part et que cette date est mise en dur dans la macro, elle ne variera plus !

Bonjour bofala,

slt Steelson

@ bofala

Pour répondre à la question de ce fil «Récupérer le nom du fichier excel » spécifier nom précédent.

il faudrait surement créer une liste sur le fichier (contenant la macro)

C’est-à-dire une liste des fichiers qui ont été enregistrés pour te donner la possibilité de récupérer le nom du fichier précédent.

Je vois une liste (autant de colonnes qu’il y a eu de variables pour créer le nom du fichier)

cette liste pourrait être créer suite à l'enregistrement du fichier (ajout de code dans cette condition)

        
x = 1
If Not cle1 Like "750*" Then
    wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & Format(Date, "yyyymmdd") & "_V" & x & "_" & cle1 & ".xlsx")
    'ajout des variables du fichier sauvegardé à la liste
Else
    wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & Format(Date, "yyyymmdd") & "_V" & x & "_" & Cells(2, 7) & ".xlsx")
     'ajout des variables du fichier sauvegardé à la liste
End If
 

si cette solution te convient,

on pourras regarder la façon de récupérer le nom du fichier selon la définition que tu donne à "fichier précédent".

Bonjour à tous !

J'ai essayés vos propositions, ça ne marche pas.

Isabelle, je te laisse un lien du fichier de la macro et le fichier à exécuter (excuse-moi pour le volume du fichier) :

J'ai l'impression qu'on complique la vie là, ma demande est touuuuut simplement de copier coller le nom du fichier où on exécute la macro, je répète COPIER-COLLER tout le nom du fichier. La macro existante fait déjà le boulot en récupérant le nom du fichier original et le colle au début du nom des 18 fichiers générés, il faudra juste remplacer par le nom du fichier où on exécute qui varie.

Je ne sais pas si j'explique bien.. Dites-moi ?

Au pire des cas, je le ferai manuellement. Mais avec la macro, c'est mieux.

  If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & FORMAT(Date,"yyyymmdd") & "_V3" & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_" & FORMAT(Date,"yyyymmdd") & "_V3" & "_" & Cells(2, 7) & ".xlsx")

ou bien

  If Not cle1 Like "750*" Then
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_20200420_V3" & "_" & cle1 & ".xlsx")
        Else
            wb.SaveAs (MonRepertoire & "\SUIVI_ETAORG_20200420_V3" & "_" & Cells(2, 7) & ".xlsx")

comme tu le demandes mais je te rappelle que nous ne sommes pas le 20 avril d'une part et que cette date est mise en dur dans la macro, elle ne variera plus !

Salut Steelson, ça va ?

Je pense que tu n'as pas compris ma demande. Là, tu mets en dur la version et le nom du fichier.

Ce nom du fichier varie, moi je veux le récupérer (ou copier-coller). Il n'est pas fixe.

Ce nom du fichier varie, moi je veux le récupérer (ou copier-coller). Il n'est pas fixe.

Il est noté où ce nom ?

Elle est notée où la version ?

Mais tu as une solution toute faite ... tu recopies le fichier source et tu lui donnes le nom final t la version finale que tu veux voir apparaître sur les fichiers générés.

J'espère qu'Isabelle pourra t'aider ...

Bonjour,

Ta solution me semble adéquate. Je voulais que ça soit fait avec la macro, mais je vais modifier manuellement à chaque fois le nom du fichier original avec le nom souhaité. J'ai testé et ça marche.

Je mets quand même le sujet comme résolu.

Rechercher des sujets similaires à "recuperer nom fichier"