XL 2016 Récupérer le nom du dossier ou est stocké le classeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

AxelViens

XLDnaute Nouveau
Bonjour,

Je souhaiterais récupérer dans une cellule le nom du dossier ou est stocké mon classeur.

Ex :

C://User/xxx/Dossier1/Sous-Dossier1/Fichier.xlsx --> Sous-Dossier1
C://User/xxx/Dossier1/Sous-Dossier2/Sous-sous-Dossier21/Fichier.xlsx --> Sous-sous-Dossier21

J'ai essayé beaucoup de formule trouvé sur internet , mais aucune ne fonctionne chez moi ..

Si vous avez des idées..
 
Solution
Je me suis trompé dans le code (trop vite et pas réfléchi).
Celui-ci devrait couvrir tous les cas:
- Pas de Path
- Path limité au Drive Windows
- Path Windows
- Path Réseau
VB:
Option Explicit

Sub a()
    MsgBox Dossier
End Sub

Function Dossier() As String
    Dim TSpl() As String
    
    'Fichier non encore enregistré
    If Len(ThisWorkbook.Path) = 0 Then
        Dossier = "N/A"
        Exit Function
    End If
    
    'Séparateur Windows "\"
    If InStr(ThisWorkbook.Path, "\") > 0 Then
        TSpl = Split(ThisWorkbook.Path, "\")
    End If
    
    'Séparateur Réseau "/"
    If InStr(ThisWorkbook.Path, "/") > 0 Then
        TSpl = Split(ThisWorkbook.Path, "/")
    End If
    
    If Not (Not TSpl) Then
        Dossier =...
OK, probablement une histoire de "/" vs "\"
VB:
Option Explicit

Sub a()
    MsgBox Dossier
End Sub

Function Dossier() As String
    Dim TSpl() As String
   
    TSpl = Split(ThisWorkbook.Path, "\")
   
    If UBound(TSpl) = -1 Then
        TSpl = Split(ThisWorkbook.Path, "/")
    End If
   
    If UBound(TSpl) = -1 Then
        Dossier = "N/A"
    Else
        Dossier = TSpl(UBound(TSpl))
    End If
End Function

Edit: En cellule écrire: =Dossier()
 
Dernière édition:
OK, probablement une histoire de "/" vs "\"
VB:
Option Explicit

Sub a()
    MsgBox Dossier
End Sub

Function Dossier() As String
    Dim TSpl() As String
  
    TSpl = Split(ThisWorkbook.Path, "\")
  
    If UBound(TSpl) = -1 Then
        TSpl = Split(ThisWorkbook.Path, "/")
    End If
  
    If UBound(TSpl) = -1 Then
        Dossier = "N/A"
    Else
        Dossier = TSpl(UBound(TSpl))
    End If
End Function

Edit: En cellule écrire: =Dossier()

Cela me renvoi toujours l'adresse en entière quand il est sur le cloud .. :/
 
Je me suis trompé dans le code (trop vite et pas réfléchi).
Celui-ci devrait couvrir tous les cas:
- Pas de Path
- Path limité au Drive Windows
- Path Windows
- Path Réseau
VB:
Option Explicit

Sub a()
    MsgBox Dossier
End Sub

Function Dossier() As String
    Dim TSpl() As String
    
    'Fichier non encore enregistré
    If Len(ThisWorkbook.Path) = 0 Then
        Dossier = "N/A"
        Exit Function
    End If
    
    'Séparateur Windows "\"
    If InStr(ThisWorkbook.Path, "\") > 0 Then
        TSpl = Split(ThisWorkbook.Path, "\")
    End If
    
    'Séparateur Réseau "/"
    If InStr(ThisWorkbook.Path, "/") > 0 Then
        TSpl = Split(ThisWorkbook.Path, "/")
    End If
    
    If Not (Not TSpl) Then
        Dossier = TSpl(UBound(TSpl))
    Else
        Dossier = ThisWorkbook.Path
    End If
End Function
 
Bonjour,

Pour info le dossier c'est User, tous les autres sont des sous-dossiers.
Ah ben non, tous les autres ne sont pas des sous-dossiers !
Si un sous-dossier n'est pas un dossier, alors un sous-sous-dossier n'est pas un sous-dossier, etc.
😅


Sinon, je propose ça, basé sur #4 de Dranreb :
VB:
Sub test()
    MsgBox "Ce classeur est dans le dossier """ & Dossier & """"
End Sub

Function Dossier() As String
Dim TSpl() As String
    TSpl = Split(Replace(ThisWorkbook.Path, "\", "/"), "/")
    Dossier = TSpl(UBound(TSpl))
End Function
 
Dernière édition:
C'est vrai qu'un Replace raccourcit bien le code.
VB:
Function Dossier() As String
    Dim TSpl() As String
    
    'Fichier non encore enregistré
    If Len(ThisWorkbook.Path) = 0 Then
        Dossier = "N/A"
        
    'Fichier avec Path Windows ou Réseau
    Else
        TSpl = Split(Replace(ThisWorkbook.Path, "\", "/"), "/")
        Dossier = TSpl(UBound(TSpl))
    End If
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour