IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer une boucle sur un nbr n de checkbox, n étant variable [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 52
    Points : 22
    Points
    22
    Par défaut Créer une boucle sur un nbr n de checkbox, n étant variable
    Bonjour,
    Je cherche à créer un certain nombre de checkboxs en fonction de la taille (n) variable dépendant d'un critère.

    Pour exemple :
    Mon critère c'est "Homme" avec pour nombre de checkbox corréspondant aux nombres de ses caractéritiques (sexe, taille, age, poids). Nbre de checkbox = 4
    Ensuite si je veux changer de critère je choisis "Région" avec pour nombre de checkboxs ses caratéristiques (nbre d'habitant, type de climat) . Nbre de checkbox = 2
    Et donc le critère "Homme" et "Region" ne vont pas avoir le même nombre de checkboxs lorsque je vais ouvrir mon userform. 4<>2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Add_Dynamic_Checkbox()
     
    Dim DernLigne As Integer
    Dim DerColonne As Integer
    Dim a As Range
    Dim i As Integer
    Dim critere As Integer
    Dim Cbx() As OLEObjects
     
    ' trouve l'adresse et renvoie le nbr max de colonne du critère désiré
    DernLigne = Worksheets("Listes").Range("L4").End(xlDown).Row
    Set a = Worksheets("Listes").Range("L4:L" & DernLigne).Find(Worksheets("Saisie").Range("E12"), lookat:=xlWhole)
    critere= a.Row
    DerColonne = Worksheets("Listes").Range("L" & critere).End(xlToRight).Column
    ' création des checkboxs
    For i = 13 To DerColonne
            Set Cbx(i) = UserSegment.Controls.Add("Forms.CheckBox.1")
            Cbx(i).Caption = Worksheets("Listes").Cells(critere, i)
    Next i
    End Sub
    Je n'arrive pas à créer un tableau de ce style : Cbx(i)

    Avez vous une piste ou une solution à mon problème.
    Pour infos je me suis renseigné au près de ce site : https://analysistabs.com/vba-code/ex...form/checkbox/
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Construisez toutes vos checkbox et masquez-les ou affichez-les selon le critère choisi, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        CheckBox1.Visible = False
        CheckBox1.Visible = true
    Vous pouvez aussi créer 2 formulaires, 1 pour "Homme" et l'autre pour "Région", que vous ouvrirez là aussi selon le critère choisi.

    Cdlt

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Je me suis d'abord orienté vers cette solution qui fonctionne parfaitement mais si je dois rajouter des critères, le fait de rajouter une ligne dans mon Excel sera beaucoup plus rapide que de modifier tout mon code.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 52
    Points : 22
    Points
    22
    Par défaut
    J'ai trouvé la solution à ma réponse, j'y étais presque. Je vous donne la réponse.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub Add_Dynamic_Checkbox()
     
    Dim DernLigne As Integer
    Dim DerColonne As Integer
    Dim a As Range
    Dim i As Integer
    Dim critere As Integer
    Dim Cbx As Control
    ' trouve l'adresse et renvoie le numéro de colonne du critere désiré
    DernLigne = Worksheets("Listes").Range("L4").End(xlDown).Row
    Set a = Worksheets("Listes").Range("L4:L" & DernLigne).Find(Worksheets("Saisie").Range("E12"), lookat:=xlWhole)
    critere= a.Row
    DerColonne = Worksheets("Listes").Range("L" & critere).End(xlToRight).Column
     
    For i = 13 To DerColonne
            Set Cbx = UserSegment.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i - 12)
            Cbx.Caption = Worksheets("Listes").Cells(critere, i).Value
    'mise en forme        
            If i - 12 < 6 Then
                Cbx.Left = 5 + ((i - 13) * 90)
                Cbx.Top = 5 + 30
                Cbx.Height = 40
                Cbx.Width = 90
            ElseIf i - 12 < 12 Then
                Cbx.Top = 5 + 60
                Cbx.Left = 5 + ((i - 18) * 90)
                Cbx.Height = 40
                Cbx.Width = 90
            Else
                Cbx.Top = 5 + 90
                Cbx.Left = 5 + ((i - 24) * 90)
                Cbx.Height = 40
                Cbx.Width = 90
            End If
    Next i
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Créer une boucle pour action d'une fonction sur des cellules
    Par frenche1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2017, 23h24
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. [XL-2007] Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/09/2009, 17h12
  4. Créer une boucle sur crystal report
    Par futurist dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 13/05/2008, 17h24
  5. [XSLT]créer une boucle
    Par fraoustin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/01/2005, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo