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

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    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
    1. 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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. Come on Roger
       
      Merci d'avoir répondu je vais essayer tout ça.
      0
    2. 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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    4. 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
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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