Nouvelle feuille avec des boutons? [Résolu]

Signaler
-
 BIOoOAG123 -
Bonjour à tous. :)


Petite question, je ne sais pas si cela est possible, mais je souhaiterais que lorsque l'utilisateur créait une nouvelle feuille (par l'onglet classique d'Excel), un bouton vient s'intégrer automatiquement à cette nouvelle feuille.

Est-ce possible?

33 réponses

tu mets ces lignes à la fin de ton code et normalement ca passe
'********** Nom de la feuille *********
Sh.Name = DatePart("d", Date) & "." & DatePart("m", Date) & "." & DatePart("yyyy", Date)



Fabien
Bonjour,
est-ce que tu connais un peu le vba ou pas du tout ?
tu as dans les évènements du workbook, workbook_newsheet qui est une procédure qui s'exécute quand tu insères une nouvelle feuille.


Fabien
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut

Surement faisable, mais délicat.
En fait, il va falloir surveiller le moment où une nouvelle forme est ajoutée. Là, déjà, pas facile de trouver un évènement associé à cet ajout, donc il faudra surement avoir recours à une procédure scrutée cycliquement qui mémorisera les objets actuellement existants et qui fera la comparaison avec ceux présents au cycle précédent pour déclencher la procédure d'ajout du bouton au cas où ce nouvel objet est une forme.

Si tu arrives à faire ça et à cibler l'objet nouvellement créé (la forme), ajouter un bouton (et son code) est assez simple.
Voir Controls.Add, CodeModule ...

Ajout des références nécessaires :
"Microsoft Visual Basic for Applications Extensibility" pour manipuler les modules de code
"Microsoft Forms 2.0 Object Library" pour pouvoir créer des contrôles dynamiquement

Penser aussi à aller dans les options pour demander de faire confiance à ton projet :
Menu Developpeur + Sécurité des macros (catégorie Code) + cocher la case "Accès approuvé au modèle d'objet du projet VBA"

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
bonjour Jack
Bio, j'ai tester la procédure worksheet_newsheet et ca fonctionne. Au moment où je choisis d'ajouter une nouvelle feuille (clique droit sur une feuille, insérer feuille), le bouton se crée automatiquement dans la nouvelle feuille


Fabien
Je code un peu oui :)

Ah super de voir autant de réponse après le déjeuné!
Donc si j'ai bien compris tu utilises :

worksheet_newsheet
(Comment tu l'utilises? il n'y a pas grand chose sur internet..)

Je suppose que tu mets le code dans ThisWorkbook?
oui tu mets le code dans thisworkbook
tu écris sub workbook_newsheet et tu appuies sur entrée
ensuite tu peux taper ton code à l'intérieur de la procédure

c'est bien workbook_newsheet et pas worksheet_newsheet (je me suis trompé dans mon second message)


Fabien
Oki super, merci beaucoup, je teste ça et je te tiens au courant du résultat. :)
Alors mon code donne ça, le bouton s'insère bien, mais il y a une erreur 9(l'indice n'appartient pas à la sélection)
(il me dit pas ou elle est par contre...) :(

Sub workbook_newsheet(ByVal Sh As Object)
Dim Obj As Object
Dim Code As String

Sh.Select

'crée le bouton
    Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35)
    Obj.Name = "BoutonTest"
'texte du bouton
    ActiveSheet.OLEObjects(1).Object.Caption = "Tester le bouton"

'Le texte de la macro
    Code = "Sub BoutonTest_Click()" & vbCrLf
    Code = Code & "Call Module1.MAJMacro" & vbCrLf
    Code = Code & "End Sub"
'Ajoute la macro en fin de module feuille
    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
        .insertlines .CountOfLines + 1, Code
    End With
End Sub


Je pense de plus que l'appel de la macro ne marche pas.. Si quelqu'un à une solution? :)
je comprend pas où il plante ton fichier. En fait j'ai copié ton code et ca fonctionne bien. J'ai une nouvelle feuille avec le bouton dessus.
J'ai juste une erreur quand je clique sur le bouton qui est normal vu que je n'ai pas ta macro...


Fabien
Bon j'ai mis un On error Resume Next qu'il ne m'embete plus, mais du coup je ne peux pas cliquer sur le bouton. Enfin lorsque je clique rien ne se passe.
tu as essayé d'exécuter ton code en pas a pas ?

Fabien
Oui il me dit qu'il ne peux pas passer en mode arret à un moment..
En fait je peux même pas supprimer le bouton, ni changer le texte,c'est comme si il était bloqué?
justement c'est sur quelle ligne ?


Fabien
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bonjour,
1) Le code montré ne peut QUE fonctionner, pour autant qu'existe la procédure MajMacro et qu'elle soit bien dans le Module Module1
2) tu es bloqué car passé en mode erreur/débug, dont il te faut sortir en allant dans le code de la feuille et en l'interrompant par un clic sur le bouton "reinitialiser"

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
C'est juste après celle là :
Set Obj = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:=100, Height:=35)



Ca serait bizarre que ce soit cette ligne qui la suit qui bug
Obj.Name = "BoutonTest"
je comprend pas pourquoi il ne fonctionne pas ton code honnêtement. Tu nous montres bien tout et pas juste une partie de ton code ?


Fabien
1) Oui c'est bien le cas pour la macro et elle est bien dans module1
2) J'ai fais ce que tu as dit toujours aucun changement
Oui oui c'est mon code exacte
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
234
Bon... (et un salut à fabiendag) : bien que inutile, je viens de faire les frais d'un test de ce code sur un classeur === >>> fonctionne sans faille .
Voilà.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Oui j'ai fais le test aussi, donc si ça vient pas du code ça vient forcément d'excel! ^^ Mais ou et pourquoi? lol dur dur la question.