Excel Downloads
Forum

Précédent   Excel Downloads Forums > Archives > Forum Excel Downloads - Archives


 
 
LinkBack Outils de la discussion
Vieux 08/01/2005, 14h21   #1 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Création d'un bouton de commande par macro

Bonjour, j'ai un problème que j'ai du mal à appréhender.
A l'aide d'une macro de lancement, je crée un fichier temporaire de travail ou je copie des données, les trie, fait des comparaisons, ... et tout cela fonctionne et souvent avec des réponses du Forum (que je remercie encore) mais maintenant, j'aimerais que ma macro crée dans mon fichier temporaire un bouton de commande que j'aimerais nommé (Ex : retour"), lui donner des propriétes de couleur, de police, de position, de taille et que ce bouton puisse me donner le retour vers le fichier d'origine propriétaire de ma macro de lancement.
J'espère que mes explications sont suffisament claires
Je vous remercie si quelq'un a une solution ou entrevoit une possibilité.
Je suis récepteur de toutes vo suggestions
Patrick.
 
ANNONCES
Vieux 08/01/2005, 14h50   #2 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

bonjour Patrick

tu peux tester cette macro qui créée un nouveau , et y insere un bouton personnalisé permettant de fermer le classeur sans sauvegarde


Sub CreationBoutonETMacro()
Dim Obj As OLEObject
Dim Code As String, NextLine As String

Workbooks.Add 'creation nouveau classeur

Set Obj = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1" , _
Left:=10, Top:=10, Height:=20, Width:=100) 'ajout bouton dans nouveau classeur

Obj.Object.Caption = "Fermer classeur"
Obj.Object.BackColor = RGB(255, 255, 0) 'couleur bouton

Code = "Sub CommandButton1_Click()" & vbCrLf 'creation de la procedure associée au bouton
Code = Code & "ThisWorkBook.Close False" & vbCrLf
Code = Code & "End Sub"

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End Sub


bon apres midi
MichelXld
 
Vieux 08/01/2005, 14h52   #3 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

rebonjour

ouuppss , un petit oubli dans ma phrase

...cette macro qui créée un nouveau ...Classeur...


bon apres midi
MichelXld
 
Vieux 08/01/2005, 18h15   #4 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonjour Michel et merci pour ta réponse. Cela correpond à peu près à ce que je désire mais je ne comprends pas trop la signification des lignes suivantes :

ode = "Sub CommandButton1_Click()" & vbCrLf 'creation de la procedure associée au bouton
Code = Code & "ThisWorkBook.Close False" & vbCrLf
Code = Code & "End Sub"

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code


Peux-tu m'aider ?
Merci
Patrick
 
Vieux 09/01/2005, 10h55   #5 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

bonjour Patrick

cette partie de la procedure créée une nouvelle macro dynamiquement(par macro) et l'insére à un endroit précis dans l'éditeur de macros


tout d'abord , creation d'une procédure qui permet d'associer une action au nouveau bouton (cet exemple ferme le classeur contenant la macro , sans sauvegarde ; lorsque que l'on clique sur le bouton )
Code = "Sub CommandButton1_Click()" & vbCrLf 'creation de la procedure associée au bouton
Code = Code & "ThisWorkBook.Close False" & vbCrLf
Code = Code & "End Sub"


ensuite insérer la nouvelle macro dans la feuille active
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule'determine l'emplacement dans l'editeur de macros(ActiveSheet=Feuille active)
NextLine = .CountOfLines + 1 'compte le nombre de lignes dans l'editeur de macros
.InsertLines NextLine, Code 'inseres la procedure à la suite


si tu vas dans Visual Basic Editor ( Alt+F11 )apres avoir utilisé cette procedure ,
dans l'explorateur de projets cliques sur "Feuil1" ( pour le classeur temporaire ) : tu dois normalement voir la nouvelle macro créée

CommandButton1_Click()
ThisWorkBook.Close False
End Sub


bonne journée
MichelXld
 
Vieux 10/01/2005, 23h10   #6 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonsoir Michel et merci pour ces éclaircissements mais j'ai encore des zones d'ombre au point de vue syntaxe.

Je pense avoir compris dans tes explications que les 3 lignes commençant par Code était la macro que normalement on développe avec l'éditeur. C'est à dire que je peux rajouter autant de lignes que je désire en commençant la ligne par Code = Code & "Ce que je désire" & vbCrLf (qui est le retour chariot et l'interligne). Merci de me dire si je me trompe.

Ce que je désire réellement est que dans mon fichier temporaire (ouvert par une macro du fichier "Lancement"), je positionne un bouton de commande (ce qui est fait par les premières lignes de ta macro) qui me permette lorsque je clique dessus de revenir dans une des feuilles de mon fichier de lancement sans fermer mon fichier temporaire car il m'est encore utile pour d'autres comparaisons ou contrôles.
J'ai essayé de faire dans le style :
Code = Code & "Windows("Lancement.xls").activate" & vbCrLf
Code = Code & "Sheet("Gestion").Select" & vbCrLf

et VBA m'a rit au nez, peut être toi aussi
Merci de te consacrer un peu de temps à mon problème
Cordialement et bonne soirée
Patrick.
 
Vieux 10/01/2005, 23h29   #7 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

bonsoir Patrick

tu as parfaitement compris le principe de fonctionnement
de petites adaptations doivent etre apportées lorsqu'il y a des guillemets dans le code à créer ( comme tu pourras le voir dans l'adaptation ci dessous)


Sub CreationBoutonETMacro()
Dim Obj As OLEObject
Dim Code As String, NextLine As String

Workbooks.Add 'creation nouveau classeur

Set Obj = ActiveSheet.OLEObjects.Add("Forms.CommandButton.1" , _
Left:=10, Top:=10, Height:=20, Width:=100) 'ajout bouton dans nouveau classeur

Obj.Object.Caption = "Fermer classeur"
Obj.Object.BackColor = RGB(255, 255, 0) 'couleur bouton

Code = "Sub CommandButton1_Click()" & vbCrLf 'creation de la procedure associée au bouton
Code = Code & "WorkBooks(""Lancement.xls"").activate" & vbCrLf
Code = Code & "Sheets(""Gestion"").Select" & vbCrLf
Code = Code & "End Sub"

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

End Sub


bonne soiree
MichelXld
 
Vieux 11/01/2005, 20h51   #8 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonjour Michel, c'est exactement ce que je voulais obtenir.
Je te remercie de ton aide.
Je n'aurais pas penser à mettre des ""

Il ne me reste plus qu'un point pour finir mon programme, c'est l'ouverture d'un fichier .xls sur intranet (c'est l'objet d'une autre demande que j'ai faite sur le Forum).

Bonne soirée et merci pour tout
Patrick
 
Vieux 12/01/2005, 21h39   #9 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonsoir Michel, une dernière question sur cette macro.
Cela fonctionne parfaitement lorsque je pars d'une création de classeur par
WorkBooks.Add mais lorsque je pars d'un classeur existant, que j'active le classeur et sélectionne la feuille par :
WorkBooks("Fichier x.xls").activate
Sheets("Feuille essai").Select

Quand j'arrive à la ligne :
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule

de la macro, j'ai un message d'erreur d'exécution "9"
L'indice n'appartient pas à la sélection

As-tu une idée sur le problème
Merci de trouver un peu de temps pour m'aider.
Patrick
 
Vieux 14/01/2005, 00h24   #10 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonsoir, mon problème semble venir du nom de la feuille active.

Quand dans ma sélection de feuille, je mets Sheets("Feuil1").Select et que je n'ai pas renommé la feuille, la macro fonctionne.

Si maintenant je renomme ma feuille 1 comme Feuil 1 (ajout d'espace) et que je la sélectionne par : Sheets ("Feuil 1 ").Select j'ai une erreur d'exécution dans la ligne
With ActiveWorkBook.VBProjet.VBComponents(ActiveSheet.N ame).CodeModule

Pour moi, dans le deuxième cas il ne retrouve pas la feuille.
Quand je vais dans l'explorateur de projet, dans les différentes feuilles des projets, je trouve par exemple : Feuil1 (Feuil 1) et quant je clique sur la Feuil1,
les propriétés de la Feuil1 s'affichent. En haut, je trouve (Name) : Feuil1 et plus bas Name : Feuil 1. Pourquoi 2 "Name" ?
Je pense que mon problème vient de là.
Quel nom prend "ActiveSheet.Name" ?
Je concède que mon explication est assez confuse.
Merci de m'aider à débrouiller ce méli-mélo
Bonsoir
Patrick
 
Vieux 14/01/2005, 08h23   #11 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

bonjour Patrick

ActiveSheet.Name correspond au nom de l'onglet actif dans la feuille Excel

par contre les XXXXXXX ci-dessous correspondent au nom de la feuille ( codeName ) dans l'editeur de macros
With ActiveWorkbook.VBProject.VBComponents(XXXXXXX).Cod eModule

par défaut lors de la creation d'un nouveau classeur les 2 données sont identiques . si le nom de l'onglet et le nom de la feuille dans VBE sont differents tu ne peux donc plus utiliser la ligne
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. Name).CodeModule


tu peux tester cette modification

Workbooks("Fichier x.xls").Activate
Sheets("Feuille essai").Select

With ActiveWorkbook.VBProject.VBComponents(ActiveSheet. CodeName).CodeModule
'...etc...


bonne journée
MichelXld
 
Vieux 14/01/2005, 18h35   #12 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonjour Michel et merci pour ta réponse qui corrige parfaitement mon problème.
Juste une question concernant VBA. Aurais-tu un livre à conseiller à quelqu'un qui débute dans la programmation dans ce language.
J'ai un livre mais il ne parle jamais de VBCompenents, de CodeModule, de Name et de CodeName pour une feuille, ni d'exemple comme tu m'as généreusement fourni.
L'aide dans le logiciel n'est pas toujours compréhensible ou il manque quelque chose pour pouvoir comprendre.
Je te souhaite une bonne soirée et je te remercie encore pour ton aide et tes explications.
Patrick
 
Vieux 14/01/2005, 21h08   #13 (permalink)
michel
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

bonsoir Patrick


je ne connais pas de livres , mais tu peux utiliser la base de connaissances du forum Excel Downloads:
en utilisant les mots clés appropriés pour tes recherches , les 4 liens ci-dessous te permettont d'obtenir de nombreux exemples sur les macros , issus du forum XLD

http://www.excel-downloads.com/html/...search.php?f=1

http://www.excel-downloads.com/html/...4410_74410.htm

http://www.excel-downloads.com/html/...%20Forum%20XLD

http://www.excel-downloads.com/html/...ichier=PostHit


tu peux aussi visiter ces pages ( il faut relancer une 2eme fois les liens , si un message d'erreur s'affiche )

http://www.excel-downloads.com/html/...me=LeKiKideZon

http://www.excel-downloads.com/html/...agename=MacVba

http://www.excel-downloads.com/html/...name=MichelXld


il y a aussi une zone de téléchargement par themes , avec de nombreux exemples prêt à l'emploi

http://www.excel-downloads.com/html/...ownloads-1.htm


bone soirée
MichelXld
 
Vieux 14/01/2005, 22h34   #14 (permalink)
Patrick.
Guest
 
Messages: n/a
Par défaut Re: Création d'un bouton de commande par macro

Bonsoir Michel et merci pour tout
Patrick.
 
ANNONCES
 

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +2. Il est actuellement 21h38.


(C) 2006 Excel Downloads