Changer le nom d'un onglet par macro

Pascalou333

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur ce forum; j'ai regardé rapidement si je trouvais la réponse à ma question mais n'ai rien vu. Mes excuses par avance donc si la réponse est bien sur ce forum.

Voilà mes 2 problèmes.

1. Changer le nom d'un onglet par macro
J'ai écris une petite macro qui permet de renommer trois feuilles de mon classeur Excel suivant la valeur d'une cellule dans une quatrième feuille. Par exemple, dans la 4ème feuille, je demande l'année de lancement d'un produit. En rentrant 2008, la macro va renommer la première feuille 2008, la 2nde 2009, et la 3ème 2010.

Mon problème est que si cette macro fonctionne normalement lorsque j'ouvre mon fichier et que je change l'année, elle ne fonctionne plus si je travaille sur le fichier plusieurs heures. Ainsi, si je change l'année, les 3 feuilles ne seront pas renommées et je n'ai aucun message d'erreur m'indiquant que la macro ne fonctionne pas.

Est-ce que quelqu'un a déjà rencontré un problème similaire?

2. Faire une liste de validation avec le nom des feuilles
Je voudrais créer dans chacune des 4 feuilles de ce même fichier une liste (par la fonction validation d'Excel) qui me permet d'avoir le nom de toutes les feuilles du classeur. En choisissant une feuille, je basculerai automatiquement sur cette feuille. J'ai essayé en mettant des liens hypertext, mais ca ne fonctionne pas.

Merci par avance pour vos conseils éclairés!
Pascal
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Changer le nom d'un onglet par macro

Salut Pascalou
Ta macro fonctionne seulement à l'ouverture du fichier, il faudrait que tu penses de temps en temps à la réactiver par exemple dans une procédure "Change" ecrite sur ta 4°feuille


Absent dès maintenant ; je rentre ce soir
j'espère que tu auras solutionné d'ici là
à+
 

MJ13

XLDnaute Barbatruc
Re : Changer le nom d'un onglet par macro

Bonjour Pascalou33, Phlaurant55 et le forum.

Bienvenue sur XLD.

Pascalou, il est bien sur ce forum de ne pas mélanger les questions.
Tu aurais pu ouvrir 2 discussions.

De plus avant de ne pas faire perdre du temps aux XLdiens qui pourront bien te répondre, il est de bon ton de placer un fichier de moins de 50 ko (zippé de préférence) sans données confidentielles.
Ainsi, il nous est plus facile pour comprendre le problème. Cela nous évite de refaire un fichier qui pourra être différent de ce que tu as et ce que tu veux obtenir . Enfin cela peut intéresser d'autres membres qui pourront s'en resservir le cas échéant.

Pour joindre un fichier c'est très simple, il te suffit lors de la réponse de cliquer sur Gérer les pièces jointes.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Changer le nom d'un onglet par macro

Bonjour le fil, bonjour le forum,

MJ a raison même s'il n'est pas très indulgent pour un nouveau venu... Un fichier joint eût été plus simple pour pouvoir t'aider. Je te conseille aussi vivement de lire la Lien supprimé pour avoir les bons réflexes et obtenr des réponses rapidement.

Sinon, la remarque de Laurent est très juste. Visiblement, ta macro se lance à l'ouverture du classeur (procédure Open dans le composant ThisWorkbook de Visual Basic Editor) mais après rien ne la déclenche à nouveau. L'événement Change d'un onglet permet de déclencher la macro chaque fois que tu édites quelquechose dans cet onglet.
Va dans VBE avec le raccourci [Alt]+[F11]. Clique à gauche dans le composant ThisWorkbook. Copie le code à l'intérieur de la procédure Workbook_Open (sans la première et la dernière ligne) :
Code:
Private Sub Workbook_Open()
End Sub
Clique mainteant à gauche sur le composant Worksheet de l'onglet 4, Feuil4(Feuil4) (si tu n'as pas changé le nom).
Tu cliques au dessus du curseur sur le champ (Général), tu choisis Worksheet puis tu cliques sur le champ à coté et tu choisis Change. Tu Colles le code qui te permet de renommer les onglets dans cette procédure.

Pour éviter que la procédure soit lancée à chaque édition dans l'onglet 4, tu peux rajouter une ligne de sortie en début de code. Par exemple, si la cellule dans laquelle tu édites l'années 2008 est A1 (à adapter) le code ci-dessous lancera la procédure uniquement si tu changes dans la cellule A1...

Code:
If Target.Address(0, 0) <> "A1" Then Exit Sub

Pour la validation c'est tout a fait possible mais tu ne nous renseignes pas assez. Il que que tu dises sur quels onglets et dans quelle plage de ces onglets tu veux la liste de validation.
 

Pascalou333

XLDnaute Nouveau
Re : Changer le nom d'un onglet par macro

Merci Robert.

Désolé d'avoir mis 2 questions dans le même post, ne le referrai plus :(

Pour le fichier, je ne peux pas vraiment l'envoyer tel quel car fichier utilisé dans mon entreprise avec données confidentielles.

Pour la liste de validation, voici ce que je voudrais faire:

Dans feuille 1, cellule A1, avoir une liste de validation avec les choix "Feuille 2, Feuille 3, Feuille 4". Si je choisis Feuille 2, alors la feuille 2 devient active et le curseur est par exemple en A1. De même si je suis sur la feuille 2, je peux aller en A1 et choisir dans la liste de validation "Feuille 3" et je serai redirigé vers la feuille 3.

Pascal
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Changer le nom d'un onglet par macro

Pascalou,
si tu n'as que 4 feuilles, réserve-toi ( sur chaque feuille ) une zone de 3 cellules dans lesquelles tu mettra un lien-Hypertexte qui te renverra ou tu voudras
vois le fichier joint uniquement réalisé avec liens Hypertexte
 

Pièces jointes

  • choix feuille.zip
    1.7 KB · Affichages: 321
  • choix feuille.zip
    1.7 KB · Affichages: 324
  • choix feuille.zip
    1.7 KB · Affichages: 319
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Changer le nom d'un onglet par macro

Bonjour le fil, bonjour le forum,

Avant d'utiliser la solution VBA plus bas... Clique avec le bouton droit en bas à l'extrême gauche, au niveau des noms des onglets, là où il y a les flèches. Tu as la liste des onglets qui s'affiche et tu accèdes à l'onglet désiré en cliquant dessus...

Sinon pour les fichiers lourds contenant des données confidentielles. Il suffit de crée un nouveau classeur avec juste quelques onglets et quelques donées bolobolo. De renommer les onglet de la même manière que l'original. Enfin, de ne laisser que la partie qui nous permettrait de t'aider tout en travaillant sur une base réelle et réaliste. Tu zippe et tu envoies. Ça demande un petit effort de ta part mais ça nous évite d'avoir à imaginer tes besoins.

La solution VBA... Attention j'utilise certaines cellules de la dernière colonne (IV). J'espère qu'elles sont disponibles.

Il faut modifier et/ou ajouter du code à trois niveaux, Change(onglet), Change(classeur) et module.

Pour créer un module. Dans VBE menu Insertion/Module.
Copie la macro ci-dessous dans ce module :

Code:
Sub v_onglets()
Dim s As Worksheet 'déclare la variable s
Dim x As Integer 'déclare la variable x
Dim y As Integer 'déclare la variable y
 
For Each s In Sheets 'boucle sur tous les onglets (par onglet)
 
    ' création de la liste des onglets sans celui actif
    y = 1 'definit la variable y
    s.Range("IV1").CurrentRegion.Delete 'efface les anciennes valeur
    s.Range("A1").Clear 'efface la validation et le contenu de A1
 
    For x = 1 To Sheets.Count 'boucle sur tous les onglets (par index)
        'Condition : si le nom de l'onglet est différent du nom de l'onglet indexé
        If s.Name <> Sheets(x).Name Then
            s.Cells(y, 256).Value = Sheets(x).Name 'place le nom de l'onglet dans la dernière colonne
            y = y + 1 'redéfinit la variable y
        End If 'fin de la condition
    Next x 'prochain onglet (par index) de la liste
 
    s.Range("IV1").CurrentRegion.Name = "Valid" & s.Index 'nomme la plage de la dernère colonne
 
    ' Création de la validation de données en A1
    With s.Range("A1").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Valid" & s.Index
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
 
Next s 'prochain onglet de la liste
 
End Sub

Il te faudra intégrer cette macro dans ta procédure Change (de l'onglet Feuil4). Avant le End Sub de ta macro événementielle, rajoute la ligne ci-dessous :
Code:
Call v_onglets

et pour finir il te faut rajouter la macro ci-dessous au composant ThisWorkbook :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer 'déclare la variable i (Index)
If Target.Address <> "$A$1" Then Exit Sub 'si l'adresse est différente de A1, sort de la procédure
i = Sh.Index 'définit la variavle i
On Error GoTo fin 'gestion ds erreurs va l'étiquette "fin"
Sheets(Target.Value).Activate 'active l'onglet indiqué en A1
Sheets(i).Range("A1").ClearContents 'efface l'option choisie
fin:
End Sub

Évidemment je ne peux pas tester avec ton classeur. J'ai testé chez moi ça fonctionne. Il te faudra peut-être adapter (d'ou les conseils plus haut)...

Édition :

Ooops Laurent on s'est croisés... Bonsoir.
 

Pascalou333

XLDnaute Nouveau
Re : Changer le nom d'un onglet par macro

Pas de souci pour le message "hard". Y'a des regles, c'est ma faute si je ne les respecte pas.

Pour le changement du nom des onglets, ca fonctionne impeccable en mettant l'evenement Change dans la feuille qui a l'annee. Merci beaucoup!

Pascal
 

Discussions similaires

Réponses
8
Affichages
386
Réponses
26
Affichages
379

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel