Propriété (name) à changer par programme

flamel

XLDnaute Nouveau
Bonjour.

Existe-t-il un moyen de modifier la Propriété ' (Name) ' par programmation pour des Labels ou des Commandbuttons ?

Je crée des Labels sur UserForm par programme, mais il ne répondent pas au clic et je ne peux pas vérifier leurs Propriétés, donc le (Name) sous lequel ils sont réellement identifiés dans la machine.
A la fermeture de l' UserForm, on ne les retrouvent pas sur celui-ci comme on retrouve les Label créés individuellement.
Les codes s'inscrivent pourtant bien et ne s'effacent pas à la fermeture de l'UserForm.

Merci beaucoup si solution, car je sèche depuis longtemps la-dessus.

flamel
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Flamel, le Forum

J'ai retrouvé ce code aussi que j'avais fait pour ce Forum pour des actions de Click sur les Labels générés par programmation et comment les renommer également :

Option Explicit

'================================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 As String = '@+Thierry 's Truc sur www.Excel-Downloads.com, Aug 2005'
Const USFName As String = 'USF_Auto_Thierry'

Const TxbWidth As Integer = 65
Const TxbHeigth As Integer = 15
Const TxbLeft As Integer = 90
Const TxbTop As Integer = 15

Const LblWidth As Integer = 70
Const LblHeigth As Integer = 15
Const LblLeft As Integer = 10
Const LblTop As Integer = 15

Sub MyUserFormAutoBuilder()
Dim ObjUSF As Object
Dim ObjTextBox As Object, ObjLabel As Object, CmdB As Object, LstB As Object
Dim TopPlusHeight As Integer
Dim x As Byte
Dim VLblLeft As Integer
Dim VTxbLeft As Integer

 
 
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...
 
End With
 
   
For x = 1 To 40
       
     
Set ObjTextBox = ObjUSF.Designer.Controls.Add('Forms.TextBox.1')
     
Set ObjLabel = ObjUSF.Designer.Controls.Add('Forms.Label.1')
     
         
Select Case 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
         
End Select
             
         
         
With ObjLabel
            .Caption = 'Label TextBox ' & x
            .Left = VLblLeft: .Top = TopPlusHeight: .Width = LblWidth: .Height = LblHeigth
            .Tag = 'Thierry
's Demo'
            .Name = 'LblDemo' & x
         
End With
         
With ObjTextBox
            .Left = VTxbLeft: .Top = TopPlusHeight: .Width = TxbWidth: .Height = TxbHeigth
            .Tag = 'Thierry
's Demo'
            .Name = 'TxbDemo' & x
            .TextAlign = fmTextAlignRight
         
End With
         
        TopPlusHeight = TopPlusHeight + 15
   
Next

MyLabelClicks ObjUSF.Name

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

End Sub

Sub MyLabelClicks(MyUsf As String)
Dim x As Integer
Dim L As Byte

   
With ThisWorkbook.VBProject.VBComponents(MyUsf).CodeModule
       
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
   
End With

End Sub


Bonne Programmation !
[ol]@+Thierry[/ol]
 

flamel

XLDnaute Nouveau
Bonjour Thierry.

A quoi correspond le (3) entre parenthèses dans la ligne :

Set ObjUSF = ThisWorkbook.VBProject.VBComponents.Add(3)

Je manque de doc là-dessus et je ne trouve rien dans l'aide de MS.
Y a-t-il un livre avec index assez complet à conseiller ?

Ton prgramme marche bien, quoiqu'il crée chaque fois un nouvel userfrom, mais je n'arrive pas à l'adapter à mon fichier, trop important pour l'envoyer. Je devrais faire un exemple résumé.

Je voudrais reprendre dans ton fichier la partie de création de Labels seulement et la greffer dans mon fichier. Est-ce possible ?

Merci pour ton aide.

@+
flamel
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Flamel, le Forum

Désolé pour ce retard de réponse.

Pour ta dernière question au sujet du (3), en fait en tatonnant j'ai trouvé tout ceci :

Sub AddingVBComponents()
Dim ObjUserForm As Object
Dim ObjModuleStandard As Object
Dim ObjModuleDeClasse As Object


Set ObjModuleStandard = ThisWorkbook.VBProject.VBComponents.Add(1)
Set ObjModuleDeClasse = ThisWorkbook.VBProject.VBComponents.Add(2)
Set ObjUserForm = ThisWorkbook.VBProject.VBComponents.Add(3)

End Sub

Dans l'aide VBA je peux lire ceci :

Vous pouvez utiliser les constantes suivantes pour l'argument component :

Constante Description
vbext_ct_ClassModule Ajoute un module de classe à la collection.
Vbext_ct_MSForm Ajoute une feuille à la collection.
vbext_ct_StdModule Ajoute un module standard à la collection.


Par conséquent on peut également écrire ceci, mais il faudra activer en plus de la Réference VB à 'Microsoft Form 2.0 Object Library' une Référence VB à 'Microsoft Visual Basic For Applications Extensibility 5.3'


Et on pourra écrire la même chose comme ceci :

Sub AddingVBComponentsWithConstanteNames()
Dim ObjUserForm As Object
Dim ObjModuleStandard As Object
Dim ObjModuleDeClasse As Object


'NB Nécessite aussi la Référence à la librairie
'Microsoft Visual Basic For Applications Extensibility 5.3.


Set ObjModuleStandard = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
Set ObjModuleDeClasse = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_ClassModule)
Set ObjUserForm = ThisWorkbook.VBProject.VBComponents.Add(Vbext_ct_MSForm)


End Sub


Pour ta question 'quoiqu'il crée chaque fois un nouvel userform' si tu regardes le fichier USF_ListBox_A_La_Volee.zip que j'ai mis en lien, tu verras que le UserForm est bien auto-détruit à chaque usage....

Pour le reste, j'ai besoin de plus d'information.

Bonne Journée
[ol]@+Thierry[/ol]

EDITION !!!

Pour les bouquins, je recommande toujours ceux de John Walkenbach traitant du VBA.

Message édité par: _Thierry, à: 22/11/2005 08:33
 

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 761
Membres
103 661
dernier inscrit
fcleves