Excel2007 / copier nomS onglets s/ feuille [Fermé]

Signaler
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
Bonjour à tous et ttes,

Voilà plusieurs que j'épluche les sites pour trouver la solution à mon problème ...sans vraiment de succès...

Voici mon problème. Je souhaiterais trouver un moyen pour avoir dans une colonne d'une feuille Excel la copie des noms différents onglets de ce même classeur. [ex. sur la feuil1 avoir le nom des différents feuilles de mon classeur]. J'ai trouvé sur le net et avec l'aide de mon « mentor » le moyen de copier sur une feuille le nom de l'onglet mais je ne trouve pas le moyen d'avoir sur une même feuille l'ensemble des noms de différents feuilles de on classeur (pour l'écrire autrement, je pourrais dire que je cherche à référencer sur une seule feuille l'ensemble des noms de feuilles que j'ai dans mon classeur).

Si quelqu'un pouvait m'indiquer vers ou chercher cela m'aiderait bcp...

Ma seconde question découle de la première (et ne pourra être réalisable que s'il y une solution pour mon premier problème). Je cherche à savoir comment je pourrais référencer dans une colonne d'une feuille de mon classeur toutes les feuilles dont le nom commence par pfp_

Merci de me donner vos idées et pistes de solution...je ne demande pas (nécessairement) une solution toute faite mais une piste..(j'imagine d'ailleurs que je devrais passer par une vba) qui puisse m'aider...

Les habitués du site qui me connaissent savent que je ne suis pas une « lumière » en matière d'Excel et de vba mais...je m'essaie et j'apprends....

Salutation à tous et ttes et vous souhaite une très bonne journée,

Berni///

16 réponses

Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonjour gbinforme,

J'espère que vous allez bien. Un tt grand merci d'avoir pris du temps pour me répondre et de me proposer des solutions.

Afin de m'assurer de la bonne compréhension des choses (vs me connaissez, je suis pas un champion du monde.. :-)) , je me permets de vous soumettre quelques questions :

Si je comprends bien, sur le ficher proposé il y 4 possibilités différentes de répondre à ma question.

Soit par fonction personnelle (1)
Soit par formule sur chaque feuille (2)
Soit par Morefunc et NOMFEUILLE (3)
Soit par fonction Excel4 (4)

Correct ?

Si je comprends bien, les deux options les plus « intéressante » dans mon cas son la (1) et la (4)

Un des objectifs étant d'avoir une colonne uniquement avec les feuilles qui commencent par pfp_ dois-je comprends que les propositions (1) et (4) ne pourront fonctionner mais qu'il faudrait alors choisir la proposition (3) ou la (1) et (4) pourrait aller ?

En h2, vous avez placé la formule : =STXT(CELLULE("nomfichier");TROUVE("[";CELLULE("nomfichier"))+1;TROUVE(".";CELLULE("nomfichier"))-TROUVE("[";CELLULE("nomfichier"))-1) qui sert à enregistrer le nom du fichier sur la feuille mais dans le cas présent, quel autre fonction a-t-elle ?

J'avoue que je dois encore tester et comprendre un certain nombre de chose car, il y des choses que je découvre comme par ex. la formule =ALEA()*0&TRANSPOSE(LIRE.CLASSEUR(1))
J'avoue pas bien la comprendre mais surtout ou la placer..Mais je vais trouver...

Par contre, j'ai observer (pour les propositions (1) et (4) que si je supprime une feuille, elle n'apparaît plus dans la liste (ce qui est normal..) mais si je crée une nouvelle feuille, elle n'apparaît pas « spontanément » dans le liste des feuilles....

J'ai encore bcp de chose à comprendre...j'y retourne...je vous tiens au courant de l'évolution de ma compréhension...(avant noël c'est promis.. :-)

Bon début de journée à vous,

Cdlmnt,

Berni///
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58146 internautes nous ont dit merci ce mois-ci

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour benji71,

En h2, ... quel autre fonction a-t-elle ?

Aucune ce n'est qu'un exemple de ces possibilités.

elle n'apparaît pas « spontanément » dans le liste des feuilles....

Ceci est dû au fait que l'ajout d'une feuille ne déclenche pas le calcul mais si tu fais F9 elle apparait.

Un des objectifs ... uniquement ... les feuilles qui commencent par pfp_ dois-je comprends que les propositions (1) et (4) ne pourront fonctionner

Au contraire :
- dans la (1) il te suffit de faire cette modification (en gras) dans la fonction qui est dans le module :
    If Err.Number = 0 And Left(nom, 4) = "pfp_" Then

- dans la (4) il te suffit de faire cette modification (en gras) dans la formule :
=SIERREUR(STXT(INDEX(onglets;LIGNE()-1);CHERCHE("]pfp_";INDEX(onglets;LIGNE()-1))+1;30);"")

Cette possibilité est fournie par des macros présentes dans excel4 (nous sommes au 12 !) et qui ont été un peu occultées depuis. C'est Éric (que je salue au passage) qui a retrouvé cette possibilité cachée : merci à sa perspicacité.

Apparemment ce sont les solutions les plus appropriées et donc tu es devant un choix cornélien : soit Éric soit moi. Nous sommes suspendus à ton choix pour savoir qui va toucher les royalties. ;-) ^_^
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
"tu es devant un choix cornélien : soit Éric soit moi. Nous sommes suspendus à ton choix pour savoir qui va toucher les royalties. ;-) ^_^ " MDR....HELP....vous êtes dur...comment choisir...? Eric, gbinforme, gbinforme, Eric....ai-je droit à un appel à un ami ?

avant de choisir comme vous le dite...(je déteste devoir choisir...et en plus si l'un de vous deux est succeptible...je suis bon pour ramer pdt 20 ans pour lui faire oublier le choix.. :-)))) j'ai un clavier qui est rétissant et lorsque je clic sur le f9, il se passe....que dalle...(cest un vieux clavier)...

pour aider au choix quelle solution semble la plus facile à réaliser ou à mettre en place..?

je réflechi et vous dit quoi...assez vite...faut encore que j'essaie de les transposer sur le fichier de travail..

un gd merci à vous deux...

bonne nuite ou bon debut de journée...

cdlmnt,

berni///
Messages postés
23429
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 août 2020
6 293
Bonsoir tout le monde,

Si tu as déjà du vba dans ton classeur ou que tu as déjà pratiqué un peu, le plus simple et le plus souple est la fonction personnalisée en vba.

Pour info, =ALEA()*0& n'a aucun rôle dans la fabrication du résultat. Elle sert seulement à rendre la formule volatile car alea() est une fonction volatile.
Une fonction volatile est recalculée à chaque fois, même si aucun de ses antécédent est modifié. Donc le renommage d'une feuille provoque la mise à jour du résultat (pas la création malheureusement).
Pour mettre à jour cette formule en cas de création de feuille il faut revalider la fonction. Le plus simple est de sélectionner la 1ère formule et faire un double clic sur la poignée de recopie.

Au passage gb, dans le choix 4 tu as inclus une fonction de morefunction. C'est tentant quand on l'a sous la main, mais le classeur n'est plus totalement autonome... ;-)

eric
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
Bonsoir Éric,

Tout à fait d'accord avec toi, c'est ce que je voulais dire par "le classeur est difficilement échangeable" avec morefunction.

Ce problème de liste onglet est difficilement soluble sans macro car excel 2007/2010 oblige à sauver en xlsm si tu mets une fonction excel4.

Bonne nuit à tous : moi je vais dormir !
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonsoir eriiic, bsr gbinforme,

merci à tous les deux pour votre post...je vais me pencher et essayer de comprendre et refaire par moi même vos propsitions...ça craind un peu mais..

"Si tu as déjà du vba dans ton classeur" oui
"ou que tu as déjà pratiqué un peu" je suis pas tres à l'aise avec le vba mais avec les bonnes volontés de ce forum et l'aide précieuse de certains d'entre vous...peut-être vais-je avancer.. ;-)

si je comprends bien c'est la formule n°1 qui est la meilleur option...avec comme seule inconvéniant de devoir tirer la formule vers le bas pour qu'elle prenne en compte une nouvelle feuille..correct ? pour contourner ce problème, ne pourrais je pas trouver une formule en boucle qui une fois que je quitte la feuille reactualise celle-ci ?

si j'opte pour la première formule...pouvez-vous m'indiquer si vous avez placer la macro en perso.xls ou ds le module du classeur...?

encore un tt grand merci à tous les deux pour votre aide...

tres cdlmnt,

berni///
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour benji71,

Une proposition peut-être plus conforme à ce que tu attends si tu as déjà du code VBA.

1 dans la feuille où tu veux ta liste, tu nommes la première cellule de la liste par exemple "d_onglets" mais tu choisis ce que tu veux comme nom à condition de mettre le même dans le paragraphe suivant.

2 tu copies le module suivant dans la feuille de code de ta feuille concernée.

Private Sub Worksheet_Activate()
Const pos = "d_onglets" ' cellule nommée où commence la liste
Dim lig As Long, feu As Integer
lig = Range(pos).Row
For feu = 1 To Sheets.Count
    If Left(Sheets(feu).Name, 4) = "pfp_" Then  ' sélection des onglets à afficher
        Cells(lig, Range(pos).Column).Value = Sheets(feu).Name
        lig = lig + 1
    End If
Next feu
End Sub

Si tu crées une nouvelle feuille (commençant par "pfp_") ou si tu modifies le nom, elle s'affichera automatiquement lorsque tu activeras la feuille où tu veux ta liste.
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonsoir/bonjour gbinforme,

Permettez-moi de commencer ce post par vous remercier pour le votre. Je l'ai essayé et il me donne bcp de plaisir (c'est comme ça avec les amateurs ils sont vite émerveillé ;-)

Je vous répond un peu tardivement..mais je plaide coupable d'avoir un peu profiter du beau temps... :-)

Comme dit plus haut, j'ai essayé ce que vous proposez et je me permets de solliciter vos compétence pour vous soumettre mes questions / interrogations (bien entendu pas d'obligation de répondre mais. C'est vrai que cela m'aiderait) :

1) Lorsque vous écrivez « tu nommes la première cellule de la liste »cela doit-il être nécessairement la cellule a1 ?

2) J'observe que si j'efface une feuille celle-ci reste dans la liste, jusqu'à la création d'une autre feuille...pensez-vous qu' soit possible que la feuille supprimée n'apparaisse plus dans la liste ?

3) Une fois la liste existante, je souhaiterais pouvoir la combinée à liste déroulante qui fasse que je puisse afficher la feuille sectionnée. Pensez-vous que cela puisse être possible ? [j'ai dans l'idée de mettre une macro [merci vaucluse] sur chaque feuille pfp_ qui fasse en sorte que lorsque je n'ai plus besoin de cette feuille, je clic sur un bouton et elle se masque]

4) A titre d'info, si dans la colonne A, je met la liste avec les noms de feuilles qui commence par pfp, et que je souhaite mettre dans une autre colonne la liste de toutes les feuilles du classeur...j'imagine que je dois copier la macro que vous proposer mais en y modifiant qq chose..serait-ce la ligne « If Left(Sheets(feu).Name, 4) = "pfp_" Then ' sélection des onglets à afficher » ?

5) Dernier question et je vous prie d'excuser le détail à ce point, pensez-vous qu'il soit possible que la liste des feuille pfp_ se mette dans un ordre alphabétique ?

Un tt grand merci du complément d'info et je me permets de poster le fichier sur lequel, j'ai fais mes essais...https://www.cjoint.com/?3CzxqawKzSA

Tres bonne journée à vous

Cdlmnt,

Berni//
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour benji71,

coupable d'avoir un peu profiter du beau temps...
moi aussi, alors c'est très bien de voir revenir le soleil !

1) n'importe quelle cellule

2) bien sûr : c'est corrigé

3) j'ai même utilisé ton nom de liste mais je l'ai nommée avec "décaler" pour qu'elle soit dynamique : tu peux la "couper" et la coller où tu veux.
Si tu sélectionnes une feuille elle s'affiche automatiquement : ai-je compris ?

4) je t'ai modifié la macro pour qu'elle fasse ce que tu souhaites et en utilisant la plage des listes c'est plus simple. Si les listes te servent avant tout au choix déroulant tu peux même masquer les colonnes.

5) oui c'est trié.

Ton classeur à découvrir avec plein de feuilles à supprimer :

https://www.cjoint.com/?BCAjnMUMESu

Toujours zen
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonsoir/bonjour cher gbinforme,

merci à vous d'avoir accepter de repondre à mon complement d'information.
j'espere que vous allez bien.
j'ai pris le temps de regarder ce que vous proposez et je suis ravi....si vous me le permettez, je voudrais vous demander encore deux trois petites choses :

1) comme je dois faire sur le dossier original, ce que vous avez fait sur le fichier d'essai...avez vous un conseil pour que j'évite de faire des conneris dans la retranscription des données ?

2) toutes les macros partent bien de la feuille pfp_bd...? je dois donc juste les copier et les remplacer sur la feuille d'origine....correct ?

3) en f1 de la feuille pfp_aa, j'ai une liste deroulante...je n'ai pas compris sont "utilité"...elle n'affiche rien...et ne masque rien...si ?

4) si mes feuilles sont masqués et que j'essai de les voir en passant par le menu déroulant de la feuille pfp_bd...elle n'apparraissent pas...correct ? est-il possible de modififer cette donne ?

je vais donc comme annoncé plus haut essayer de trasnposer les élements dans le classeur original...je croise les doigts pour que tt se passe bien..


merci pour votre aide....tres bon début de journée...

cdlmnt,

berni///
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour

1)avez vous un conseil

Bien définir les 2 positions de liste avec la fonction decaler qui permet d'avoir des listes variables et tu peux changer les noms à condition de mettre les mêmes sur les 2 lignes en tête de macro.

2) C'est tout à fait exact : il n'y en avait qu'une mais avec tes 2 listes j'ai scindé et rajouté la gestion de la navigation sur feuille choisie.

3) en f1 de la feuille pfp_aa, j'ai une liste deroulante... : c'est une feuille que j'ai créée par copie d'où la liste qui n'a aucune utilité ce n'était que le "plein de feuilles à supprimer" de mon message !

4) si mes feuilles sont masqués

Dans ce cas tu rajoutes la ligne en gras :

If val = "=" & pfp Or val = "=" & feu Then
    Sheets(sel.Text).Visible = True
    Sheets(sel.Text).Activate       ' affiche feuille choisie

je croise les doigts

Pas trop tout de même car sinon c'est difficile de trouver les bonnes touches ;-)
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
bonjour gbinforme,

j'espere que vous allez bien. me revoici après plus de deux jours..où, je dois bnien l'avouer, je crois avoir pris des cheveux blancs... :-)

j'ai cherché à transposer de fichier essai au fichier définitif le dispositif mis en place..et j'y suis presque arrivé...

les deux derniers choses qui me posent problème sont :

- j'ai appris que si j'essai de modifier les trois lettres pfp passant de minuscule à majuscule cela coince..la macro remet en minuscule. c'est en tt cas, ce que j'ai decouvert à partir de la ligne macro :

If val = "=" & pfp Or val = "=" & feu Then

qui refuse de changer les trois lettre en majuscule....cela dit pas grave, j'ai renommé mes feuille avec des lettre en minuscule...

par contre j'ai un problème d'affichage de la feuille selectionné via le menu deroulant.
en fait , je crois que le problème doit se situer dans la partie de macro ci-dessous car le menu deroulant se trouve sur une autre feuille que la feuille nommé pfp_bd.
je n'ai donc pas sur la même feuille, le nom des onglets et le menu deroulant.
j'imagine donc que le problème se situe là. pouvez-vous m'aider à contourner le problème ?

Private Sub Worksheet_Change(ByVal sel As Range)
If sel.Count > 1 Then Exit Sub
Dim val As Variant
On Error GoTo fin
val = sel.Validation.Formula1 ' validation liste ?
If val = "=" & pfp Or val = "=" & feu Then
Sheets(sel.Text).Visible = True
Sheets(sel.Text).Activate ' affiche feuille choisie
End If
fin:
End Sub


pour le reste tt semble aller.. :-)

merci de votre eclairage et de vos propositions de résolution pr mon problème.

je vous souhaite un bon début de journée..

cdlmnt,

berni//
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour,

j'ai appris que si j'essai de modifier les trois lettres pfp passant de minuscule à majuscule cela coince..

Ce n'est pas tout à fait exact. Tu as en début de code les constantes qui définissent le noms de tes listes et je les ai appelées "pfp" et "feu" et donc la ligne que tu veux modifier en majuscule n'a rien à voir avec ce que tu veux faire. Par contre comme ma définition des constantes était en début de code elle s'appliquait à toutes les macros.

Comme tu as scindé sur deux feuilles, il te faut répéter la définition des constantes sur les deux feuilles ou les mettre dans un module.

https://www.cjoint.com/?BCDjfdLGVf3

Tu vois que pour passer tes feuilles en majuscule il suffit de modifier la sélection :

    Call creer_listes(pfp, "PFP_*") ' création liste pfp
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonjour cher gbinforme,

CA MARCHE ! :-)

Suis vraiment content...vraiment merci pour vos eclairages et votre aide....

il ne me reste plus qu'a trouver et mettre sur chaque feuille pfp un bouton la masquer et lorque je l'afficherais, je n'aurais qu'a cliquer sur un bouton et elle se masquera et me fera revenir sur le feuille PFP_bd...

MERCI A VOUS....ca fait plaisir...

cdlmnt,


berni///
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
Bonjour benji71

il ne me reste plus qu'a trouver et mettre sur chaque feuille pfp un bouton la masquer

Je te propose ceci, avec un bouton dynamique qui se crée automatiquement sur chaque feuille activée.

Le clic sur le bouton renvoie sur la feuille que tu as choisie.

Tout le code est regroupé dans thisworkbook, avec en-tête le nom de la feuille retour à adapter.

https://www.cjoint.com/?BCEkwh2w0Im

Bon test.
Messages postés
738
Date d'inscription
samedi 22 mars 2008
Statut
Membre
Dernière intervention
4 janvier 2015
22
Bonjour gbinforme,

permettez-moi de commencer ce post par vous remercier pour le votre.
votre propostion à retenu mon intérêt et j'ai "chercher" à comprendre les lignes de la macro mais..j'avoue être un peu juste...

j'ai essayé la proposition mais...il y un tout peit "bugg" qui est indépendant de votre volonté..c'est que sur je fichier originel, il y d'autres feuilles qui sont notemment le fruit de fusion entre feuilles [vs allez encore me dire que je parle chinois... :-)]
tout ça pour dire que lorsque je change le nom de la macro pour mettre le nom d'une feuille de retour...cela pose un problème sur une autre feuille...[difficile de mieux faire pour me faire comprendre..il faudrait que je vous envoie le fichier]...

mais pour faire court, j'ai dans mon classeur plusieurs feuilles. parmei celles-ci j'ai uen feuille menu, j'aiune feuille nommé bd_mcae et une feuille nommée pfp_bd.
cette dernière étant le point de départ d'autre feuille comme celle nommée pfp_cal et qui la feuille original que je copie pour faire le calcul pour chaque famille [une feuille pfp_cal renommée au non de chaque famille..d'ou la liste deroulante]

pour faire bref...j'ai trouvé une solution...enfin "j'ai" c'est pas tout à fait vrai...car dans le passé, vaucluse avait trouvé une macro qui est :

Sub RETOURmenu()
Application.ScreenUpdating = False
ActiveSheet.Visible = False
Sheets("MENU").Select

Range("A1:J33").Select
Range("C8").Select
Selection.Copy
Application.CutCopyMode = False
End Sub

et que j'ai repris pour en faire :

Sub RETOURpfpbd()
Application.ScreenUpdating = False
ActiveSheet.Visible = False
Sheets("MENU").Select

Range("A1:J33").Select
Range("C8").Select
Selection.Copy
Application.CutCopyMode = False
End Sub

je pensais coller une forme sur la feuille nomme pfp_cal et lui associé la macro.
ce qui a pour effet que si je clic sur ke bouton la feuille se feme et je me retrouve sur la feuille pfp_bd. qu'en pensez-vous ?

j'aime bcp votre propostion et si vous me le permettez je la garde en mémoire pour plus tard..

j'avais un question à propos de la "regénérance" de la liste qui sert de menu déroulant. je m'explique. lorsque je crée une nouvelle feuille et que je la nomme [ex. pfp_gb]...j'observe que si je veux la sélectionner dans la liste deroulante, je dois d'abord passé par la feuille liste afin qu'elle soit prise en compte pour pouvoir ensuite pouvoir la choisir sur la liste deroulante...c'est comme si, il fallait passer par la feuille liste pour que la nouvelle feuille soit intégrer dans la liste des feuilles.[vous me suivez ? ;-)]

considérant que la feuille est masquée, y a-t-il un moyen pour obliger la macro qui prends en compte les feuilles à refaire la mise au point sans que je doive passer par la feuille liste ?

merci de votre eclairage....et si jamais je n'etait pas parvenu à me faire comprendre...[ce qui est fort probable :-)] je peux remettre le fichier sur le forum.

merci à vous...

tres bon début de journée..

berni///
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour berni,

tout ça pour dire que lorsque je change le nom de la macro pour mettre le nom d'une feuille de retour...

Il ne faut pas changer "le nom de la macro", surtout pas, il faut changer le libellé entre les guillemets du nom de la feuille retour : "pfp_bd" par "MENU" en l'occurrence.

J'avouerai que le reste du message ne me parait pas bien clair et je n'ai pas compris grand chose : ce serait peut-être plus compréhensible avec le classeur. Si tu ne peut pas le mettre sur le forum, tu peut me mettre le lien en message personnel et je regarderai.

Pour ta macro que tu nous donnes, en mettant simplement ceci tu obtiens le même résultat plus rapidement :

Sub RETOURpfpbd()
ActiveSheet.Visible = False
Sheets("MENU").Activate
End Sub 
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 112
bonjour,

Voici un exemple de classeur qui te permet de choisir entre 4 possibilités :

https://www.cjoint.com/?BCvjnQalque