J'ai vu dans le code VBA qu'il y avait 12 boutons pour imprimer 12 feuilles mensuelles
avec 12 macros du type
Sub ImprimerJanvier()
Sheets("Janvier").PrintOut
End Sub
Problème
NB: Cette demande n'est pas liée au problème initial de l'auteur du poste cité
Mon but est de faire une seule macro Impression
qui imprime la feuille du mois selon la caption du Button
Voila ou j'en suis
Code:
Dim X As String
Dim mois As Variant
For Each obj In Sheets("KILOMETRAGE").DrawingObjects
If TypeName(obj) Like "Button*" And obj.Characters.Text Like "Imprimer*" Then
X = Application.Trim(StrReverse(Right(obj.Characters.Text, Len(obj.Characters.Text) - 8)))
mois = StrReverse(X)
MsgBox mois
J'essaie de créer un module de classe
mais je ne sais pas la bonne syntaxe
'dans le module de classe
Code:
Public WithEvents ButtonGroup As [B]Shapes[/B]
[B]ou As DrawingObjects[/B]
[B]ou As MSForm.CommandButton[/B]
Private Sub ButtonGroup_Click()
MsgBox "Bouton cliqué =" & ButtonGroup.Name
End Sub
J'ai sous la main un exemple de module de classe mais qui
s'applique sur des commandbutton d'un userform
et je n'arrive pas à l'adapter pour le cas de boutons (issus de la BO Formulaires)
Merci à l'avance pour l'aide que vous m'apporterez.
Quoi mettre à la place de MSForms.CommandButton
pour désigner un bouton de la BO Formulaire
As Button.DrawingObjects?
//////////////////////////////////
J'avais déjà ce genre de solutions avec des CommandButtons
avec des modules de classe
La problème c'est que dans le classeur qui est l'origine
de ma prise de tête du jour avec VBA
il ya des boutons issues de la BO formulaire
et je n'arrive pas à trouver la bonne syntaxe à ce niveau
Public WithEvents ButtonGroup As Shapes
ou
Public WithEvents ButtonGroup As DrawingObjects
ou
Public WithEvents ButtonGroup As MSForm.CommandButton
Je m'entête car je voudrais au cas ou je serais confronté dans le futur
à un classeur qui contient des boutons (BO Formulaires)
je ne voudrais pas remplacer les boutons par des commandbutton
juste parce que a solution n'a pas été trouvé
J'ai cherché sur le net, dans MPFE
et je netrouve pas d'exemple de syntaxe
Dans tous mes essais seul le code ci-dessous
fonctionne
Code:
Dim X As String
Dim mois As Variant
For Each obj In Sheets("KILOMETRAGE").DrawingObjects
If TypeName(obj) Like "Button*" And obj.Characters.Text Like "Imprimer*" Then
X = Application.Trim(StrReverse(Right(obj.Characters.Text, Len(obj.Characters.Text) - 8)))
mois = StrReverse(X)
MsgBox mois
Tu as du voir que ce fut aussi notre prise de tête et que nous avons (Bebere et moi même) opté en parrallèle, et sans consultation préalable, après moult essais infructueux pour les commandButton de la boite à outils...
Ce ne dot pas être difficile de remplacer tes boutons formulaires par ceux ci.. Si ?
Bon courage
Bien sûr, bien que je n'utilise que très rarement les boutons issus du formulaire, si un pro du module de classe a une idée...
Cordialement
Edit : sinon, tu peux t'inspirer du dernier fichier mis en ligne par Pierrejean sur le fil indiqué plus haut et qui utillise astucieusement Application.caller
->pierrejean (si tu passes par la), Spitnolan08 et vous autre VBAistes
pouvez m'apporte quelques explications, svp
Ai-je bien compris
Replace...
remplale la chaine "Bouton" par rien
CInt....
conversion de Application.Caller(rien) par un chiffre
Chiffre qui ira chercher le mois dans l' Array() (sans mauvais jeux de mots )
Et dans le fichier de Pierrejean ce sont bien des boutons (BO formulaires) non?
Re : [VBA] Module de classe : Button (BO Formulaire) Explications demandées SVP
Re,
Je comprends... Mais l'important n'est il pas de passer l'obstacle d'une manière ou d'une autre ?
Mais en attendant, tu as une solution qui fonctionne.
As tu vu le edit que j'ai rajouté à mon dernier post? Encore une autre voie pour conserver tes boutons formulaire.
Re : [VBA] Module de classe : Button (BO Formulaire) Explications demandées SVP
bonjour Staple1600, bonjour Spitnolan08
en utilisant Application.Caller:
Tu nommes les boutons formulaire à l'identique de chaque feuille à imprimer.
et tu assignes la macro suivante à chacun des boutons:
Code:
Sub MacroGlobale()
Worksheets(Application.Caller).PrintOut Copies:=1, Collate:=True
End Sub
Apparement tu as compris comment ça marche...
et Michel vient de t'indiquer la suite, si j'ai bien compris ton pb...
Et si Michel ne te donne pas une solution pour le module de classe c'est qu'il ne doit pas y en avoir ou alors qu'il n'a pas eu encore l'occasion ou l'utilité de réfléchir à ce pb...
Ca j'ai compris, si ce n'est que je ne sais pas ce que c'est que des caption variables. Et que tu ne réponds pas à ma question : y a t il sur ton bouton le nom de la feuille à imprimer d'une façon ou d'une autre ?
Re : [VBA] Module de classe : Button (BO Formulaire) Explications demandées SVP
Re
Une petite recap s'impose
La solution de MichelXLD
fonctionne parfaitement
dans le cas ou les boutons sont nommés exactement comme les feuilles
Dans l'exemple (qui est dans la pièce jointe du précedent message)
les boutons ne sont pas nommés
c'est en identifiant obj.Characters.Text (ce que j'appelle Caption)
que l'on sait sur quel bouton on clique
mais avec le code tel quel
une msgbox affiche tous boutons
Ce que je cherche à faire
C'est qu'en fonction obj.Characters.Text (dont une partie de la chaine de caractère correponds à une feuille du classeur)
se lance une macro "globale" qui éviterait d'avoir une macro
pour chaque bouton qui fasse en fait la même chose
Ce qui était le cas dans le claseur qui est à l'origine de ce post
12 boutons "Imprimer Mois" donc donc 12 macros d'impression.
PS: le fichier joint du précedent message est une copie
d'un classeur réalisé par PierreJean dans le post
cité par Spitnolan08
Sub MacroGlobale()
Dim Chaine As String
Chaine = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Caption
If InStr(1, Chaine, "Imprimer", vbTextCompare) > 0 Then
'Caption des boutons supposés du style "Imprimer Janvier", "Imprimer Fevrier"...
'MsgBox Mid(Chaine, 10)
Worksheets(Mid(Chaine, 10)).PrintPreview
End If
End Sub