Nom onglet = CELL "A6"

T

Tapsoba

Guest
Salut à tous le Forum


Par une recherche sur le Forum XLD j'ai trouvé un fichier qui apporte en partie une solution à mon problème. J'ai essayé de faire des modifications dans code vba mais sans succès. Je suis nul en vba. A lors merci de venir à mon aide.

Nom onglet = Cell "A6" . Je voudrais que le code agissent sur toutes les feuilles (actives et non actives) de mon classeur qui en contient plus d'une centaine.

L'exemple ci joint contient une macro évènementielle mais qui ne marche qu'avec la première feuille. Je voudrais que ça marche avec toutes les feuilles de mon classeur.


Merci à tous et toutes
 
E

Eric C

Guest
Bonjour le forum
Bonjour Tapsoba

Je pense que ceci est plus approprié
Private Sub Workbook_SheetSelectionChange(ByVal Sh as Object, ByVal Target As Excel.Range)
ActiveSheet.Name = ActiveSheet.Range("A6").Value
End Sub

Mais ATTENTION si les cellules A6 de tes feuilles sont vides une erreur sera générée (Normal => Active...Range("A6").Value prend la valeur inscrite dans la Cell A6 ...)

Pas mieux pour moi ...

Bon OuiKand à toutes & à tous
@ ++ Eric C
 
T

Tapsoba

Guest
Bonjour le Forum.

Eric C, je te remerci beaucoup pour ta réponse ultra-rapide.

Je n'ai pa pu la lire à temps car j'utilise ordi de mon service, donc pendant le week end je peux pas l'utiliser.

Je vais appliquer ta solution tout de suite et je tiens informé de la suite.

Encore merci.
 
T

Tapsoba

Guest
Re bonjour le forum

Eric C, j'ai mis le code que tu m'as proposé mais il marche seulement avec la feuille active. Il se peut que je l'ai pas mis à la bonne page du vba:
le module, ou le thisworkbook ?

Mes cellules "A6" sont des numéros de pièce et sont liées par une formule.
Donc tout changement de la première feuille se répercute sur les autres.

D'où l'importance que le code marche aussi avec les feuilles non actives.

Encore merci
 
E

Eric C

Guest
Bonjour le forum
Bonjour Tabsoba

Le mieux serait de joindre tout ou partie de ton fichier.
Sinon pour que le nom d'onglet change lors de l'activation de la feuille tu places ceci dans le ThisWorkBook tout comme le code que je t'avais fourni samedi.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ActiveSheet.Name = ActiveSheet.Range("A6").Value
End Sub

Bonne soirée.
@ ++ Eric C
 
B

BRUNO I

Guest
Re: Nom onglet = CELL

et la solution est :

Private Sub Workbook_Open()
On Error Resume Next
NbFeuil = ActiveWorkbook.Sheets.Count
NumFeuil = 1
For Each Item In ActiveWorkbook.Sheets
Item.Name = Sheets(NumFeuil).Range("A6").Value
NumFeuil = NumFeuil + 1
Next Item

End Sub


Y'a certainement mieux mais ...
A+
 

Pièces jointes

  • nomonglets.zip
    9.5 KB · Affichages: 20
T

Tapsoba

Guest
Re: Nom onglet = CELL

Bonjour le Forum

Bonjour Eric C et BRUNO I

Eric C, ci joint le fichier.Comme tu le dis, jai placé le code dans le Thisworkbook.Mais ça marche seulement avec la feuille active.

BRUNO, ton code est super. Avec ton code c'est seulement à l'ouverture du fichier que la marco s'exécute. Moi je voudrais que ça s'exécute à chaque changement de la valeur de la cellule A6 de toutes les feuilles. feuille actives et non actives .
Donc mon problème est toujours "vivant"


Grand merci à tous les deux et aux autres
 

Pièces jointes

  • nom_onglets2.zip
    8.7 KB · Affichages: 18
E

Eric C

Guest
Re: Nom onglet = CELL

Bonjour le forum
Bonjour Tapsoba & Bruno I

Effectivement, il faut revenir sur la cellule A6 de chaque feuille pour activer la new pagination.

J'ai donc repris la macro de Bruno (merci Bruno) pour l'intégrer à ton soucis du moment.
Donc maintenant tout fonctionne.

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
NbFeuil = ActiveWorkbook.Sheets.Count
NumFeuil = 1
For Each Item In ActiveWorkbook.Sheets
Item.Name = Sheets(NumFeuil).Range("A6").Value
NumFeuil = NumFeuil + 1
Next Item

End Sub

@ ++ Eric C
 
T

Tapsoba

Guest
Re bonjour le forum

Eric, cette fois ci c'est le bon. il marche comme je le voulais.

Encore merci à toi et à BRUNO !!
Mais comme j'aime le bon poisson je voudrais aussi apprendre à pêcher.

Je voudrais avoir des explications sur certaines lignes du code :

- On Error Resume Next (quel genre d'erreur ? en cas d'erreur il fait quoi ?)

- Nbfeuil = ActiveWorkbook.Sheet.Count ( la signification de cette ligne ?)

- Nbfeuil = 1 ( la signification de cette ligne ?)


-Item.Name = Sheets(Numfeuil).Range("A6").Value ( ici Item=feuille, sinon ?)

- Nbfeuil = Nbfeuil +1 ( la signification de cette ligne ?)

Voilà mes questions de vrai néophyte en vba.Si tu as le temps pour m'instruire, temps mieux.Sinon, laisse tomber, vous avez déjà fait l'essentiel, le temps ferra le reste.

Merci à tous et à toute. Vive le Forum XLD
 
B

BRUNO I

Guest
que de questions :

On Error Resume Next : empèchera le plantage au cas ou tu aurais 2 noms de feuilles identiques ou caractères interdits


Nbfeuil = ActiveWorkbook.Sheet.Count : Nbfeuil c'est une variable 'le nom que tu veux sauf mot cles existant dans vb, le reste ca se traduit par dans
le classeur actif comptes moi les feuilles s'il te plait

Nbfeuil = 1 :j'initialise par la première feuille

Item.Name = Sheets(Numfeuil).Range("A6").Value : effectivement item ici = feuille . j'aurais pu mettre bien autre chose

Nbfeuil = Nbfeuil +1 : je poursuis la boucle en avancant feuille à feuille

Tu sais à mon avis y'a beaucoup plus simple et plus rapide , mais suis pas un pro non plus, mais en surfant par ici , c'est fou ce qu'on apprend...On se surprend meme à n'etre pas trop mauvais.

A+ Bruno
 
T

Tapsoba

Guest
Merci pour tes réponses ultra rapides et claires, BRUNO;
ça m'a permis de coprendre le code.
Si tu trouve autre code plus simple et plus rapide, ça m'interesse;j'apprendrai un plus sur les maros évènementiels et les différentes manières de les consevoir.

Encore merci et A+
 

Discussions similaires

Statistiques des forums

Discussions
312 859
Messages
2 092 928
Membres
105 565
dernier inscrit
HervéD