[VBA] Copie de feuille et valeur de propriété GroupName d'OptionButton
3 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <nospam-personne@free.fr> a écrit dans le message de news:
eTO3tkz2FHA.636@TK2MSFTNGP10.phx.gbl...
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
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
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 !
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.
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 !
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
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 ?...
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 ?...