Excel Downloads
Forum

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


Réponse
 
LinkBack Outils de la discussion
Vieux 29/08/2005, 17h50   #1 (permalink)
Ludo
Guest
 
Messages: n/a
Par défaut Creation "onEvent" par vba

Bonjour a tous,

je bloque bien comme il faut sur le probleme suivant:
J'ai 10 celulles renseignées sur une feuill excel.
Quand je lance une macro, je cree dans un formulaire un Label pour chaque cellule.
Donc de label i a i+10, les label sont nommes 'label' & i

Jusque la ca va.

je voudrais, pour chaque label crée, pouvoir assigner un truc du genre:

labeli_click()
msgbox('label Numero' & i)
end sub

Et ce, de maniere automatique lors de la creation du form, comme ca quand le forme apparait et que je clique sur un label, le petit msgbox apparait

J'y arrive pas. Mais est ce possible??


J'espere que le probleme est clair (..) et vous remercie 10000 fois pour votre precieuse aide..


Ludo
  Réponse avec citation
ANNONCES
Vieux 29/08/2005, 19h00   #2 (permalink)
XLDnaute Barbatruc
 
Date d'inscription: février 2005
Messages: 3 100
Par défaut Re:Creation "onEvent" par vba

Bonjour Ludo, le Forum

Ce genre de code WithEvents est ce que je suis en train d'appronfondir sur des Modules de Class, mais de là à le générer automatiquement, je ne me suis en fait jamais encore retrouvé à un tel besoin...

La difficulté majeure dans cette éventualité sera d'écrire dans deux endroit bien distincts du VBProject, le Module du UserForm lui-même mais aussi et surtout dans un Module de Class... Tout en synchronisant les Informations...

Dans un premier temps, quoique que l'idée soit interressante, je vais t'orienter vers une solution basic plus facile et plus rapide (pour moi aussi !! lol)

Donc une fois ton UserForm généré, si tu ne l'as pas nommé autrement il devrait se nommer UserForm1. Comme tu dis savoir générer tes 10 Labels nommés 'Label1, Label2, Label3, ... etc Label10' donc il te suffira d'enchainer cette procédure :

Citation:
Sub MyLabelClicks()
Dim x AsInteger
Dim L AsByte

   
With ThisWorkbook.VBProject.VBComponents('UserForm1').C odeModule
       
For L = 1 To 10
            x = .CountOfLines
            .InsertLines x + 1, 'Sub Label' & L & '_Click()'
            .InsertLines x + 2, 'MsgBox ''Label Numero ' & L & ''
            .InsertLines x + 3, 'End Sub'
       
Next
   
EndWith

EndSub

Bonne Fin de Journée
[ol]@+Thierry[/ol]
_Thierry est déconnecté   Réponse avec citation
Vieux 30/08/2005, 10h25   #3 (permalink)
Ludo
Guest
 
Messages: n/a
Par défaut Re:Creation "onEvent" par vba

Thierry,

merci beaucoup pour la röponse ca a l'air de fonctionner

Mais ca fonctionne seulement si les labels sont crées manuellement dans le formulaire.

En fait, n'etant point du tout un expert en vb, je me demande un truc:
les labels crées dynamiquement, peut on les enregistrer 'reelement' dans le formulaire, c'est a dire que si je le ferme et que je le re ouvre, les labels crees soient encore la?

le code de l'event est bien ecrit mais rien ne se passe quand je clique sur mes labels, comme si les labels n'existaient pas vraiment

Pauvres petits labels....


Aurait tu (vous) une astuce pour ce probleme??


Merci d'avance


Ludo
  Réponse avec citation
Vieux 30/08/2005, 11h45   #4 (permalink)
XLDnaute Barbatruc
 
Date d'inscription: février 2005
Messages: 3 100
Par défaut => DEMO AutoGeneration UserForm par Programmation

Bonjour Ludo, le Forum

Arf oui les Pauvres petits Labels....

Pour ton sas, sans le code je ne sais pas trop dans quoi tu 'farfouilles' mais si, admettons, j'avais à générer un UserForm avec 40 TextBoxs accompagnées de 40 Labels le tout alligné en collonne de 10 en 10

Ceci avec ces 40 Labels qui devraient donc réagir au Click avec un MsgBox... Tout en conservant le UserForm ainsi généré avec tous ses Controls ActiveX, voici comme je procèderai :

Citation:
OptionExplicit

'================================R E A D - M E======================================
'
'        NB Nécessite la Réference VB à Microsoft Form 2.0 Object Library
'          Paramétrage Sécurité 'Faire Confiance au Projet Visual Basic'
'================================================= ==================================

Const Sign AsString = '@+Thierry 's Truc sur www.Excel-Downloads.com, Aug 2005'
Const USFName AsString = 'USF_Auto_Thierry'

Const TxbWidth AsInteger = 65
Const TxbHeigth AsInteger = 15
Const TxbLeft AsInteger = 90
Const TxbTop AsInteger = 15

Const LblWidth AsInteger = 70
Const LblHeigth AsInteger = 15
Const LblLeft AsInteger = 10
Const LblTop AsInteger = 15

Sub MyUserFormAutoBuilder()
Dim ObjUSF AsObject
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB AsObject
Dim TopPlusHeight AsInteger
Dim x AsByte
Dim VLblLeft AsInteger
Dim VTxbLeft AsInteger

 
 
Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)
 
With ObjUSF
    .Properties('Caption') = Sign
    .Properties('Width') = 660
    .Properties('Height') = 195
    .Properties('ShowModal') =
True
'    .Properties('Name') = USFName 'Si on veut forcer un Nom de UserForm...
 
EndWith
 
   
For x = 1 To 40
       
     
Set ObjTextBox = ObjUSF.Designer.Controls.Add('Forms.TextBox.1')
     
Set ObjLabel = ObjUSF.Designer.Controls.Add('Forms.Label.1')
     
         
SelectCase x
           
Case 1 To 10
             
If x = 1 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft
              VTxbLeft = TxbLeft
           
Case 11 To 20
             
If x = 11 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 160
              VTxbLeft = TxbLeft + 160
           
Case 21 To 30
             
If x = 21 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 320
              VTxbLeft = TxbLeft + 320
           
Case 31 To 40
             
If x = 31 Then TopPlusHeight = LblTop
              VLblLeft = LblLeft + 480
              VTxbLeft = TxbLeft + 480
         
EndSelect
             
         
         
With ObjLabel
            .Caption = 'Label TextBox ' & x
            .Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
            .Tag = 'Thierry
's Demo'
            .Name = 'LblDemo' & x
         
EndWith
         
With ObjTextBox
            .Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
            .Tag = 'Thierry
's Demo'
            .Name = 'TxbDemo' & x
            .TextAlign = fmTextAlignRight
         
EndWith
         
        TopPlusHeight = TopPlusHeight + 15
   
Next

MyLabelClicks ObjUSF.Name

VBA.UserForms.Add(ObjUSF.Name).Show
 
Set ObjUSF = Nothing
Set ObjTextBox = Nothing
Set ObjLabel = Nothing

EndSub

Sub MyLabelClicks(MyUsf As String)
Dim x AsInteger
Dim L AsByte

   
With ThisWorkbook.VBProject.VBComponents(MyUsf).CodeMod ule
       
For L = 1 To 40
            x = .CountOfLines
            .InsertLines x + 1, 'Sub LblDemo' & L & '_Click()'
            .InsertLines x + 2, 'MsgBox ''Je suis la Label Numero ' & L & ''
            .InsertLines x + 3, 'End Sub'
       
Next
   
EndWith

EndSub

Bonne Journée
[ol]@+Thierry[/ol]
_Thierry est déconnecté   Réponse avec citation
Vieux 30/08/2005, 11h56   #5 (permalink)
Ludo
Guest
 
Messages: n/a
Par défaut Re:Creation "onEvent" par vba

Op op op

Je viens de touver une solution qui est pas trop mal est qui fonctionne bien donc je me permet de l'ecrire, au cas ou qulequ'un s'interresse au sujet ..

Donc, j'ai utilisé un module de class.
Sur Userform_initialize, je lance ma procedure qui rajoute mes 10 petits labels, de label i a i+10.

Puis, a la suite de ce 'lancement',2 choses:
- Dans un modul de class, pour les Labels lui appartenant, il faut afficher msgbox 'label'i sur un click.
- Dans mon userform_initialize, je fait l'inventaire des labels presants, je 'lie' les labels crées au modul de class.

De ce fait, le 'groupe' de label apaprtenant au modul de class se voit 'infliger' une msgbox chacun!!


Merci en tout cas pour l'aide, bien cool le forum


A bientot pour de nouvelles aventures !


Ludo
  Réponse avec citation
Vieux 30/08/2005, 12h06   #6 (permalink)
Ludo
Guest
 
Messages: n/a
Par défaut Re:Creation "onEvent" par vba

Thierry,

Desole, nos messages se sont croisés!!

Je vais lire attentivement ton code puis essayer de le comprendre

merci en tout cas pour tes reponses bein sympa
J’ai mis mon (debut) de fichier en piece jointe.

En fait j’essaye de créer dynamiquement un « menu déroulant ».
L’arborescence est dans des cellules avec la forme « tree ».

C’est juste pour le challenge et pour apprendre un peu le VB, ça n’a pas grande utilité pour l’instant.
Mon but final etant de gerer Visible pour les labels sur mousemouve, pour vraiment donner l’impressiont du déroulant….


Merci encore pour les reponses, et si ca t’interesse, je te tiendrais au courrant de mon avancée !!!

Merci

Ludo
[file name=menu_20050830110610.zip size=21592]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/menu_20050830110610.zip[/file]
Fichiers attachés
Type de fichier : zip menu_20050830110610.zip (21,1 Ko, 4 affichages)
  Réponse avec citation
ANNONCES
Réponse

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 02h18.


(C) 2006 Excel Downloads