Créer des objets sous condition

Résolu
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

  1. Modérateur
    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.
    1. Merci pour ta réponse, mais n'aurait-tu pas même une petite idée pour intégrer une checkBox dans un userform ??
  2. Modérateur
    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

    1. Merci d'avoir répondu je vais essayer tout ça.
    2. 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
    3. Modérateur
      @Come on RogerBonjour,

      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"...
    4. 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"
    5. Modérateur
      @Come on RogerOui, 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