OVH Cloud OVH Cloud

Créer bouton par VBA

4 réponses
Avatar
Mac Ab and O'Canada
Bonjour,
je souhaiterais créer un bouton permettant de sélectionner toutes les
cellules sur un nouveau classeur que je crée, avec du code VBA depuis mon
classeur d'origine.
Je m'explique:
- J'ai un classeur "chiffres"
- Par l'appui sur un bouton, je crée un nouveau classeur "résultats"
contenant les cellules qui m'intéressent
- J'aimerais dans le même temps, sur le classeur résultat, créer un bouton
pour sélectionner toutes les cellules
- éventuellement, lui faire intégrer un module donné
- ensuite je ferme ce classeur et je le mail

C'est l'étape 3 (et 4) que je n'arrive pas à faire. Est-ce possible?
Je n'ai rien trouvé malgré mes recherches. Merci de me donner des pistes.
J'utilise Office XP

4 réponses

Avatar
Hervé
Salut Mac Ab and O'Canada,
Voici une piste pour la création d'un bouton dans un nouveau classeur,
l'importation d'un module et l'envoi par mail. Adapte :

Private Sub AjoutBouton()
Dim Cl As Workbook, Fe As Worksheet
Dim Ctrl As OLEObject, Btn As MSForms.CommandButton
Dim Lignes As String
'crée le classeur
Set Cl = Workbooks.Add
Set Fe = Cl.Worksheets("Feuil1")
'ajoute le bouton et le paramètre
Set Ctrl = Fe.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", _
Link:úlse, DisplayAsIcon:úlse, _
Left:, Top:, Width:0, _
Height: )
Set Btn = Ctrl.Object
With Btn
.Name = "BtnSelect"
.Caption = "Sélection des cellules"
End With
'inscrit des données bidons pour le test
Fe.Range("A1:E20") = "Test"
'écrit dans le module de la feuille
'la proc du bouton
With Cl.VBProject.VBComponents(Fe.CodeName).CodeModule
Lignes = "Private Sub BtnSelect_Click()" & vbCrLf _
& "Range(""A1"").CurrentRegion.Select" & vbCrLf _
& "End Sub"
.InsertLines .CountOfLines + 1, Lignes
End With
'importe le module dans le nouveau classeur
'module qui doit se trouver dans le même
'dossier que ce classeur ou alors
'modifier le chemin
ImportModule Cl.Name, ThisWorkbook.Path & "MonModuleAMoi.bas"
E_Mail Cl.Name
Set Cl = Nothing
Set Fe = Nothing
Set Ctrl = Nothing
Set Btn = Nothing
End Sub

Sub ImportModule(NomClasseur As String, _
Chemin As String)
Dim VBPModule As Object
Set VBPModule = Workbooks(NomClasseur).VBProject
With VBPModule.VBComponents
.Import Chemin
End With
Set VBPModule = Nothing
End Sub

Sub E_Mail(NomClasseur As String)
With Workbooks(NomClasseur)
.HasRoutingSlip = True
With .RoutingSlip
.Subject = "Classeur Excel"
.Message = "Voici le nouveau " & _
"classeur et son zoli bouton"
.Recipients = "Destinataire"
.ReturnWhenDone = False
End With
.Route
End With
End Sub

Hervé.

"Mac Ab and O'Canada" a écrit dans le message news:
3f1bdc88$0$9628$
Bonjour,
je souhaiterais créer un bouton permettant de sélectionner toutes les
cellules sur un nouveau classeur que je crée, avec du code VBA depuis mon
classeur d'origine.
Je m'explique:
- J'ai un classeur "chiffres"
- Par l'appui sur un bouton, je crée un nouveau classeur "résultats"
contenant les cellules qui m'intéressent
- J'aimerais dans le même temps, sur le classeur résultat, créer un bouton
pour sélectionner toutes les cellules
- éventuellement, lui faire intégrer un module donné
- ensuite je ferme ce classeur et je le mail

C'est l'étape 3 (et 4) que je n'arrive pas à faire. Est-ce possible?
Je n'ai rien trouvé malgré mes recherches. Merci de me donner des pistes.
J'utilise Office XP




Avatar
Mac Ab and O'Canada
Merci, c'est ce que je cherchais. C'est rapide et efficace.
Mais j'ai une erreur "type défini par l'utilisateur non défini" sur "Dim Btn
As MSForms.CommandButton"
Ca vient de quoi?
Je l'ai mis provisoirement en commentaire pour tester le reste et j'ai
d'autres erreurs (mais c'est normal) mais ça donne ce que je voulais. Enfin,
ça le donnera quand il n'y aura plus cette erreur...


"Hervé" a écrit dans le message de news:
OAq#
Salut Mac Ab and O'Canada,
Voici une piste pour la création d'un bouton dans un nouveau classeur,
l'importation d'un module et l'envoi par mail. Adapte :

Private Sub AjoutBouton()
Dim Cl As Workbook, Fe As Worksheet
Dim Ctrl As OLEObject, Btn As MSForms.CommandButton
Dim Lignes As String
'crée le classeur
Set Cl = Workbooks.Add
Set Fe = Cl.Worksheets("Feuil1")
'ajoute le bouton et le paramètre
Set Ctrl = Fe.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", _
Link:úlse, DisplayAsIcon:úlse, _
Left:, Top:, Width:0, _
Height: )
Set Btn = Ctrl.Object
With Btn
.Name = "BtnSelect"
.Caption = "Sélection des cellules"
End With
'inscrit des données bidons pour le test
Fe.Range("A1:E20") = "Test"
'écrit dans le module de la feuille
'la proc du bouton
With Cl.VBProject.VBComponents(Fe.CodeName).CodeModule
Lignes = "Private Sub BtnSelect_Click()" & vbCrLf _
& "Range(""A1"").CurrentRegion.Select" & vbCrLf _
& "End Sub"
.InsertLines .CountOfLines + 1, Lignes
End With
'importe le module dans le nouveau classeur
'module qui doit se trouver dans le même
'dossier que ce classeur ou alors
'modifier le chemin
ImportModule Cl.Name, ThisWorkbook.Path & "MonModuleAMoi.bas"
E_Mail Cl.Name
Set Cl = Nothing
Set Fe = Nothing
Set Ctrl = Nothing
Set Btn = Nothing
End Sub

Sub ImportModule(NomClasseur As String, _
Chemin As String)
Dim VBPModule As Object
Set VBPModule = Workbooks(NomClasseur).VBProject
With VBPModule.VBComponents
.Import Chemin
End With
Set VBPModule = Nothing
End Sub

Sub E_Mail(NomClasseur As String)
With Workbooks(NomClasseur)
.HasRoutingSlip = True
With .RoutingSlip
.Subject = "Classeur Excel"
.Message = "Voici le nouveau " & _
"classeur et son zoli bouton"
.Recipients = "Destinataire"
.ReturnWhenDone = False
End With
.Route
End With
End Sub

Hervé.

"Mac Ab and O'Canada" a écrit dans le message news:
3f1bdc88$0$9628$
Bonjour,
je souhaiterais créer un bouton permettant de sélectionner toutes les
cellules sur un nouveau classeur que je crée, avec du code VBA depuis
mon


classeur d'origine.
Je m'explique:
- J'ai un classeur "chiffres"
- Par l'appui sur un bouton, je crée un nouveau classeur "résultats"
contenant les cellules qui m'intéressent
- J'aimerais dans le même temps, sur le classeur résultat, créer un
bouton


pour sélectionner toutes les cellules
- éventuellement, lui faire intégrer un module donné
- ensuite je ferme ce classeur et je le mail

C'est l'étape 3 (et 4) que je n'arrive pas à faire. Est-ce possible?
Je n'ai rien trouvé malgré mes recherches. Merci de me donner des
pistes.


J'utilise Office XP








Avatar
Mac Ab and O'Canada
Allons bon!
Maintenant, il ne m'affiche plus d'erreur à ce niveau mais une erreur 1004
"l'accès par programme au projet visual basic n'est pas fiable"
Mais d'où cela peut il bien venir? De mon office?


"Mac Ab and O'Canada" a écrit dans le message de news:
3f1c21d9$0$9624$
Merci, c'est ce que je cherchais. C'est rapide et efficace.
Mais j'ai une erreur "type défini par l'utilisateur non défini" sur "Dim
Btn

As MSForms.CommandButton"
Ca vient de quoi?
Je l'ai mis provisoirement en commentaire pour tester le reste et j'ai
d'autres erreurs (mais c'est normal) mais ça donne ce que je voulais.
Enfin,

ça le donnera quand il n'y aura plus cette erreur...



Avatar
Mac Ab and O'Canada
Bonjour,
Pour ceux qui rencontreraient la même merreur
Sous Office XP uniquement, l'erreur "l'accès par programme au projet visual
basic n'est pas fiable" peut être supprimée en cochant Outils/Options/
Sécurité/ Sécurité des macros/ faire confiance au projet visual basic
Une nuit de recherche ne fut pas de trop pour résoudre ce **%££$ de problème
qui me bloquait.
Merci à ceux qui m'ont aidé,
et bonne nuit.

"Mac Ab and O'Canada" a écrit dans le message de news:
3f1c2726$0$9629$
Allons bon!
Maintenant, il ne m'affiche plus d'erreur à ce niveau mais une erreur 1004
"l'accès par programme au projet visual basic n'est pas fiable"
Mais d'où cela peut il bien venir? De mon office?


"Mac Ab and O'Canada" a écrit dans le message de
news:

3f1c21d9$0$9624$
Merci, c'est ce que je cherchais. C'est rapide et efficace.
Mais j'ai une erreur "type défini par l'utilisateur non défini" sur "Dim
Btn

As MSForms.CommandButton"
Ca vient de quoi?
Je l'ai mis provisoirement en commentaire pour tester le reste et j'ai
d'autres erreurs (mais c'est normal) mais ça donne ce que je voulais.
Enfin,

ça le donnera quand il n'y aura plus cette erreur...