|
|
|
|
Posté par
jot59, le vendredi 31 mars 2006 à 16:56:43Bonjour,
J'ai apporté quelque modif pour que cela fonctionne chez moi !
Sub CreerMenu()
Dim X As Byte
Dim i, BU_number As Long
Dim Code As String
Dim NextLine As String
Dim oOLE As OLEObject
Sheets("Menu").Select
Range("A1").Select
i = 1
Do While Cells(i, 1).Value <> "XXX"
i = i + 1
Loop
i = i + 1
BU_number = Cells(i, 1)
'Workbooks.Add 'creer classeur
Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100, Height:=30)
'Left position bouton par rapport au bord gauche de la feuille
'Top position bouton par rapport au haut de la feuille
'Width largeur bouton
'Height hauteur bouton
X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons existants dans la feuille
'option nommer l'objet
oOLE.Name = "CommandButton" & X
'texte sur le bouton
ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X
Code = "Sub CommandButton" & X & "_Click()" & vbCrLf
Code = Code & "Sheets(""feuil2"").select" & vbCrLf
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.insertlines NextLine, Code
End With
End Sub
Lupin
|
Bonjour,
vous devez ajouter cette syntaxe :
With myCommandButtonDetail
.Name = "CommandButtonDetail_" & iNbReappro
.OnAction = "'Nom de la routine a appeller'"
'-- le reste des param
End With
attention, la ligne se lit : .OnAction = " 'Nom de la routine a appeller' " Le nom de la routine doit être entre simple guillemets ' ... ' et le tout doit être entre double guillemets " ' ... ' " Lupin |
Bonjour,
il me dit que la méthode ou propriété n'est pas gérée par cet objet j'ai essayé en utilisant les OOleobject comme vous avez fait precedemment mais ca ne marche pas car je veux mettre l'objet sur un formulaire et ca ne marche pas : quand je fais ca (pour tester) ca marche : Set oOLECommandButtonDetail = ActiveWorkbook.ActiveSheet.OLEObjects.Add ( arguments...) mais quand je fais ca (ce que je voudrai) ca ne marche pas : Set oOLECommandButtonDetail = GestionMeuleForm.MultiPage1.Pages(4). _ CalculBesoinFrame.OLEObjects.Add(arguments...) merci pour votre réponse Claire |
Bonjour,
Dans un premier temps, je dois vous avouer que j'ai confondu un bouton menu au type de bouton que vous tentez d'installer. J'ai testé votre code en le modelant pour m'en faire un exemple et il semble que ce soit un bogue connue de microsoft d'après les recherches que j'ai fais. Désolé de ne pouvoir aller plus loin ! Lupin |
re:
voici le code que j'ai testé :
Sub TestCreationBouton()
Dim myCommandButtonDetail As CommandButton
Dim iNbReappro As Integer, NextLine As Integer
Dim strCode As String
iNbReappro = 1
Set myCommandButtonDetail = GestionMeuleForm.MultiPage1.Pages("Page4").CalculBesoinFrame.Controls.Add _
("Forms.CommandButton.1", "CommandButtonDetail_" & iNbReappro)
With myCommandButtonDetail
.Name = "CommandButtonDetail_" & iNbReappro
.Caption = "Run"
.Top = 50
.Left = 100
End With
strCode = ""
strCode = strCode & "Private Sub CommandButtonDetail_" & iNbReappro & "_Click()" & vbCrLf & vbCrLf
strCode = strCode & "' Load DetailReapproForm" & vbCrLf
strCode = strCode & "' GestionMeuleForm.Hide" & vbCrLf
strCode = strCode & "' DetailReapproForm.Show" & vbCrLf
strCode = strCode & " Msgbox" & """" & "Réussi" & vbCrLf & vbCrLf
strCode = strCode & "End Sub" & Chr(13)
With ThisWorkbook.VBProject.VBComponents("GestionMeuleForm").CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, strCode
End With
End Sub
'
Lupin
|
Bonjour,
Dans mon cas je créer une feuille dynamiquement dans le code et je créer un bouton dans celle ci, mais quand je veux insérer du code a la ligne : With ThisWorkbook.VBProject.VBComponents(IntituleCre).CodeModule Il me sort l'erreur : "Erreur d'execution 9 : L'indice n'appartient pas à la selection" Et ceci peut importe ce que je met dans le with (meme quand le with est vide ...) Aurais-je oublié qqchose ? Configuration: Windows XP Internet Explorer 6.0 |
Bonjour Stim,
With ThisWorkbook.VBProject.VBComponents(IntituleCre).CodeModule devrait se lire : With ThisWorkbook.VBProject.VBComponents("IntituleCre").CodeModule à moins que [ IntituleCre ] soit une variable et dans ce cas, c'est qu'elle n'a pas été initialisé. Lupin Configuration: Windows XP Internet Explorer 6.0 |
Merci pour la précision lupin ;)
Mais le probleme n'est pas la en fait ^^ (IntituleCre est bien une variable qui contient le nom de la feuil) Je viens de voir (en listant les vbcomponents) qu'en fait le component s'appelle "Feuil6" et cela marche très bien quand j'utilise ce nom la ... donc en fait, il me faudrait une méthode qui me renvoi le nom VB de cette feuille... Configuration: Windows XP Internet Explorer 6.0 |
re :
du genre :
Sub ChercheFeuille()
Dim VBP As Variant
Dim VBC As VBComponent
Dim Message As String
On Error Resume Next
Set VBP = ActiveWorkbook.VBProject
Message = ""
With VBP
For Each VBC In .VBComponents
'Message = Message & vbLf & VBC.Name
Select Case VBC.Type
'Case 1: Message = Message & vbLf & "Module "
'Case 2: Message = Message & vbLf & "Class Module "
'Case 3: Message = Message & vbLf & "UserForm "
Case 100: Message = Message & vbLf & "Document Module " & VBC.Name
End Select
Next VBC
End With
MsgBox Message
End Sub
'
Lupin Configuration: Windows XP Internet Explorer 6.0
|
En fait plus simplement j'ai trouvé la fonction "ActiveSheet.CodeName" qui me permet de récupérer le nom interne de la feuille, demandée par la fonction VBComponents...
Apres savoir pourquoi je peut pas mettre en direct le nom externe de la feuille ... la ca me dépasse ^^ Merci quand meme pour toutes tes réponses Lupin ;) ++ |
Bonjour
Je ne suis pas super fort en VBA sur Excel, donc j'aurais besoin d'un petit coups de mains. je vous explique un peu la structure de mon fichier. j'ai une feuille de config qui me permet de créer toutes les autres autres feuilles du classeur. dans ces feuilles, j'ai une feuille qui sert de "base" où je veux créé des boutons dynamiquement suivant le nom donné dans ma feuille de config. c'est bouton devrais me faire aller directement à la feuille choisit ex: bouton nommé "groupe" m'envoie sur la feuille "groupe" Mon problème c'est que je ne sais pas comment récupérer le nom du boutons. voici le code que j'envisager sub choix_feuille() dim nom_feuille as string nom_feuille = ??????????? if feuille_existe then sheets(nom_feuille).select range("A1").select else msgbox ("Impossible, la feuille n'existe pas) end if Merci de votre aide |
Bonjour,
En supposant que la feuille de config se nomme [ Base ] ! En supposant que le bouton est placé sur la feuiile Base et qu'il se nomme [ Groupe ] ! Placer ce code derrière la feuille :
Option Explicit
Private Sub Groupe_Click()
Call Module1.Choix_Feuille(Me.Groupe.Name)
End Sub
et placer ce code dans un module nommé [ Module1 ].
Option Explicit
Sub Choix_Feuille(Nom_Feuille As String)
Nom_Feuille = Sheets("Base").Groupe.Name
If (Feuille_Existe(Nom_Feuille)) Then
Sheets(Nom_Feuille).Select
Range("A1").Select
Else
MsgBox "Impossible, la feuille n'existe pas"
End If
End Sub
'
Public Function Feuille_Existe(Feuille As String) As Boolean
Dim wsFeuille As Worksheet
Feuille_Existe = False
For Each wsFeuille In Worksheets
If (wsFeuille.Name = Feuille) Then
Feuille_Existe = True
Exit For
End If
Next wsFeuille
End Function
'
|
Salut
Merci pour cette reponse En fait ce que je voudrais, c'est de recupérer le nom du bouton qui ce nomme "groupe" dans la variable Nom_feuille de ma mcaro ci-dessous. Sub Choix_Feuille(Nom_Feuille As String) Nom_Feuille = ??? nom_du_bouton_sur lequel je click ?????? If (Feuille_Existe(Nom_Feuille)) Then Sheets(Nom_Feuille).Select Range("A1").Select Else MsgBox "Impossible, la feuille n'existe pas" End If End Sub Je voudrais faire comme ça, car j'ai une macro qui me crée mes boutons en fonction d'une base (la feuille de config ). donc chaque bouton porte un nom qui correspond à une feuille et tous les boutons pointent sur la macro "choix_feuille" ci dessus. C'est pour ça que je veux recuperer le nom du bouton pour que lors du click sur le bouton groupe1 je vais sur la feuille groupe1 si je clik sur groupe2 je vais sur la groupe2 et ainsi de suite. Je n'ai pas très bien compris comment fonctionne ta solution, mais je crois qu'il faut connaitre le nombre de boutons et créer une macro par bouton. Si j'ai bien compris, ta solution ne convient pas trop à ce que je voudrais faire car je ne connais pas le nombre de bouton qui sera créé car il sont créés à partir de la feuille de config et par conséquent je ne peu créer autant de macro que de bouton. d'ou la solution que voudrais mettre en place, mais je suis bloqué sur la manière de récupérer le nom du bouton sur lequel je click. Deplus cela permet de fair des bouton dynamique. Merci de ton aide si tu voie une autre maniere pour arriver à ce que je veux suis preuneur. |
re:
la il y a un problème !!! Sous VBA il est impossible de créer un groupe de controle, donc chaque bouton renvoie a une routine distincte ! ex: Si le premier Bouton se nomme [ Groupe1 ] Lorsque tu clique sur le bouton tu arrives sur la procédure : Private Sub Groupe1_Click() End Sub ainsi tu appelle ta procédure en passant le nom du bouton. Private Sub Groupe1_Click() Call Module1.Choix_Feuille("Groupe1") End Sub ' Si tes boutons, s'insère en dynamique, tu devras aussi insérer le code correspondant de façon dynamique ! Lupin |
Bonjour,
je fais mes premiers pas seul sur Visual basic et j'essaie de comprendre une série d'exercices simples que je commenc à faire (avec un peu de difficultés...) j'essaie donc de créer sur ma feuille excel des boutons via visaul basic dans le cadre de la macro. De base, il s'agit d'un exercice sur uen fonction de calcul de cercle dans lequel j'ai évidemment encodé la valeur de pi, celle du rayon, ... mais je n'arrive pas à cerner comment faire apparaitre sur ma feuille les boutons que je tente de créer (style appel_u_calcul , appel_p_calcul) et comment faire apparaitre un bouton "bouton form appel usf". Car je n'arrive pas à créer et donc à faire le calcul avec userform Bref, des premiers pas difficiles ; merci de l'aide apporter à ce petit sms d'un terrien en détresse |
Bonjour,
Si je comprends bien vous tenter de créer un/des bouton(s) sur une feuille de facon dynamique. Commencer déja par faire les manipulations une fois sous l'enregistreur de macro ! Menu Excel // Outils / Macro / Nouvelle macro Décomposé vos actions en plusieurs petites macros. Exemple Créer un bouton Créer le code associé ( la fonction de calcul ) ! Attacher les morceaux Epurer les macros Créer la routine Sous Excel Alt F11 Faite un copier/coller du code généré par l'enregistreur et je vous guiderai pour le nettoyage et l'ajout de boucle et condition. A la base je puis vous conseiller d'utiliser le classeur que j'ai publié sur Excel-DownLoad http://www.excel-downloads.com/... Rechercher VizioXla, vous aurez une modele de base pour presque tous les objets d'excel ! Lupin |
Bonsoir,
Je rencontre le même genre de soucis que les personnes précédentes, je m'explique : dans un onglet de mon classeur excel je crée dynamiquement des boutons associés à une macro qui me permettent de restituer dans un autre onglet des données filtrées sur le numéro de projet listé. Tous mes boutons mènent vers la même macro qui doit pouvoir identifier la ligne sur laquelle est placé le bouton cliqué, hors je ne trouve pas comment récupérer la ligne afin de savoir sur quoi filtrer ma restitution. Merci d'avance de votre aide |
| 03/06 15h18 | Création d'image Système (Ghost) | Systèmes d'exploitation |
| 20/01 11h09 | Créer un site en pensant à son référencement | Référencement |
| 20/09 18h47 | Liens utiles | Visual Basic |
| 10/12 11h42 | Créer un site beau, dynamique et respectueux des standards | Webmaster |
| 03/04 20h30 | Transformer un fichier Microsoft Excel (.xls) en PDF | OpenOffice.org |
| 14/07 11h50 | Echange dynamique access excel via VBA | 1 |
| 30/04 11h27 | Afficher des valeurs dans excel via vba | 11 |
| 21/12 14h52 | Exploitation d'une liste excel via vba | 6 |
| 26/09 13h06 | Piloter un programme avec excel, via VBA | 1 |
![]() | DeKnop - DeKnop ("LeBouton" en hollandais) est une application qui permet de créer des boutons pour les pages Web. Son utilisation... | Catégorie: Webmaster Licence: Freeware/gratuit |
![]() | Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | PDF Creator - PDF Creator est un outil gratuit permettant de créer des PDF à partir de presque n'importe quelle application capable... | Catégorie: PDF Licence: Open Source |
![]() | AVS Disc Creator - Avec AVS DiscCreator vous pouvez rapidement graver vos données sur CD/DVD et Blu-ray disc. <h2>Fonctionnalités</h2> ... | Catégorie: Gravure Licence: Freeware/gratuit |
![]() | EI Systems 3088 VIA | Catégorie: Ordinateur portable | |
![]() | HP Thin Client T5125 | Catégorie: Ordinateur de bureau | |
![]() | BE@NET Mini-ITX Multimédia VIA | Catégorie: Ordinateur de bureau | |
![]() | Creative Zen 4 Go | Catégorie: Lecteur MP3 | 77.90 € Pixmania |