Créer des objets sous condition

Résolu/Fermé
Come on Roger - 5 juin 2015 à 23:16
 Come on Roger - 12 juin 2015 à 19:06
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 15185 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 8 janvier 2025 351
6 juin 2015 à 00:14
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
8 juin 2015 à 15:11
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
9 juin 2015 à 08:37
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
9 juin 2015 à 12:37
Merci d'avoir répondu je vais essayer tout ça.
0
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > Come on Roger
12 juin 2015 à 10:02
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
12 juin 2015 à 13:14
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > Come on Roger
12 juin 2015 à 13:20
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