Nom de la feuille automatique par rapport à une cellule [Résolu]

Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention - 1 août 2017 à 10:08 - Dernière réponse : Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention
- 4 août 2017 à 16:57
Bonjour à tous,

J'ai un fichier annuel qui contient autant de feuille que de semaine dans l'année, soit 52.
Vu que ce fichier est réactualisé chaque année. On modifie seulement le n° de semaine de la première feuille et ensuite les n° de semaine des autres feuilles font +1 automatiquement. (Pour éviter de réécrire manuellement chaque n° de semaine)

J'aimerai une macro qui permet de prendre le numéro de la semaine inscrit en C1 de chaque feuille et qui renomme l'onglet comme tel.

Pour l'instant j'ai cette macro que j'ai trouvé sur un autre forum :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1")) Is Nothing Then
ActiveSheet.Name = Format(Range("C1"), "00")
End If
End Sub

Cependant, le nom de l'onglet ne se met pas automatiquement quand la valeur en C1 est changée. Il faut que je clique en C1 de chaque feuille et faire "entrer" pour que ça change le nom de l'onglet.
Étant donné que j'ai 52 feuilles, c'est assez contraignant...

Je pense qu'il faut juste adapter la macro, mais je débute en VBA et je n'y arrive pas.

J'espère avoir bien expliquer mon problème pour que vous puissiez trouver la solution.

Merci d'avance pour votre aide !



Afficher la suite 

14 réponses

Répondre au sujet
0
Utile
13
Bonjour Liitch,

Fichier Excel 2007 : https://mon-partage.fr/f/g4NMpjlz/

Il y a 15 feuilles de "01" à "15" ; sur la 1ère feuille, saisis en C1 :

  2 => "02" à "16"
  3 => "03" à "17"
45 => "45" à "52", puis "01" à "07"

⚠  En C1 de la 1ère feuille du classeur, tu dois saisir un nombre,
sinon la macro plante ; tu dois saisir un nombre entre 1 et 52 ;
ça ne vérifie pas si ton nombre est correct.

Alt F11 pour voir la macro, puis revenir sur Excel.

-----------------------------------------

Dans ton vrai classeur :

⚠  Si ta 1ère feuille se nomme "01" (par exemple), la formule en C1 de la
feuille "02" ne doit pas être ='01'!C1+1 mais : =MOD('01'!C1;52)+1

Formule en C1 de la feuille "03" : =MOD('02'!C1;52)+1
Formule en C1 de la feuille "04" : =MOD('03'!C1;52)+1
Formule en C1 de la feuille "05" : =MOD('04'!C1;52)+1

etc...

Ce code VBA est à mettre dans le code de la 1ère feuille du classeur :


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim FX As Byte, k As Byte
  If Target.Address = "$C$1" Then
    Application.ScreenUpdating = False: k = Worksheets.Count
    For FX = 1 To k: Worksheets(FX).Name = "T" & FX: Next FX
    For FX = 1 To k
      Worksheets(FX).Name = Format(Worksheets(FX).[C1], "00")
    Next FX
  End If
End Sub


Ça renomme en 2 temps pour éviter l'erreur de renommage
d'une feuille par une autre déjà existante.

Merci de me donner ton avis.

Cordialement
 
Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention - 4 août 2017 à 11:05
Valentin,

Pour le message d'erreur concernant les liaisons, c'est normal. J'ai utilisé la formule RECHERCHEV, la matrice est dans un autre fichier.

Ah d'accord ! C'était donc ça !!
C'est vrai que j'y avais pas pensé.

Effectivement c'est beaucoup plus pratique , je n'aurai pas à copier coller et changer le nom de la feuille précédente..!

Tout marche comme je le souhaitais ! C'est super !
Par contre, je dois toujours recliquer sur C1 de la première feuille pour que ça renomme l'ensemble des feuilles. Mais c'est peut-être ma version d'Excel ou alors quelque chose à changer dans les Options Excel.
Mais si ce n 'est que ça, ça ne me dérange pas.

En tout cas merci beaucoup pour ton aide et ta patience ! :)
valentin > Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention - 4 août 2017 à 15:30
 
Merci d'avoir passé le sujet en résolu.  ;)

Tu as écris : « Par contre, je dois toujours recliquer sur C1 de la première feuille
pour que ça renomme l'ensemble des feuilles. Mais c'est peut-être ma version
d'Excel ou alors quelque chose à changer dans les Options Excel. »

Je viens de comprendre ce que tu voulais dire, et c'est un fonctionnement
tout à fait normal de VBA (pour toutes les versions d'Excel) : une macro
Worksheet_SelectionChange() n'est exécutée que depuis la feuille où elle
se trouve ; dans le cas présent, cette macro étant placée sur la page de
code de la 1ère feuille, elle ne s'exécute que depuis cette 1ère feuille,
et depuis aucune des autres.

C'est donc inutile que tu perdes du temps à chercher dans les options,
ou à chercher sur d'autres versions.

----------------------------------------------------

En fait, tu aurais aimé renommer toutes les feuilles depuis n'importe quelle
feuille, et pas seulement depuis la 1ère, c'est bien ça ?

Exemple pour le C1 de la feuille 4 : il y avait déjà 6 et tu mets 8 => ça renomme
toutes les feuilles à droite à partir de "09", et aussi toutes les feuilles à gauche,
de "01" à "03" ; mais dans ce cas, en utilisant le même "mécanisme" qu'avant,
il faut mettre la même sub Worksheet_SelectionChange() sur la page de code
de chacune des 52 feuilles ! c'est possible, très long à faire et fastidieux, mais
j'en ai quand même pris le temps  ;)

Fichier Excel 2007 : https://mon-partage.fr/f/46f2EVZ0/

Plutôt que de copier les codes VBA dans les 52 feuilles de ton vrai classeur,
ce sera peut-être plus rapide de copier tes données dans celui-ci ...  mais  ⚠ :
n'oublie pas de remettre la liaison sur ton autre fichier et ce qui s'y rapporte).

Pour ton 1er essai, va sur la feuille 4 et entre 48 en C1 ; puis fais plusieurs
autres essais ; merci de me donner ton avis, et de me dire si ça a marché.
 
Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention > valentin - 4 août 2017 à 15:57
Je t'en prie ! :)

Je suis désolée, tu m'as mal comprise ou je me suis mal exprimée !

Je ne veux pas changer le n° de la semaine de n'importe quelle feuille.
Seulement la première vu que je change le n° de la semaine chaque année.
Après avec ta macro ou même avec la formule MOD qu'il y avait avant, toutes les cellules en C1 de toutes les feuilles suivaient le n° de semaine inscrit en C1 de la 1ère feuille.

Concrètement quand je prend le fichier vierge :

- Je change le n° de semaine de la première feuille seulement. Si j'écris, par exemple, 39 à la place de 40.
Et que je ne fais rien de plus, mes feuilles resteront nommée "40", "41", "42", etc...

- Il faut que je sélectionne tout simplement C1 (là où j'ai écris 39), sans rien modifier au contenu de la cellule. Et à ce moment là, mes feuilles se renommeront "39", "40", "41", etc...

Ce que je voulais dire, c'est qu'il ne suffit pas que je change juste le n° de semaine en C1 pour que ça renomme les feuilles, il faut que je clique sur cette même cellule pour que toutes les feuilles se renomment.

Mais comme je le disais dans mon post précédent, si il faut juste que je sélectionne la cellule après avoir modifier le n° de semaine pour que ça renomme les feuilles, ça ne me dérange pas du tout ! :)
valentin > Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention - 4 août 2017 à 16:52
 
C'est moi qui ai mal compris ta demande, mais je ne regrette pas d'avoir fait
le long travail dont je t'ai parlé : c'était un exercice très intéressant à faire !  ;)

Je viens de comprendre d'où vient ton problème, et finalement, c'est toi qui
avais raison, la solution est bien dans une option d'Excel :

Fichier, Options Excel, Options avancées ; à droite, dans les options d'édition,
décoche la 1ère case pour avoir ceci :

☐  Déplacer la sélection après validation
« Sens : Bas » va devenir grisé : c'est normal ;
clique sur le bouton OK.

Désormais, quand tu saisis une donnée dans une cellule et que tu fais Entrée,
ça reste sur la même cellule (=> ton renommage par C1 sera ok) ; c'est plus
pratique quand ça reste sur la même cellule pour modifier la couleur ou autre,
et si tu as besoin de descendre à la cellule en dessous : ↓ au lieu de Entrée.

Donc si ça ne marchait pas, c'est parce que sitôt après avoir validé ta saisie,
c'est la cellule du dessous, C2 qui devenait la cellule active, et la macro est
faite pour se déclencher si la cellule active est C1.

Qu'en dis-tu ?  ;)  je crois que cette fois ton sujet est vraiment résolu !  ;P
 
Liitch 66 Messages postés lundi 15 juin 2015Date d'inscription 4 août 2017 Dernière intervention - 4 août 2017 à 16:57
Contente et rassurée que ce malentendu t'ai profité !

Effectivement !

Maintenant, tout fonctionnement parfaitement et comme je l'avais imaginé ! :D

Exactement, c'est officiel, ce sujet est 100% résolu.

Merci à toi ! :)
Commenter la réponse de valentin