creation dynamique de control avec code
bonjour,
voilà je me suis inspiré de l'exemple de la FAQ pour créer dans un formulaire un bouton avec du code derriere.
voici le code (le code en commentaire etait le code initial dans l'exemple de la faq)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
Public Sub CreerBoutonCode(NombrePartie As Integer, NomForm As String)
Dim ctl As Control
'Ouvrir le formulaire en mode création
DoCmd.OpenForm NomForm, acDesign
'Crée un contrôle "Groupe d'options" :
Set ctl = CreateControl(NomForm, acCommandButton, , "", "", 2500, 800 + NombrePartie * 500, 1500, 300)
With ctl
'Définit un nom pour le contrôle
.Name = "Test"
'Déclare l'événement "Après mise à jour" du contrôle
.OnClick = "[Event Procedure]"
End With
'Normalement il ne nous reste plus qu'à écrire la procédure
'événementielle avec Module.CreateEventProc
'Mais étant donné que nous avons créé un groupe d'option
'il faut maintenant créer à l'intérieur,
'un contrôle pour chaque option (nous allons pour cela nous servir
'de l'argument "Parent" de la méthode CreateControl).
'Créons par exemple un bouton d'option :
'Set ctl = CreateControl(NomForm, acOptionButton, , ctl.Name, , 1500, 4000)
'With ctl
' .Name = "option1"
' .OptionValue = 1
'End With
'Et maintenant, création du code à éxécuter sur AfterUpdate de Options :
Dim mdl As Module
Dim lng As Long 'Sert à récupérer le numéro de la ligne d'insertion de la procédure
Set mdl = Forms![NomForm].Module
lng = mdl.CreateEventProc("OnClick", "Test")
mdl.InsertLines lng + 1, _
vbTab & _
"MsgBox " & Chr(34) & "Vous avez choisi 1." & Chr(34)
'"If(option1.value = 2) then MsgBox " & Chr(34) & "Vous avez choisi 1." & Chr(34)
'On libère mémoire allouées aux variables.
Set ctl = Nothing
Set mdl = Nothing
End Sub |
j'ai une erreur lors de l'execution sur la ligne :
Set mdl = Forms![NomForm].Module
erreur : "impossible de trouver le formulaire nomform....."
je comprend vraiment pas l'erreur car le bouton a bien été créé sur mon formulaire (donc il l'a bien trouvé avant! pourquoi il le trouve plus à cette ligne?:roll: )
A la fin (lors de l'erreur) le bouton a été créé et le formulaire est toujours ouvert.
une idée?:?
petites questions supplémentaires (peut etre que le pb vient de là car je ne comprend pas ces lignes).
1) que fait :
Code:
1 2
| 'Déclare l'événement "Après mise à jour" du contrôle
.OnClick = "[Event Procedure]" |
j'ai changé le afterupdate par onclick car au final je voudrais que mon code s'execute lors d'un clique sur mon commandbutton.
2) et ca:
Code:
lng = mdl.CreateEventProc("OnClick", "Test")
mon "onclick" est pour cette procédure un eventname mais je comprend pas d'où ca vient, ce que ca fait....
c'est en lien avec cette ligne?
Code:
1 2
| 'Déclare l'événement "Après mise à jour" du contrôle
.OnClick = "[Event Procedure]" |
voilà ce sera tout :mouarf:
merci d'avance