VBA actualisation
Bonjour,
Au moyen de la VBA ci-dessous je nomme les différents onglets d'une feuille de calcul Excel 2007.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Range("D1")) Is Nothing Then: Exit Sub
test = Format(Range("D1"), "name")
ActiveSheet.Name = test
End Sub
Les noms qui sont ceux de la cellule D1 des feuilles 2 &...... se mettent sans problème comme nom d'onglet.
Ces mêmes noms incrits dans la cellule D1 des feuilles 2 &...... sont en fait listés dans la colonne A de la feuille 1 et ensuite reportés au moyen de la formule suivante (=Feuil1!A2) dans les feuilles 2 &.....
Le problème que je rencontre est le suivant : lorsque dans la feuille 1 je change un nom, ce même nom change dans cellule D1 de la feuille visée, comme il se doit, mais cette modification ne se répercute pas dans le nom de l'onglet.
Le fait de fermer la feuille et de la réouvrir n'y fait rien, la fonction actualisée non plus. Le seul moyen pour que le nom de l'onglet se remette en adéquation avec celui de la cellule D1 est de cliquer dans D1 et de faire entrer.
Si vous avez des propositions je me ferai un plaisir de les tester.
Merci de l'attention que vous porterez à ce message et de vos réponses
Cdlt
Salut et bienvenue sur le Forum,
Sans ton fichier, il nous reste plein d’inconnues, mais apparemment tu as-tu placé ton code dans ThisWorkBook.
Ainsi, si le code est déclenché à chaque modification d’une cellule de la feuille active, seule la modification de la cellule D1 de la feuille active sera traitée. Comme tu modifies directement une cellule quelconque de la colonne A de la Feuil1, il est normal que la modification indirecte de la cellule D1 de la Feuilxxx ne sera pas prises en compte.
En sachant si tu n’as que quelques feuilles ou une centaine, il sera plus facile de trouver une solution à ton problème. Peux-tu alors nous fournir ton fichier, quitte à y enlever les données confidentielles ?
A te relire.
Bonjour Yvouville,
Merci de ton accueil et de ta réponse.
Ci-joint fichier en question (enfin un exemple car le fichier réel est trop volumineux).
Quelques précisions. SM, SA, MS et MT sont des initiales. UU, VV. WW... sont des initiales fictives qui peuvent changer. Afin de me faciliter la tâche je ne veux pas les modifier manuellement si par cas une nouvelle personne se joint à notre équipe. Lorsque je modifier par exemple SM en SA (ou inversement) dans la feuille 1, les cellules D1 des feuilles concernées changent, ce que je souhaite, mais la modification ne se répercute pas dans le nom des onglets.
Je ne suis pas certaine de m'exprimer clairement donc si par cas tu as des questions, n'hésites surtout pas.
Cdlt
Salut Pataud,
C’est peut-être moi qui me suis mal exprimé puisque tu ne sembles pas avoir compris ce que j’ai voulu te dire.
Dans le fichier ci-joint, si tu appuies sur le bouton en place sur la Feuil1, toutes les feuilles qui ne se nomment pas Feuil1 ont leur cellule D1 qui est réactualisée afin que le nom des pages soit modifié comme tu le désires.
J’ai considéré qu’à l’exception de Feuil1, toutes les feuilles doivent être réactualisées et ont une formule en D1 qui fait référence à la Feuil1.
Ton fichier à l'air un petit peu 'tiré par les cheveux'
Amicalement.
Salut Yvouille,
Je t'accorde volontier que le fichier que je t'ai transmis est quelque peu tiré par les cheveux.
Ta solution du bouton fonctionne parfaitement mais là il va falloir me prendre par la main car je n'ai jamais utilisé de bouton.
Peux tu m'expliquer ce que tu as fait comme tu l'expliquerais à une enfant de 5 ans qui découvre excel. Et oui, nous partons de loin.
Bien à toi
Re,
Admettons que ton fichier s’appelle ‘Fichier_Pataud’.
Tu ouvres ce fichier parallèlement au fichier que je t’ai fourni. Tu tapes Alt+F11 et tu arriveras dans l’explorateur VBA (Microsoft Visual Basic for Applications).
Selon l’image ci-dessous, tu repères mon fichier ‘Classeur1_V2’, tu cliques sur le ‘Module1’, tu enfonces la touche Ctrl et en la gardant enfoncée, tu fais glisser ce module jusque sur le texte ‘Fichier_Pataud’ Tu verras alors apparaître un module 1 en dessous de ThisWorkbook dans ton fichier également. Tu peux alors refermer l’explorateur VBA.
De retour sur Excel, tu vas sur mon fichier, tu effectues un clic-droit sur le bouton, tu le copies, tu retournes sur ton fichier et tu effectues un ‘Collage spécial’ - sans modifier les options proposées - sur la Feuil1 ; feuille qui doit s’appeler absolument ainsi, autrement la macro ne fonctionnera pas sans être modifiée en conséquence.
Mais ce n’est pas fini !
Referme maintenant mon ‘Classeur1_V2’ afin d’éviter quelques problèmes et effectue un clic-droit sur le bouton nouvellement coller. Choisis l’option ‘Affecter une macro’ et double-clique sur le texte ‘Réécrire_pour_lancer_code_événementiel’ qui ne doit pas contenir l’indication du fichier devant.
Lorsque ton bouton n’est plus sélectionné, il est prêt à l’usage et ta macro avec.
En ne fournissant pas les fichiers réels, on rencontre toujours des difficultés énormes qui seraient facilement évitables
Amicalement.
Bonjour Yvouille,
Merci de ta réponse. Cela fonctionne.
J'aimerai bien te faire parvenir le fichier original car j'ai apporté des modifications qui entrainent un message d'erreur bien que la macro fonctionne, mais malheureusement il fait plus de 8Mo.
Ton aide a vraiment été très appréciée.
Bonne journée
Essaie de passer par le site C-joint http://cjoint.com/
Si ça ne passe toujours pas, est-ce que tu es certain que toutes tes feuilles sont utiles à la démonstration de ton problème ? Est-ce qu’une feuille qui ferait plus de 1 million de lignes pourrait être réduite à 100 lignes représentatives ? Sinon essaie encore de compresser ton fichier avant de le télécharger sur C-joint.
A te relire.
Voici le lien du fichier après un régime minceur.
Il n'y a plus de feuille 1. Le changement de nom se fait dans la première page en D3.
Merci
Bien à toi
Re,
Je ne reconnais plus ton fichier
Où est passé la Feuil1 ? J’ai basé une grande partie de ma macro sur le fait qu’elle existait !!
Où sont passées tes cellules (anciennement D1) de chacune des feuilles faisant référence à la Feuil1 de base ? C'était ton problème de base, non ?
S’il s’agit d’un autre fichier, peut-être vaut-il mieux ouvrir un nouveau fil avec ta nouvelle question ?
A te relire.
Il s'agit du fichier qui ne passait pas.
La feuille 1 n'existe plus car la détermination du nom se fait directement sur la première feuille du document (Ta remarque sur le côté tiré par les cheveux du document m'a fait réfléchir à une autre solution)
Ainsi sur la première feuille se trouve en D3 la case dans laquelle le nom de l'employé doit être indiqué. À partir de D3 et D4 le nom qui sera celui de l'onglet est indiqué en E1.
Mes excuses pour ces changements. Si c'est plus simple j'ouvre une autre conversation.
Cdlt
Bon, c'est bien parce que c'est toi, sinon ......
Cordialement.
Merci beaucoup!!!!!!! C'est vraiment super.
Au plaisir