modif du moment d'activation macro

charette63

XLDnaute Occasionnel
bonjour,

j'ai une macro qui change le nom de l'onglet de la feuille suivant la valeur d'une cellule.
Cette valeur est liée à une données qui provient d'une autre feuille du classeur.
Elle s'active lorsque je clic sur cet onglet (evenement "Worksheet Activate).

la macro:

Code:
Sub Worksheet_Activate()
Activesheet.Name = Range("e2").Value
End Sub

y-a-t-il moyen d'activer cette macro directement au changement de la valeur sans devoir ouvrir la feuille qui va "changer" de nom. Autrement dit, y-a-t-il moyen que le nom de l'onglet change avant d'ourir la feuille.

Merci
 

charette63

XLDnaute Occasionnel
Bonjour Staple1600, merci de m'aider,

je viens de faire le test, le fonctionnement est identique qu'avec mon code, il faut que je "clic" sur l'onglet pour qu'il change de nom.
Par contre, je remarque une petite chose que je n'ai pas signalé, j'ai une feuille nommée "récapitulatif" (feuil32) qui ne doit pas être modifiée, donc un bout de code qui excluerais la "Feuil32" de la macro serais le bienvenu
autre chose peut-être?

cordialement

Thierry
 

JNP

XLDnaute Barbatruc
Re : modif du moment d'activation macro

Bonjour le fil :),
A tester dans ThisWorkbook
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Feuille As Worksheet
For Each Feuille In ThisWorkbook.Worksheets
    If Feuille.Name <> "Récapitulatif" Then
        If Feuille.Name <> Feuille.Range("E2") Then Feuille.Name = Feuille.Range("E2")
    End If
Next
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address <> "$E$2" Then Exit Sub
Sh.Name = Target
End Sub
Bon dimanche :cool:
 

Staple1600

XLDnaute Barbatruc
Re : modif du moment d'activation macro

Re, re JNP

Cela semble logique non ?
il faut que je "clic" sur l'onglet pour qu'il change de nom.
Puisque le code se trouve la procédure :Sub Workbook_SheetActivate
Elle fonctionne donc quand on active une feuille ! (clic sur l'onglet)

L'avantage de passer par ThisWorkBook
C'est que tu peux supprimer le code présent chaque feuille.
Code:
Sub Worksheet_Activate() ' a effacer si code dans ThisWorkBook
Activesheet.Name = Range("e2").Value
End Sub
 

JNP

XLDnaute Barbatruc
Re : Re: modif du moment d'activation macro

Re :),
eh ben non, toujours le même topo, il faut ouvrir la feuille pour que le nom de l'onglet change
Non, plus subtil que ça, il faut ouvrir une feuille pour que le nom de tous les onglets changent ou changer E2 pour que l'onglet change :rolleyes:...
Maintenant, à moins que tes E2 dépendent d'un autre fichier, logiquement, tes onglets auront toujours été renommés avant la fermeture du fichier :p...
Sinon, tu peux ajouter
Code:
Private Sub Workbook_Open()
Dim Feuille As Worksheet
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name <> "Récapitulatif" Then
If Feuille.Name <> Feuille.Range("E2") Then Feuille.Name = Feuille.Range("E2")
End If
Next
End Sub
Après, si c'est autre chose qui influe sur la valeur de E2, il faudrait savoir quoi pour activer l'évènement en conséquense :rolleyes:...
Bon dimanche :cool:
 

charette63

XLDnaute Occasionnel
avec ton dernier code, j'ai un message d'erreur: "erreur de compilation- nom ambigu detecté- Workbook_open" (peut-etre est-ce parce que j'ai déjà un workbook_open?) auto réponse, oui, ça doit etre la cause, j'ai "reuni mes deux workbook_open et je n'ai plus de message d'erreur, mais le problème reste le même.

j'explique le fonctionnement de mon classeur:

une premiere feuille récapitulative sur laquelle j'ai les noms des employés, suivi de leurs statuts, et d'autres renseignements.
X autres feuilles specifique à chaque employé, la cellule "E2" reprend le nom de l'employé par liaison sur ma feuille "récapitulatif", et cette cellule gére le nom de l'onglet. J'ai plusieurs classeurs de ce type suivant la catégorie de personnel et ils sont suseptibles de passer d'un tableau à un autre. Avec les macros actuelles, si un employé change de tableau le nom de l'onglet ne changera que lorsque j'ouvrirai sa feuille perso (chose qui n'est pas forcement necessaire de suite). Le problème est qu'il n'y a pas que deux ou trois employés et que la necessité d'ouvrir leur feuille perso n'est pas forcement immediate, alors je rame un peu pour le(s) retrouver puisque l'onglet n'est pas (encore) à leur nom.

voilà, j'espere que mon explication est claire

cordialement

Thierry
 

JNP

XLDnaute Barbatruc
Re : modif du moment d'activation macro

Re :),
C'est bien ce que je disais, ça dépends de la cause :p...
En admettant que le nom soit en colonne B (à adapter), uniquement dans le code de Récapitulatif
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
Dim Feuille As Worksheet
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name <> "Récapitulatif" Then
If Feuille.Name <> Feuille.Range("E2") Then Feuille.Name = Feuille.Range("E2")
End If
Next
End Sub
Du coup, toute modification de la colonne B se traduira par la modification du nom de l'onglet correspondant :rolleyes:...
Bon dimanche :cool:
 

charette63

XLDnaute Occasionnel
eh bien, il m'eut étonné qu'il n'y pas de "mais"

la feuille "recapitulatif" de ce premier classeur gere également un listing d'un second classeur. Je m'empresse donc de modifier le dernier code de JNP et de l'adapter. Les noms renseignés dans mon second classeur se place dans son listing via une liaison. Il semblerais que la macro ne "lise" pas le resultat de la cellule mais bien la formule (donc qui ne change pas), y a-t-il un moyen d'y remedier?

Merci
 

JNP

XLDnaute Barbatruc
Re : modif du moment d'activation macro

Re :),
Techniquement, non :eek:...
Une événementielle doit tenir compte d'un événement, le changement d'un autre classeur n'est pas un événement quantifiable dans le classeur actif :rolleyes: ...
Maintenant, reste à définir ce qui pourrait définir la nouvelle affectation des onglets ;)...
Bon courage :cool:
 

Discussions similaires

Réponses
2
Affichages
267
Réponses
2
Affichages
320
Réponses
7
Affichages
370

Statistiques des forums

Discussions
312 321
Messages
2 087 232
Membres
103 497
dernier inscrit
JP9231