(VBA) Nommer feuille automatiquement d'après nom de fichier

Iwana

XLDnaute Nouveau
Bonjour à tous,

J'ai parcouru le forum à la recherche d'une solution, sans succès.

Ma macro permet d'importer un fichier texte et d'afficher les données dans un nouvel onglet.
Quel code dois-je insérer pour qu'à chaque import de fichier la nouvelle feuille créée prenne le nom du fichier importé ?

Exemple : nom de fichier "pifpafpouf.txt"
Je souhaite que l'onglet prenne ce nom.

Merci d'avance ! :)

Iwana
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Voici :

Code:
Sub importfichier()

    Dim S_wk As Workbook, D_wk As Workbook, pc$
    Set D_wk = ThisWorkbook
    Application.ScreenUpdating = False
    
    ' Ouverture d'une boîte de dialogue pour sélectionner le fichier texte à traiter
    Fichier = Application.GetOpenFilename("Text file (*.txt), *.txt")
        If Fichier <> False Then
        Set S_wk = Workbooks.Open(Fichier)
    
            With S_wk
                With .ActiveSheet.UsedRange
                    pc = .Cells(1, 1).Address
                    .Copy
                End With
                Set D_wk = ThisWorkbook
                D_wk.Sheets("Tableau").Range(pc).PasteSpecial xlValues
        Application.CutCopyMode = False
                .Close False
            End With
        End If
        D_wk.Sheets("Tableau").Range("A1").Select
    Application.ScreenUpdating = True

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Bonjour,

regarde ceci, à adapter à ton projet :
Code:
Dim f As String
f = Application.GetOpenFilename("Text file (*.txt), *.txt")
ActiveSheet.Name = Split(Mid(f, InStrRev(f, "\") + 1), ".")(0)

bon après midi
@+
 

Pierrot93

XLDnaute Barbatruc
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Re,

si risque qu'il ait des points dans le nom du fichier ...
Code:
ActiveSheet.Name = Mid(f, InStrRev(f, "\") + 1, Len(Mid(f, InStrRev(f, "\") + 1)) - 4)
pour extension .txt
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Merci Pierrot93 pour ton aide.
Cependant, je ne vois pas à quel endroit (par rapport au code que j'ai cité précédemment) je dois caser cette ligne de code :
Code:
ActiveSheet.Name = Split(Mid(f, InStrRev(f, "\") + 1), ".")(0)
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

J'ai une feuille Accueil sur laquelle il y a un bouton qui permet de lancer mes macros à la suite.
J'ai deux macros : une qui ouvre et importe les données; une deuxième qui met en forme.
La feuille Accueil ne doit pas bouger ni être altérée. L'idée c'est d'envoyer les données sur une feuille nouvellement créée, et nommer cette feuille en fonction du nom du fichier dont on a extrait les données.
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Mais justement ce n'est pas la feuille active que je veux renommer.
Quand j'utilise ce code, ça me colle mes données sur la page Accueil et ça enchaîne la macro 2 sur cette même page.
Alors que ce processus là doit se faire sur une page qui est créée au moment de l'import des données.
Je ne sais pas si je suis très claire:eek:
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Précédemment, j'avais créé une mini macro qui, avant même de permettre à l'utilisateur de sélectionner le fichier voulu, vérifait l'existence d'une feuille nommée "TEST", si la feuille existait déjà elle était supprimée puis une nouvelle feuille "TEST" était créée, et si elle n'existait pas, une nouvelle "TEST" était de toute façon créée.

J'ai créé une macro qui appelle mes 3 macros, pour les enchaîner.
Donc dans l'ordre, il y a la vérification/création de la feuille "TEST", puis ouverture de la boite de dialogue pour choisir le fichier, puis mise en forme.

Du coup j'ai viré la première macro de verification/creation de feuille puisque ça ne s'applique plus, et là je bloque car je ne trouve pas la bonne manip pour soumettre la création de la nouvelle page associée au bout de code que tu m'as donné et qui permet de nommer la feuille.
 

Pierrot93

XLDnaute Barbatruc
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Re,

pour ajouter une feuille et la renommer :
Code:
Dim wb As Workbook, ws As Worksheet

Set wb = ThisWorkbook
Set ws = wb.Worksheets.Add(after:=wb.Worksheets(wb.Worksheets.Count))
ws.Name = Mid(f, InStrRev(f, "\") + 1, Len(Mid(f, InStrRev(f, "\") + 1)) - 4)
 

Iwana

XLDnaute Nouveau
Re : (VBA) Nommer feuille automatiquement d'après nom de fichier

Re-re-re-re[...]re :D

Ca bloque sur la ligne suivante :
Code:
ws.Name = Mid(f, InStrRev(f, "\") + 1, Len(Mid(f, InStrRev(f, "\") + 1)) - 4)

Erreur d'exécution '5' : aurgument ou appel de procédure incorrect.

Je me demande si ce n'est pas le 'f' qui pose problème. Je l'ai pourtant bien déclaré comme tu me l'as dit.
Voici ce que ça donne :
Code:
 Dim S_wk As Workbook, D_wk As Workbook, pc$
    Dim f As String
    Dim ws As Worksheet
    Set D_wk = ThisWorkbook
    Application.ScreenUpdating = False
    
    
    ' Ouverture d'une boîte de dialogue pour sélectionner le fichier texte à traiter
    Fichier = Application.GetOpenFilename("Text file (*.txt), *.txt")
       If Fichier <> False Then
                Set S_wk = Workbooks.Open(Fichier)
                With S_wk
                    With .ActiveSheet.UsedRange
                        pc = .Cells(1, 1).Address
                        .Copy
                    End With
                    
                    Set S_wk = ThisWorkbook
                    Set ws = S_wk.Worksheets.Add(after:=S_wk.Worksheets(S_wk.Worksheets.Count))
                    ws.Name = Mid(f, InStrRev(f, "\") + 1, Len(Mid(f, InStrRev(f, "\") + 1)) - 4)
                    
                    Set D_wk = ThisWorkbook
                    D_wk.ActiveSheet.Range(pc).PasteSpecial xlValues
                    Application.CutCopyMode = False
                    .Close False
                End With
            End If
        
        On Error Resume Next
        'Erreur d'ouverture
        If Err <> 0 Then Exit Sub
        
        D_wk.ActiveSheet.Range("A1").Select
    Application.ScreenUpdating = True

J'ai l'impression d'abuser des tes connaissances Pierrot93 alors vraiment merci pour ton aide parce que je patauge royalement !

EDIT : J'ai oublié de préciser que ça bug mais pourtant ça m'ouvre mes données dans un nouveau classeur et la feuille porte le nom du fichier (donc ça, ça fonctionne).
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia