Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lister les noms de feuilles par formule

3,123 views
Skip to first unread message

Apitos

unread,
Dec 17, 2021, 4:22:10 PM12/17/21
to
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.

MichD

unread,
Dec 18, 2021, 8:43:39 AM12/18/21
to
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


MichD

unread,
Dec 18, 2021, 8:52:34 AM12/18/21
to

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

Apitos

unread,
Dec 18, 2021, 4:31:38 PM12/18/21
to
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.

MichD

unread,
Dec 18, 2021, 7:48:05 PM12/18/21
to

Le 18/12/21 à 16:31, Apitos a écrit :
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

MichD

unread,
Dec 19, 2021, 6:25:45 PM12/19/21
to
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

MichD

unread,
Dec 20, 2021, 10:26:49 AM12/20/21
to
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 :
=FEUILLESS()

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

MichD

unread,
Dec 21, 2021, 9:12:29 AM12/21/21
to

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.

Pour ceux que cela intéresse, à cette adresse, un fichier PDF de plus de
600 pages sur les macros xl4.

https://d13ot9o61jdzpp.cloudfront.net/files/Excel%204.0%20Macro%20Functions%20Reference.pdf

MichD

Apitos

unread,
Dec 23, 2021, 7:07:14 PM12/23/21
to
Bonjour MichD,

Merci pour toutes ces informations et liens.

Je vais tester les formules.

MichD

unread,
Dec 23, 2021, 9:38:13 PM12/23/21
to
Le 20/12/21 à 10:26, MichD a écrit :
Une correction orthographique, ce n'est pas
=FEUILLESS()

mais bien :


=FEUILLES()

MichD

Apitos

unread,
Dec 24, 2021, 5:42:18 PM12/24/21
to
Bonjour MichD,

Ci-joint un petit fichier, résumant les méthodes suggérées :

https://www.cjoint.com/c/KLywN01XCYk

:)

Apitos

unread,
Dec 26, 2021, 4:01:33 PM12/26/21
to
Bonjour,

Peut-on utiliser la plage nommée "NomsOnglets" pour définir une liste de validation sans passer par une colonne intermédiaire?

MichD

unread,
Dec 26, 2021, 4:51:26 PM12/26/21
to
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 à =DECALER($A$1;;;NBVAL(A:A);)

Et ta liste de validation : Liste formule :=MaLIste

Voilà!

MichD
0 new messages