Lister les noms de feuilles par formule

8 réponses
Avatar
Apitos
Bonjour,

J'aimerais créer une liste de validation de données, qui répertorie tous les noms de feuilles dans le classeur, par formule, Í  l'exception du nom de la feuille o͹ se trouve la liste de validation.

Merci.

8 réponses

Avatar
MichD
Le 17/12/21 Í  16:22, Apitos a écrit :
Bonjour,
J'aimerais créer une liste de validation de données, qui répertorie tous les noms de feuilles dans le classeur, par formule, Í  l'exception du nom de la feuille o͹ se trouve la liste de validation.
Merci.

Bonjour,
Pour trouver le nom de la feuille active Í  partir d'une formule, tu as
ceci. Cela fonctionne seulement si le fichier a été enregistré.
=STXT(CELLULE("nomfichier";A1);TROUVE("]";CELLULE("nomfichier";A1))+1;255)
Dans la formule les 2 "A1" sont utilisés pour faire référence Í  la
feuille active.
Pour obtenir le nom de la "Feuil2" en Feuil1, on pourrait écrire :
=STXT(CELLULE("nomfichier";Feuil2!A1);TROUVE("]";CELLULE("nomfichier";Feuil2!A1))+1;255)
Les 2 "A1" ont été remplacés par une cellule de la feuille : Feuil2!A1
J'avoue que ce n'est pas très génial... ;-))
En vba, c'est très simple, sans un module standard, tu copies cette
fonction. Le résultat de la fonction "SheetName" retourne un tableau (array)
Suppose que tu as 10 feuilles dans ton classeur,
A ) tu sélectionnes 10 cellules de A1 Í  A10
B ) utilise la touche F2, la cellule A1 va passer en mode édition
C ) Tu valides la formule en utilisant la combinaison des touches
Ctrl + Maj + enter.
D ) Tu vas obtenir la liste des 10 feuilles de ton classeur.
'---------------------------
Function SheetName()
Dim Sh As Worksheet, A As Long, T()
For Each Sh In Worksheets
A = A + 1
ReDim Preserve T(1 To A)
T(A) = Sh.Name
Next
SheetName = Application.Transpose(T)
End Function
'---------------------------
Une variante Í  la fonction précédente :
On écrit seulement dans une cellule
=sheetname(LIGNE(A1))
Et on peut recopier automatiquement vers le bas et
obtenir la liste de tous les noms des feuilles.
'--------------------------------
Function SheetName(X As Long)
Dim Sh As Worksheet, A As Long, T()
For Each Sh In Worksheets
A = A + 1
ReDim Preserve T(1 To A)
T(A) = Sh.Name
Next
SheetName = Application.Index(T, X)
End Function
'--------------------------------
On pourrait faire une simple petite procédure qui ferait la même chose
au lieu d'utiliser la fonction.
MichD
Avatar
MichD
J'allais oublier la fonction la plus simple :
Dans un module standard :
'-----------------------
Function SheetName(X As Long)
SheetName = Worksheets(X).Name
End Function
'-----------------------
Dans la feuille, tu inscris : =sheetname(ligne(A1)).
La formule peut être recopiée automatiquement sur une plage de cellules.
MichD
Avatar
Apitos
Bonjour MichD,
Toujours en formule, j'ai lu qu'il y a une fonction qui retourne tous les noms des feuilles du classeur, Í  savoir GET.WORKBOOK.
Peut-on l'utiliser dans notre cas ?
Merci.
Avatar
MichD
Le 18/12/21 Í  16:31, Apitos a écrit :
Bonjour MichD,
Toujours en formule, j'ai lu qu'il y a une fonction qui retourne tous les noms des feuilles du classeur, Í  savoir GET.WORKBOOK.
Peut-on l'utiliser dans notre cas ?
Merci.

Bonjour,
Cela fait référence Í  des macros xl4. À cette adresse, tu as des
explications, sur la manière de procéder. Ces commandes sont en français
si ta version d'Excel est française. Tu vas devoir ajouter une feuille
"Macro Ms Excel 4.0". Je n'ai pas d'expérience dans ces commandes.
http://www.gaboly.com/MPFE/LireClasseur1.html
Ici, tu as un vidéo sur YouTube qui décrit comment procéder :
https://www.youtube.com/watch?v=PgYyECq7trs
Ces fonctions de macro Xl 4 ne peuvent pas être utilisé directement dans
la feuille de calcul. Tu crées un "NOM" avec ces dernières.
Maintenant, tu en sais autant que moi sur ce sujet!
MichD
Avatar
MichD
Le 17/12/21 Í  16:22, Apitos a écrit :
Bonjour,
J'aimerais créer une liste de validation de données, qui répertorie tous les noms de feuilles dans le classeur, par formule, Í  l'exception du nom de la feuille o͹ se trouve la liste de validation.
Merci.

J'ai joint un fichier .doc qui te montre le langage des macros d'avant
le vba que l'on connait depuis 1997. C'est seulement un aperçu.
C'est un autre langage totalement différent. À toi maintenant de
t'amuser, tu as un examen sur ce sujet la semaine prochaine! ;-))
https://www.cjoint.com/c/KLtxtIyW0FJ
Voici une méthode qui fonctionne.
Tu crées un "NAME" Í  l'aide du menu "Formule / définir un nom"
Le nom du "NAME" : NomOnglets
utilise la formule pour ce "NAME"
=TRANSPOSE(DROITE(LIRE.CLASSEUR(1);NBCAR(LIRE.CLASSEUR(1))-TROUVE("]";
LIRE.CLASSEUR(1))))
Dans la colonne A1:A4 en supposant que tu as 4 feuilles dans ton
classeur, tu inscris les chiffres de 1 Í  4
Dans la colonne B1 tu inscris cette formule :
=INDEX(NomsOnglets;A1) que tu recopies jusqu'Í  B4
Cela devrait te donner les noms des 4 feuilles du classeur.
Une autre manière d'arriver au même résultat sans utiliser la colonne
A1:A4 . Évidemment, le "NAME" NomOnglets doit être déjÍ  défini comme
dans le premier cas.
A ) Sélectionne les 4 cellules de la plage C1:C4
B ) Enfonce la touche F2, la cellule C1 va passer en mode édition
C ) Tu saisis la formule suivante toujours en C1 =NomsOnglets
D ) Tu dois valider cette formule en utilisant la combinaison des
touches Ctrl + Maj + Enter . Le nom des feuilles devrait apparaͮtre.
Pour modifier la formule matricielle, tu dois toujours la plage C1:C4 et
passer en mode édition. Lorsque tu valides la formule, cela affecte
toutes les formules des cellules. Impossible de modifier seulement une
cellule de la plage C1:C4
Amuse-toi bien.
MichD
Avatar
MichD
Le 20/12/21 Í  10:26, MichD a écrit :
Le 17/12/21 Í  16:22, Apitos a écrit :
Bonjour,
J'aimerais créer une liste de validation de données, qui répertorie
tous les noms de feuilles dans le classeur, par formule, Í  l'exception
du nom de la feuille o͹ se trouve la liste de validation.
Merci.

Bonjour,
Si tu veux obtenir le nombre de feuilles dans le classeur :
A ) Tu crées un "NAME" : FEUILLES
B ) Tu lui associes la formule suivante :
=POSER.NOM("lesfeuilles";LIRE.CLASSEUR(1))
Et dans la cellule de ton choix, tu inscris la formule :
þUILLESS()
Cependant, si tu ajoutes des feuilles après avoir créé cette formule, tu
devras demander un nouveau calcul de la feuille pour mettre Í  jour la
formule.
MichD

Une correction orthographique, ce n'est pas
þUILLESS()
mais bien :
þUILLES()
MichD
Avatar
Apitos
Bonjour MichD,
Ci-joint un petit fichier, résumant les méthodes suggérées :
https://www.cjoint.com/c/KLywN01XCYk
:)
Avatar
MichD
Le 26/12/21 Í  16:01, Apitos a écrit :
Bonjour,
Peut-on utiliser la plage nommée "NomsOnglets" pour définir une liste de validation sans passer par une colonne intermédiaire?

Je ne crois pas. NomOnglets n'est pas une liste, mais une fonction qui
retourne une matrice des noms des feuilles.
Suppose que la liste des feuilles débute en A1,
tu définis la plage nommée de cette manière :
Nom = MaListe
Fait référence Í  ÞCALER($A$1;;;NBVAL(A:A);)
Et ta liste de validation : Liste formule :=MaLIste
VoilÍ !
MichD