utiliser un evenement sur un controle créé dynamiquement

utiliser un evenement sur un controle créé dynamiquement - VB/VBA/VBS - Programmation

Marsh Posté le 01-02-2007 à 16:44:38    

Bonjous a tous  
 
sur VB Excel(2003)
j'ai créé un userform (userform) dans lequel un bouton lance la creation de control (textbox et label)
 
Avec la syntaxe suivant  
Dim ctl As label
 
Set ctl = Me.Controls.Add("Forms.Label.1", "label" + Trim(Str(c)))
 
With ctl
    .Left = 12
    .Top = vtop + vltop
    .Caption = cell.Offset(0, -1).Value
End With
 
la
 

Reply

Marsh Posté le 01-02-2007 à 16:44:38   

Reply

Marsh Posté le 01-02-2007 à 16:51:49    

Zut j'ai valider par erreur ..
 
je reprend ..
la creation des controls se fait sans probleme , ce que je n'arrive pas a faire c'est utiliser les controles créés dans des evenement  
 
exemple  
sauf erreur de ma part ci-dessus j'ai crée un label nommer label1 (c=1)
comment utiliser l'evenement click ?
Private Sub label1_click()
 
        Label1.Caption = "Control was Added."
     
End Sub
 
 
j'ai trouver et essayé des tas de "script" en provenance du net aucun ne fonctionne  
please help me !
 
 
 

Reply

Marsh Posté le 01-02-2007 à 22:30:33    

Si le nom de ton label est fixé à l'avance, tu peux générer automatiquement le code de ton événement dans ta feuille.


Message édité par Paul Hood le 01-02-2007 à 22:31:07
Reply

Marsh Posté le 02-02-2007 à 05:05:48    

A adapter à tes besoins


' Sous VBA Cocher dans Outils | Références Microsoft Forms 2.0 Object Library
' Pour cela : Cliquer Parcourir | Ajouter une référence
' puis aller dans C:\Windows\System32\ pour sélectionner FM20.dll
 
Option Explicit
 
Sub Tst()
    EssaiAvecBouton "Essai création par code"
End Sub
 
Sub EssaiAvecBouton(ByVal Titre As String)
Dim UserForm As Object
    Set UserForm = CreationFormAvecBouton(Titre)
    UserForm.Show
    DelComp UserForm.Name
    Unload UserForm
    Set UserForm = Nothing
End Sub
 
Function CreationFormAvecBouton(ByVal Titre As String) As Object
Dim Form As Object, Cbox1 As Object, Btn1 As Object, Btn2 As Object
Dim TxtBox1 As Object
Dim x As Long, Code As String
 
    Application.VBE.MainWindow.Visible = False
 
    Set Form = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Form
        .Properties("Caption" ) = Titre
        .Properties("Width" ) = 250
        .Properties("Height" ) = 100
    End With
 
    Set TxtBox1 = Form.Designer.Controls.Add("forms.textbox.1" )
    With TxtBox1
        .Left = 60
        .Top = 20
    End With
 
    Set Btn1 = Form.Designer.Controls.Add("forms.commandbutton.1" )
    With Btn1
        .Caption = "Ok"
        .Left = 60
        .Top = 50
    End With
 
    With Form.CodeModule
        x = .CountOfLines + 1
        Code = "Sub CommandButton1_Click()" & vbCrLf
        Code = Code & "Dim s As String" & vbCrLf
        Code = Code & "  s=Textbox1.text" & vbCrLf
        Code = Code & "  ThisWorkBook.Coucou(s)" & vbCrLf
        Code = Code & "  Me.Hide" & vbCrLf
        Code = Code & "End Sub" & vbCrLf        
        .InsertLines x, Code
    End With
     
    Set Btn2 = Form.Designer.Controls.Add("forms.commandbutton.1" )
    With Btn2
        .Caption = "Annuler"
        .Left = Btn1.Left + Btn1.Width + 10
        .Top = Btn1.Top
    End With
 
    With Form.CodeModule
        x = .CountOfLines + 1        
        Code = "Sub CommandButton2_Click()" & vbCrLf
        Code = Code & "  Me.Hide" & vbCrLf
        Code = Code & "End Sub" & vbCrLf & vbCrLf    
        Code = Code & "Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)" & vbCrLf
        Code = Code & "   If CloseMode = 0 Then Cancel = True" & vbCrLf
        Code = Code & "End Sub" & vbCrLf        
        .InsertLines x, Code
    End With
 
    Set Cbox1 = Form.Designer.Controls.Add("forms.ComboBox.1" )
    With Cbox1
        .Left = TxtBox1.Left + TxtBox1.Width + 10
        .Top = TxtBox1.Top
        .Style = fmStyleDropDownList
        .BackColor = &HC0FFFF
        .ListRows = 32
    End With
 
    With Form.CodeModule
        x = .CountOfLines + 1        
        Code = "Private Sub UserForm_Initialize()" & vbCrLf
        Code = Code & " MajCbo1" & vbCrLf
        Code = Code & "End Sub" & vbCrLf        
        .InsertLines x, Code
    End With
     
    With Form.CodeModule
        x = .CountOfLines + 1        
        Code = "Sub MajCbo1()" & vbCrLf
        Code = Code & "Dim i as Integer" & vbCrLf
        Code = Code & "   With ComboBox1" & vbCrLf
        Code = Code & "       For i=1 to 10" & vbCrLf
        Code = Code & "           .AddItem i " & vbCrLf
        Code = Code & "       Next" & vbCrLf
        Code = Code & "   End With" & vbCrLf
        Code = Code & "End Sub" & vbCrLf        
        .InsertLines x, Code
    End With
     
    VBA.UserForms.Add (Form.Name)
    Set CreationFormAvecBouton = UserForms(UserForms.Count - 1)
 
End Function
 
Sub DelComp(ByVal Nom As String)
    With ThisWorkbook.VBProject.VBComponents
        .Remove .Item(Nom)
    End With
End Sub
 
Function Coucou(ByVal Chaine As String) As String
    Sh1.Cells.Clear
    Sh1.Cells(1, 1) = Chaine
End Function


Message édité par kiki29 le 09-02-2007 à 05:10:31
Reply

Marsh Posté le 08-02-2007 à 16:35:17    

Bonjour, je cherche a faire du control dynamique mais pas moyen d'utiliser la fonction "set". Il me dit que la fonction n'est plus utilisée
Set ctl = Me.Controls.Add("Forms.Label.1", "label" + Trim(Str(c)))  
 
Je ne peut donc pas créer un controle a partir de chaine de caractere, avez vous une solution?  
(je suis sous VB2003)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed