Recupérer le nom d'un bouton [Résolu]

xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention - 7 janv. 2008 à 16:33 - Dernière réponse : xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention
- 10 janv. 2008 à 10:50
Bonjour

Je ne suis pas super fort en VBA sur Excel, donc j'aurais besoin d'un petit coups de mains.
je vous explique un peu la structure de mon fichier.

j'ai une feuille de config qui me permet de créer toutes les autres autres feuilles du classeur.
dans ces feuilles, j'ai une feuille qui sert de "base" au je créé des boutons dynamiquement suivant le nom donné dans ma feuille de config.
c'est bouton devrais me faire aller directement à la feuille choisit
ex: bouton "groupe" m'envoie sur la feuille "groupe"
Mon problème c'est que je ne sais pas comment récupérer le nom du boutons.

Merci de votre aide
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention - 10 janv. 2008 à 10:50
3
Merci
Bonjour,


J'ai réussit à résoudre mon problème.


Je n'ai pas réussit à récupérer le nom du bouton, je suis donc partie sur la
solution de créer une macro par bouton, donc voila ce que j'ai fait


dans mon fichier j'ai une feuille qui s'appelle config.
 


<col style= \"width: 140pt;\" width=\"187\" />
<col style=\"width: 113pt;\" width=\"151\" />
<col style=\"width: 137pt;\" width=\"183\" />
<col style=\"width: 97pt;\" span=\"2\" width=\"129\" />
<col style=\"width: 243pt;\" width=\"324\" />

----

Ligne

,

Colonne A

,

Colonne B

,

Colonne C

,

Colonne D

,

Colonne E

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

8

,
Désignation

,
Nom de la feuille

,
Nombre d'etudiants

 dans le groupe

,
Crtière

 de saisie

,
Types de feuille

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

9

,
Nom de la liste principale

,
Liste_Pe1

,
Nombre d'etudiants

dans ce groupe n'est pas nécesaire

,
Aucun critère

,
Aucun critère

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

10

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,
Liste_des_Boursiers

,
150

,
BO

,
Option

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

11

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,
Groupe_A

,
45

,
A

,
Groupe

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

12

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,
Groupe_B

,
45

,
B

,
Groupe

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,

----

13

,
<!--[if !supportEmptyParas]--> <!--[endif]-->

,
Groupe_C

,
45

,
C

,
Groupe

,
<!--[if !supportEmptyParas]--> <!--[endif]-->



......




a partir de cette j'ai une macro qui créé les feuille qui sont dans la colonne
B

J'obtiens donc une nouvelle feuille qui sert de liste principale est c'est sur
celle-ci que je créé mes boutons (Nom de la liste principale est dans la
cellules B9).


Voici mon code pour la création du bouton

dans un 1er module, la macro qui créé les boutons.



'--------------------------------------------------------------------------------------------




Private Sub
bouton_liste_principale_navigation_fichier()

'--------------------------------------------------------------------------------------------

'Pour récupérer dans ma feuille de base nommé "Config" le nom de la
feuille ou je veux créer

'mes boutons

'--------------------------------------------------------------------------------------------

feuil_config = "Config"

col_nom_feuille = "B"

ligne_nom_feuille = 9

ref01 = ligne_nom_feuille

Lmax = 8000

'--------------------------------------------------------------------------------------------


'--------------------------------------------------------------------------------------------

' Paramétrage des boutons

'--------------------------------------------------------------------------------------------


' definit la position du bouton

dist_gauche = 6

dist_haut = 42

' definit la dimention du bouton

dim_largeur_bouton = 160

dim_hauteur_bouton = 19

dim_ecart = 20

'--------------------------------------------------------------------------------------------


'--------------------------------------------------------------------------------------------

' Paramétrage pour le paramètrage des macros

'--------------------------------------------------------------------------------------------


Dim nom_macro As String

Dim Nom_Feuille As String

'--------------------------------------------------------------------------------------------


Sheets(feuil_config).Select

If ref01 = ligne_nom_feuille Then

    nom_liste_principale = Range(col_nom_feuille &
ligne_nom_feuille).Value

    ' pour ne pas créer le bouton vers la liste principale

    ligne_nom_feuille = ligne_nom_feuille + 1

End If


' creation des boutons de navigation dans le fichiers

For t = ligne_nom_feuille To Lmax

   

    nom_bouton = Range(col_nom_feuille & t).Value

    nom_macro_1 = Range(col_nom_feuille & t).Value

    nom_macro = nom_macro_1

 '   MsgBox (nom_macro)

    Nom_Feuille = Range(col_nom_feuille & t).Value

    If nom_bouton = "" Then

        Exit For

    Else

        'Création des macro associer aux
boutonx

        Call Test_existe(nom_macro,
Nom_Feuille)

        Sheets(nom_liste_principale).Select

        ActiveSheet.Buttons.Add(dist_gauche,
dist_haut, dim_largeur_bouton, dim_hauteur_bouton).Select

        Selection.OnAction = nom_macro

        Selection.Characters.Text =
nom_bouton

        With Selection.Characters(Start:=1,
Length:=11).Font

            .Name =
"Arial"

            .FontStyle =
"Normal"

            .Size = 10

           
.Strikethrough = False

            .Superscript
= False

            .Subscript =
False

            .OutlineFont
= False

            .Shadow =
False

            .Underline =
xlUnderlineStyleNone

            .ColorIndex
= xlAutomatic

        End With

        dist_haut = dist_haut + dim_ecart

        Sheets(feuil_config).Select

    End If

Next t

End Sub



'--------------------------------------------------------------------------------------------<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->




Public Sub Choix_Feuille(Nom_Feuille As String)


    If FeuilleExiste(Nom_Feuille) Then

        Sheets(Nom_Feuille).Select

        Range("A1").Select

    Else

        MsgBox "Impossible, la feuille
n'existe pas"

    End If


End Sub

'--------------------------------------------------------------------------------------------<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->



Public Function FeuilleExiste(sNomFeuille As String) As Boolean

    On Error GoTo Err_FeuilleExiste

    FeuilleExiste = False

    FeuilleExiste = Not ActiveWorkbook.Worksheets(sNomFeuille)
Is Nothing

Err_FeuilleExiste:

End Function



puis dans un autre modules
que j'appelle gestion_macro







'--------------------------------------------------------------------------------------------<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->



Public Sub Test_existe(nom_macro As String, Nom_Feuille As String)

'Nécéssite d'activer la référence

'"Visual basic For Application Extensibility 5.3"

'


Dim nom_fichier As String

Dim nom_modules As String


nom_fichier = ActiveWorkbook.Name

nom_modules = "ZZ_choix_feuille"


'Vérifie l'existance du module

If Not VerifierExistenceModule(Workbooks(nom_fichier), nom_modules) Then

    'Si il n'existe pas il le créé

    Call creationModule(nom_fichier, nom_modules)

End If


'Vérifie l'existance de la macro

If Not VerifierExistenceMacro(Workbooks(nom_fichier), nom_macro) Then

    'Si elle n'existe pas elle le créé

    Call creation_macro(nom_fichier, nom_modules, nom_macro,
Nom_Feuille)

End If







End Sub



'--------------------------------------------------------------------------------------------
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

Sub creationModule(nom_fichier, nom_modules)

'Nécéssite d'activer la référence

'"Visual basic For Application Extensibility 5.3"

'

Dim Wb As Workbook

'Dim VBComp As VBComponent

Dim x As Integer

'Définit le classeur cible

Set Wb = Workbooks(nom_fichier)

'Ajoute un module standard dans le classeur

Set VBComp = Wb.VBProject.VBComponents.Add(1)

'Renomme le module

VBComp.Name = nom_modules


End Sub


'--------------------------------------------------------------------------------------------<!--[endif]-->





Public Sub creation_macro(nom_fichier, nom_modules, nom_macro, Nom_Feuille)


With Workbooks(nom_fichier).VBProject.VBComponents(nom_modules).CodeModule


x = .CountOfLines

.InsertLines x + 1, "Public Sub " & nom_macro &
"()"

.InsertLines x + 2, "Dim Nom_Feuille As String"

.InsertLines x + 4, ""

.InsertLines x + 5, "'Definit le nom de la feuille"

.InsertLines x + 6, "Nom_Feuille = """ & Nom_Feuille
& """"

.InsertLines x + 7, ""

.InsertLines x + 8, "'active la macro pour ce deplacer vers la feuille que
l'on a choisit"

.InsertLines x + 9, "Call Choix_Feuille(Nom_Feuille)"

.InsertLines x + 10, "End Sub"

End With


End Sub

'--------------------------------------------------------------------------------------------<!--[endif]-->



'Function VerifierExistenceModule(Mdl As String) As Boolean

Function VerifierExistenceModule(Wb As Workbook, Mdl As String) As Boolean


'Dim VBComp As VBComponent


On Error Resume Next

Set VBComp = Wb.VBProject.VBComponents(Mdl)

If VBComp Is Nothing Then

VerifierExistenceModule = False

Else

VerifierExistenceModule = True

End If

End Function

'--------------------------------------------------------------------------------------------<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->



Function VerifierExistenceMacro(Wb As Workbook, NomMacro As String) As Boolean

Dim x As Integer

'Dim VBComp As VBComponent

For Each VBComp In Wb.VBProject.VBComponents

On Error Resume Next

x = VBComp.CodeModule.ProcStartLine(NomMacro, 0)

If x > 0 Then Exit For

Next VBComp

If x = 0 Then

VerifierExistenceMacro = False

Else

VerifierExistenceMacro = True

End If

End Function



'--------------------------------------------------------------------------------------------
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->Merci a vous tous pour votre aide



Normalement en collant le code comme je vous ai mis cela devrais fonctionner.




<!--[if !supportLineBreakNewLine]-->


<!--[endif]-->

Merci xaphie 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de xaphie
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 7 janv. 2008 à 16:51
0
Merci
Le nom du bouton ???

Tu veux certainement arler du texte qui est inscrit sur le bouton, non?

dans ce cas là, regarde du coté de la propriété Caption de ton bouton

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 7 janv. 2008 à 16:54
0
Merci
Salut,

Récupérer le nom du bouton, peut-être par la propriété Name de celui-ci .

C'est vrai que cette question manque de précision..lol...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Commenter la réponse de cs_Exploreur
xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention - 7 janv. 2008 à 17:12
0
Merci
Salut,

Effectivement c'est bien du nom inscrit dans le bouton. desolé mais je ne suis pas très fort pour m'explique LOL LOL

merci pour vos reponse mais je m'y suis deja intérssé mais je ne vois pas comment peux les utilisers

mon but de fair un truc dans ce style

click sur le bouton nommé groupe
la macro qui y serait associer

sub choix_feuille()
dim nom_feuille as string

nom_feuille = ???????????

if feuille_existe then
    sheets(nom_feuille).select
    range("A1").select
else
    msgbox ("Impossible, la feuille n'existe pas)
end if

j'ai deja ma fonction feuille existe donc il ne manque pas grand chose

en tout cas merci de vos reponse
c'est sympa de m'aider
Commenter la réponse de xaphie
xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention - 7 janv. 2008 à 17:41
0
Merci
j'ai oublier de dire que le nom par defaut ("bouton1,buton2 ...") peux change

exemple un coup bouton1 sera groupe mais il peux etre également bouton2 donc pour trouver la captation du bouton ça ne marche pas
Commenter la réponse de xaphie
cs_MPi 3875 Messages postés mardi 19 mars 2002Date d'inscription 17 août 2018 Dernière intervention - 7 janv. 2008 à 23:58
0
Merci
Salut,
Clique "Accepté" seulement quand la réponse satisfait ta question... Ça peut aider les autres qui font des recherches. De plus, ceux qui viennent pour aider peuvent penser que c'est résolu et passent leur chemin sans regarder...

Pour ton problème, j'imagine que tes boutons sont tous reliés à la même macro
sub choix_feuille()

Si c'est le cas, tu pourrais te créer d'autres macros "personnelles" à chaque bouton.
Disons que tu as un bouton "Groupe". Tu lui affectes une procédure personnelle comme ceci
Sub Groupe()
    Call choix_feuille("Groupe")
End Sub

Et tu changes ta macro
sub choix_feuille(NomFeuille As String)

Comme le nom de la feuille est passée en paramètre, tu n'as pas à valider le nom ou autre... Enfin, c'est toi qui c'est ce que tu dois faire, mais le principal est que le nom de la feuille que tu veux "travailler" est déjà là en tant que paramètre.

en espérant être clair dans mes explications...(?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Commenter la réponse de cs_MPi
xaphie 5 Messages postés lundi 7 janvier 2008Date d'inscription 10 janvier 2008 Dernière intervention - 8 janv. 2008 à 08:40
0
Merci
Bonjour,

En fait, c'est ce que je faisais sur ma premiere ebauche. Cela fonctionne bien lorsque l'on sait d'avance le nombre de feuille car tu associe une macro par bouton (= par feuille). Mais le problème est que je ne sais pas d'avance combien mes utilisateurs vont mettre de feuille. Pour créer ces feuilles l'utilisateur doit les rentrer dans ma feuille de config.
exemple de la feuille

col1     -    Nom des feuilles   - col3   -   ....
            -   groupe1
            -   groupe2
            -   .....

A partir de cette feuille, l'utilisateur clique sur un bouton pour créer les feuilles. Dans cette macro j'ai une boucle qui lit ma colonne "Nom des Feuilles" afin de récuperer le nom de la feuille à créer puis il créé un bouton avec ce meme nom dans ma feuille de "base".

une foie la macro finis, j'obtiens toutes mes feuilles et sur la liste principale tous les boutons qui sont lié à ma macro "choix_feuille".
Mon problème est que le nombre de bouton est variable. Voila j'espere etre clair dans m'explication.

Merci pour ton aide
Commenter la réponse de xaphie

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.