Nom de la feuille automatique par rapport à une cellule

Résolu/Fermé
Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022 - 1 août 2017 à 10:08
Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022 - 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 !



1 réponse

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
 
1
Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022
Modifié le 1 août 2017 à 15:33
Bonjour valentin,

Merci pour ta réponse !

Ca fonctionne mais quand je change le premier n° de semaine et que je re-clique dessus pour que les onglets se renomment (le 2e temps que tu as mentionné). Une fenêtre s'ouvre et marque :
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet

Avec comme possibilité de cliquer sur "Fin", "Débogage" et "Aide"

Quand je clique sur "Débogage", ça m'ouvre la fenêtre pour visualiser le code et une partie du code est surlignée en jaune :

Worksheets(FX).Name = Format(Worksheets(FX).[C1], "00")
0
valentin > Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022
1 août 2017 à 15:55
 
Non, quand j'ai écris : « Ça renomme en 2 temps », c'est seulement parce que
dans le code VBA, il y a d'abord la ligne #8 : ça renomme avec "T" devant
(j'ai choisi "T" car c'est l'initiale de "Temporaire") ; ceci est le 1er renommage ;
ensuite le 2ème renommage est fait par la ligne #10.

Sur la 1ère feuille de ton classeur Excel, il faut juste entrer en C1 un nombre
entre 1 et 56 ; dès que tu fais Entrée, c'est ok : tu n'as pas besoin de faire un
double-clic sur le nombre !  ;)

Merci de me dire si après ces nouvelles infos, ton problème est réglé ;
si oui, merci de passer le sujet en résolu ; sinon, à te lire.
 
0
Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022
Modifié le 1 août 2017 à 16:14
D'accord pour les 2 temps, je n'avais pas bien compris !

Par contre, quand je rentre un nombre entre 1 et 52 en C1 dans la 1ère feuille du classeur et que je fais Entrée. Ca ne renomme pas directement l'ensemble des onglets.
Il faut que je clique (1 seul clic pas un double-clic) pour que ça actualise les noms des onglets.
Et quand je clique sur C1, là ça m'ouvre un message d'erreur avec écrit :
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet

Avec comme possibilité de cliquer sur "Fin", "Débogage" et "Aide"

Et quand je clique sur "Débogage", là je remarque que la ligne de code :

 Worksheets(FX).Name = Format(Worksheets(FX).[C1], "00")
est surlignée en jaune

Alors peut être que le fait d'avoir une macro avant change quelque chose ?
Parce que du coup ça me donne ça avec mes deux macros :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
temp = Array("ü", "")
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
With Target
p = Application.Match(Target, temp, 0)
If Not IsError(p) Then
If p = UBound(temp) + 1 Then p = 0
Else
p = 0
End If
Target = temp(p)
Cancel = True
End With
End If
End Sub

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


Mais sinon ça marche, c'est juste le message d'erreur qui s'affiche, donc il doit y avoir un petit problème quelque part, non ?
0
valentin > Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022
1 août 2017 à 17:46
 
Sur mon fichier Excel, après avoir saisi un nombre en C1 et validé par Entrée,
ça renomme aussitôt l'ensemble des onglets ; sur ce même fichier Excel que
j'ai transmis dans mon message de 12:31, ça ne le fait pas ?

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

Dans ton vrai fichier, tu as bien mis mon code uniquement à l'emplacement
du code de la 1ère feuille, n'est-ce pas ? tu ne dois pas le faire pour toutes
les feuilles du classeur.

Alt F11 ; côté gauche et en haut, juste sous la ligne "Microsoft Excel Objets",
clique sur la 1ère feuille que tu vois, puis fais Entrée => ça ouvre à droite
la bonne page : c'est là que tu dois placer ma macro, et seulement là =>
si tu l'as mis ailleurs, il faut l'enlever !

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

Ce que j'ai fait est indépendant de Worksheet_BeforeDoubleClick()
mais regarde ta ligne temp = Array("ü", "") ; on dirait qu'il manque
un caractère ! cette sub est pour un double-clic en colonne B ;
ma sub est pour un changement en C1.

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

Qu'une macro soit placée avant une autre ou après n'a pas d'incidence
sur l'exécution du code : même résultat ; mais personnellement, si une
sub A() est appelée par une sub B(), je préfère mettre A() avant B().

D'autre part, regarde ta ligne isolée entre tes deux macros :
Option Explicit doit être tout en haut du module => en haut
de ta page.
 
0
Liitch Messages postés 74 Date d'inscription lundi 15 juin 2015 Statut Membre Dernière intervention 3 novembre 2022
2 août 2017 à 09:16
Non plus, même sur le fichier Excel que tu m'as transmis. Après avoir entrer un nombre et fait Entrée. Ca ne renomme rien, c'est en recliquant sur C1 que ça renomme l'ensemble des onglets.

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

Oui, je l'ai bien mise sur une seule feuille. La première.

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

Oui je sais, c'est une macro que moi j'ai ajouté. Et non il ne manque pas de caractère c'est pour qu'on puisse "décocher" en effectuant un deuxième double-clic

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

J'ai pas compris avec tes sub A() & sub B()

Du coup j'ai fait le changement pour Option Explicit, mais ça fait exactement pareil :

- Obligé de resélectionner la cellule C1 (celle où j'ai entré un chiffre entre 1 et 52) pour renommer l'ensemble des onglets
- Message d'erreur qui s'affiche quand je sélectionne C1
- La ligne de code
Worksheets(FX).Name = Format(Worksheets(FX).[C1], "00")
est toujours surligné en jaune

Pourtant je comprends pas, j'ai fait un copier coller de ta macro...
J'ai regardé dans les options d'Excel, mais je n'ai rien trouvé qui aurait pu me bloquer.
0