OVH Cloud OVH Cloud

[VBA] Copie de feuille et valeur de propriété GroupName d'OptionButton

3 réponses
Avatar
bigorneau
Bonjour.

Problème posé :

Deux OptionButton sur une feuille Excel nommée "Modèle" ; ils sont regroupés
par leur propriété GroupName = "Modèle" (la feuille existe à l'ouverture du
classeur).

Deux manip. envisagées :
a) je crée une nouvelle feuille par recopie de la feuille "Modèle" (Edition
> Déplacer ou copier une feuille > Cocher "Créer une copie"). Elle se
nommera automatiquement "Modèle (2)".
Ou
b) en supposant qu'elle a été créée, je change le nom de ma feuille "Modèle
(2)" en "Feuille1" (Clic droit > Renommer).

Question :
Comment obtenir automatiquement la mise à jour de la propriété GroupName des
contrôles OptionButton
a) avec le nom de la nouvelle feuille,
b) avec le nouveau nom de la feuille déjà existante.

Il est facile d'accéder à la propriété des contrôles par du code associé à
un bouton. Mais quand il s'agit de détecter un changement de nom sur un
onglet, ouh lâ ! Ça fait deux soirs que je m'échine là-dessus avec VBA et
comme je ne suis pas égoïste ...

Avis aux spécialistes et autres connaisseurs.
Je retourne à mes essais ; actuellement je m'égare dans les modules de
classes ...

P.S. : voir aussi le pb posté par kalinaja le 24/10/2005 14:53

3 réponses

Avatar
LSteph
Bonsoir BigOrneau,
Si tu mets comme groupename ce que tu veux exemple: Restezgroupir
Tes boutons le conserveront indépendament du nom de la feuille
maintenant si tu veux à chaque ouverture du classeur (à adapter)
qu'ils aient le nom de leur feuille
Voici en imaginant que le Name change mais pas le CodeName:

Private Sub Workbook_Open()
Feuil1.OptionButton1.GroupName = ActiveSheet.Name
Feuil1.OptionButton2.GroupName = ActiveSheet.Name

End Sub

'lSteph

"bigorneau" a écrit dans le message de news:

Bonjour.

Problème posé :

Deux OptionButton sur une feuille Excel nommée "Modèle" ; ils sont
regroupés
par leur propriété GroupName = "Modèle" (la feuille existe à l'ouverture
du
classeur).

Deux manip. envisagées :
a) je crée une nouvelle feuille par recopie de la feuille "Modèle"
(Edition
Déplacer ou copier une feuille > Cocher "Créer une copie"). Elle se
nommera automatiquement "Modèle (2)".

Ou
b) en supposant qu'elle a été créée, je change le nom de ma feuille
"Modèle
(2)" en "Feuille1" (Clic droit > Renommer).

Question :
Comment obtenir automatiquement la mise à jour de la propriété GroupName
des
contrôles OptionButton
a) avec le nom de la nouvelle feuille,
b) avec le nouveau nom de la feuille déjà existante.

Il est facile d'accéder à la propriété des contrôles par du code associé à
un bouton. Mais quand il s'agit de détecter un changement de nom sur un
onglet, ouh lâ ! Ça fait deux soirs que je m'échine là-dessus avec VBA et
comme je ne suis pas égoïste ...

Avis aux spécialistes et autres connaisseurs.
Je retourne à mes essais ; actuellement je m'égare dans les modules de
classes ...

P.S. : voir aussi le pb posté par kalinaja le 24/10/2005 14:53





Avatar
bigorneau
Bonjour bigorneau.

J'ai regardé ton problème de près et te propose la solution suivante :

1°) Sur la feuille "Modèle", tu poses :
- un Button : Name = "btnNOUVELLE", Caption = "Nouvelle feuille"
- un OptionButton : Name = "opbA", GroupName = "Modèle", Caption = "Option
A"
- un OptionButton : Name = "opbB", GroupName = "Modèle", Caption = "Option
B"
Voilà le décor posé.

2°) Dans la feuille de code associée à la feuille "Modèle", tu saisis:

Option Explicit

Private Sub Worksheet_Calculate()
'Quand calcul Fonction VBA
opbA.GroupName = opbA.Parent.Name
opbB.GroupName = opbB.Parent.Name
End Sub

Private Sub btnNOUVELLE_Click()
ActiveSheet.Copy Before:=Sheets(1)
End Sub

3°) Dans un module de code nommé "FonctionsVBA" (peu importe), tu saisis :

Option Explicit

Function LisNomFeuill(ByVal Target As Range) As String
Dim NomdlaFeuille As String
'Pour retour immédiate du résultat sur la feuille
Application.Volatile
'Nom de la feuille comportant la formule
NomdlaFeuille = Target.Parent.Name
'Retour du résultat
LisNomFeuill = NomdlaFeuille
End Function

4°) Tu reviens sur la feuille "Modèle" et dans une cellule quelconque sauf
A1, tu saisis la formule :

=LisNomFeuill(A1)

Tout est à présent en place.

Déroulement de l'action :
- Au clic du bouton "Nouvelle feuille", la routine btnNOUVELLE_Click insère
une nouvelle feuille "Modèle (2)" en tête des onglets
- La fonction VBA LisNomFeuill renvoie en résultat le nom de la feuille
contenant l'objet Range passé en paramètre, et ce immédiatement grâce à
l'instruction Application.Volatile.
- La routine événementielle Worksheet_Calculate s'exécute alors
automatiquement et met à jour la propriété GroupName des OptionButton.

Ainsi chaque groupe de cases d'option est indépendant des autres feuilles.

N'est-ce pas ce que tu recherchais ?...

A la revoyure !
Avatar
bigorneau
Bonjour everybody et merci bigorneau pour ta soluce.

Je souhaiterais en fait obtenir la même fonctionnalité sans avoir à passer
par une formule dans une cellule de la feuille correspondante (il faut en ce
cas la masquer à l'utilisateur).

N'y-a-t-il pas un moyen élégant de détecter de l'extérieur le changement du
nom d'une feuille ? Par exemple en définissant une nouvelle classe d'objet
Feuille ?...

Cordialement,
bigorneau