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

Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

  • Initiateur de la discussion Initiateur de la discussion MJ13
  • Date de début Date de début

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 !

MJ13

XLDnaute Barbatruc
Bonjour à tous

Je cherche la formule pour récupérer sur un nom de dossier en cellule A2 par exemple avec des niveaux différents de type C:\NOM1\Nomtype2\NOMtype3 à N niveaux.
Ex: si je veux 2 niveaux, j'obtiendrai: Nomtype2\NOMtype3

Si vous l'avez en VBA ou en fonction, cela m'intéresse aussi.

Merci d'avance 🙂.
 
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Salut Michel 🙂

On peut sans doute faire plus court ou en faire une fonction personnalisée, mais sur le principe, est-ce que ça ressemblerait à ça ??

VB:
Sub arbo()
nbniveaux = InputBox("entrez le nombre de niveaux")
monTablo = Split(ThisWorkbook.Path, "\")
If Not nbniveaux > UBound(monTablo) Then
    For niv = (UBound(monTablo) + 1 - nbniveaux) To UBound(monTablo)
        chem = chem & monTablo(niv) & "\"
    Next niv
chem = Mid(chem, 1, Len(chem) - 1)
End If
End Sub
 
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Bonjour

Dans un module STANDARD :

Exemple application dans une cellule
A1 : C:\toto\titi\tata En B1 = Niveau(A1;0) retourne C:
= Niveau(a1;1) retourne toto
= Niveau(a1;2) retourne titi

VB:
Function Niveau(Rg As Range, N As Integer)
Niveau = Split(Rg, "\")(N)
End Function


Une autre fonction personnalisée dans un module standard :

A1 : C:\toto\titi\tata En B1 : =Niveau(A1;0) = c:\
= Niveau(a1;1) retourne c:\toto\
= Niveau(a1;2) retourne C:\toto\titi\
...../etc...

VB:
Function Niveau(Rg As Range, N As Integer)
Dim T As Variant
T = Split(Rg, "\")
If N > UBound(T) Then N = UBound(T)
ReDim Preserve T(0 To N)
Niveau = Join(T, "\") & "\"
End Function
 
Dernière édition:
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Bonjour Modeste, MichD

Merci à vous deux 🙂.

J'ai fait ce code avec le code de Modeste en sélectionnant les cellules contenant les Chemins.

Code:
Public cell, nbniveaux
Sub arbo()
nbniveaux = InputBox("entrez le nombre de niveaux")
t1 = Timer
'monTablo = Split(ThisWorkbook.Path, "\")
For Each cell In Selection
extrait_Niveau
Next
MsgBox Timer - t1
End Sub
Sub extrait_Niveau()
Dim chem
'cell.Select
montablo = Split(cell.Value, "\")
If Not nbniveaux > UBound(montablo) Then
    For niv = (UBound(montablo) + 1 - nbniveaux) To UBound(montablo)
        chem = chem & montablo(niv) & "\"
    Next niv
chem = Mid(chem, 1, Len(chem) - 1)
cell.Offset(0, 1) = chem
End If
montablo = ""
End Sub

MichD, merci pour ton code qui pourrait m'intéresser 🙂. Par contre ce qui peux m'intéresser, c'est plus ce qu'il y a le plus à droite du chemin. C'est possible à partir de ton code 😕.
 
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Bonjour MJ13🙂, Bonjour Modeste🙂, bonjour MichD
Juste pour participer, une proposition avec des gardes fou😀. Pas certain que ça aille plus vite que Modeste.
La macro principale:
VB:
Sub arbo3()
nbniveaux = InputBox("entrez le nombre de niveaux")
t1 = Timer
For Each cell In Selection
   cell.Offset(0, 1).Value = Niveau(cell, nbniveaux)
Next
MsgBox Timer - t1
End Sub

La fonction:

VB:
Private Function Niveau(ByVal Plg As Range, ByVal Num As Long) As String
Dim T, TReport(), i&, J&
If Plg.Count > 1 Or Num < 1 Or InStr(Plg.Value, "\") = 0 Then Exit Function
T = Split(Plg.Value, "\")
If Num > UBound(T) - 1 Then Exit Function
ReDim TReport(Num - 1)
J = UBound(TReport)
For i = UBound(T) To (UBound(T) - (Num - 1)) Step -1
    TReport(J) = T(i)
    J = J - 1
Next i
Niveau = Join(TReport, "\")
End Function

Cordialement
 
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Tu peux adapter la fonction de cette manière :

VB:
Function Niveau(Rg As Range, N As Integer)
Dim T As Variant
T = Split(Rg, "\")
If N >= UBound(T) Then Niveau = "": Exit Function
ReDim Preserve T(0 To N)
Niveau = Replace(Rg, Join(T, "\") & "\", "")
End Function
 
Re : Formule ou VBA pour récupérer le niveau N d'un nom de dossier.

Re, Bonjour Efgé

Merci aussi pour ces solutions 🙂.

Je teste tout cela demain. Mais c'est très intéressant.
 
- 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

Réponses
4
Affichages
81
Réponses
250
Affichages
16 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…