![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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 | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#6 (permalink) |
|
Guest
Messages: n/a
|
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. |
|
|
#7 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#8 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#9 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#10 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#11 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#12 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#13 (permalink) |
|
Guest
Messages: n/a
|
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 |
| Liens sociaux |
| Outils de la discussion | |
|
|