Créer des objets sous condition

Résolu/Fermé
Signaler
-
 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

Messages postés
14832
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
5 décembre 2021
311
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.

Merci pour ta réponse, mais n'aurait-tu pas même une petite idée pour intégrer une checkBox dans un userform ??
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 667
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

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
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 667 > 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"...

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"
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 667 > 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

Voilà ce que j'ai mis:

MsgBox Me.Controls("OptionButton1").Value

Et il me dit "Objet spécifié introuvable"