Créer des objets sous condition

Résolu
Come on Roger -  
 Come on Roger -
Bonjour

Je suis débutant en vba et j'aimerais savoir si il est possible de créer des objets (en particulier checkBox) tout cela à travers du code. D'avance merci

2 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
En VBA, peut être, mais assez complique si tu veux que ça soit sur une UserForm.
si c'est pour en ajouter sur une feuille de calcul, regardes le code généré à partir de l'enregistreur de macro.
0
Come on Roger
 
Merci pour ta réponse, mais n'aurait-tu pas même une petite idée pour intégrer une checkBox dans un userform ??
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Pour ajouter un CheckBox dans un Userform de manière dynamique par le code :

1- ouvre un nouveau classeur ,
2- Alt + F11
3- insertion/UserForm
4- le code, dans le module de l'userform est :
Private Sub UserForm_Initialize()
Dim Obj As Object
   Set Obj = Me.Controls.Add("forms.CheckBox.1")
   With Obj
      .Move 6, 6, 80, 20
      .Name = "myCheck"
      .Value = False
      .Caption = "Cochez-moi!"
   End With
   Me.Move Me.Left, Me.Top, 200, 200
End Sub


Ou alors, si tu veux en insérer plusieurs (5 dans l'exemple) :
Private Sub UserForm_Initialize()
Dim Obj As Object, Cpt As Byte
For Cpt = 1 To 5
   Set Obj = Me.Controls.Add("forms.CheckBox.1")
   With Obj
      .Move 6, 6 + (20 * (Cpt - 1)), 80, 20
      .Name = "myCheck" & Cpt
      .Value = False
      .Caption = "Cochez-moi!"
   End With
Next
Me.Move Me.Left, Me.Top, 200, 200
End Sub

0
Come on Roger
 
Merci d'avoir répondu je vais essayer tout ça.
0
Come on Roger
 
Bonjour
Maintenant j'arrive bien à créer les objets dans une boucle, cependant une fois créés, je n'arrive pas à communiquer avec ces objets.Voilà mon code:
Dim i As Integer
Dim obj As Object

While (Range("B" & i).Text <> "\")
         If (Range("B" & i) <>"" Then
          Set obj = Me.Controls.Add("forms.OptionButton.1")
                    With obj
                            .Name = "OptionButton"
                                          [ ... ]
                    End With
         End If
         i = i + 1
Wend

MsgBox OptionButton1.Value   'En arrivant sur le MsgBox, j'ai un message d'erreur "Objet requis"


En attendant une réponse, d'avance merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > Come on Roger
 
Bonjour,

Tu leur donne à tous le même Name. C'est pas possible.
Remplace donc :
Name = "OptionButton" 

par :
Name = "OptionButton" & i

Et ensuite utilise leur véritable nom qui sera "OptionButton1" "OptionButton3" "OptionButton18"...
0
Come on Roger
 
C'est ce que j'ai fait avant, mais je pensait que le système les numérotait automatiquement. Et le problème reste le même, il m'affiche toujours un message d'erreur "objet requis"
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > Come on Roger
 
Oui, pardon, tu as raison.
Comme je n'ai pas testé, je n'ai pas fait attention à cela.
Comme l'objet n'est pas présent dans l'userform, lors de l'initialize, VBA considère que OptionButton1 écrit comme ça est une variable. Or non déclarée, cela engendre une erreur.
Pour résoudre ceci, il convient d'utiliser la syntaxe :
MsgBox Me.Controls("OptionButton3").Value
0