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 :

Checkbox créées dynamiquement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Checkbox créées dynamiquement
    Bonjour,
    Je travaille actuellement sur un projet pour une association qui permettrait de gérer les participants aux réunions et d'en retirer des statistiques.
    J'ai pour l'instant un tableau rempli grâce à des userforms, le bouton "ajouter session" permet de rajouter une colonne avec la date de la réunion. En face de chaque participant, dans la colonne correspondante à la session, j'ai écris des "X" pour noter la présence.

    J'aimerais qu'au lieu de s'écrire manuellement, ces "X" soit dépendants de checkbox créées en même temps que la colonne de la session.
    Donc quand je cliquerai sur créer, une liste de checkbox s'afficherait avec en face le nom et prénom dans chaque ligne remplie du tableau.

    J'ai pour l'instant ce code:
    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
    37
    38
    39
    40
    Private Sub btn_creer_Click()
        Dim i As Integer
                i = 11
                    Do While (Sheets("Participants").Cells(6, i).Value <> "")
                i = i + 1
                    Loop
     
        Sheets("Participants").Cells(6, i).Value=UserFormChantier.txt_session.Value
     
        Dim DLV As Long
                DLV = Range("B65536").End(xlUp).Row
        Dim k As Integer
        Dim nCheckTopPosition As Integer
        Dim nLabelTopPosition As Integer
     
        nCheckTopPosition = 15
        nLabelTopPosition = 18
     
        For nControlIndex = 1 To DLV
     
                Dim chkBox As Control
     
                Set chkBox = Me.Controls.Add("Forms.CheckBox.1", "chkCheck" & DLV, True)
                chkBox.Left = 100
                chkBox.Top = nCheckTopPosition
     
                nCheckTopPosition = nCheckTopPosition + 20
     
                Dim lblLab As Control
                Set lblLab = Me.Controls.Add("Forms.Label.1", "lblCheck" & DLV, True)
                lblLab.Left = 115
                lblLab.Top = nLabelTopPosition
                nLabelTopPosition = nLabelTopPosition + 20
                For k = 7 To DLV
                lblLab.Caption = Sheets("Participants").Cells(k, 4).Value & Sheets("Participants").Cells(k, 5).Value
    ' colonne4=nom, colonne5= prenom
                Exit For
                Next k
        Next
    End Sub
    Ce code ne m'affiche qu'un nombre limité de checkbox avec toutes comme label le premier nom de la liste.

    Quelqu'un a t-il une idée?
    Merci beaucoup!!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec le code suivant qui crée des Excel.CheckBox de manière dynamique. Ce sont donc des contrôles de formulaire et, non pas, des contrôles ActiveX (OLEObjects).
    J'ai lié chaque cellule à son Excel.CheckBox pour pouvoir garder l'état de la CheckBox et travailler l'information (même après sa suppression).
    Il y a 2 procédures : une qui crée et l'autre qui supprime.
    ****
    Si cela vous convient, à vous d'intégrer ce code dans votre projet.
    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
    37
    38
    39
    40
    41
    42
    43
    44
    Sub AddExcelCheckBox()
    Dim S As Worksheet
    Dim R As Range
    Dim CBX As Excel.CheckBox
    Dim LastLig As Long
    Dim i As Long
    Dim j As Long
    '---
    Set S = Sheets("Participants")    'à adapter
    '--- Recherche de la dernière ligne ---
    LastLig = S.[d65536].End(xlUp).Row
     
     
    For j = 2 To S.[iv6].End(xlToLeft).Column           'colonnes (de colonne 2 à la dernière)
      If IsNumeric(Right(S.Cells(6, j), 4)) Then        'si les 4 derniers caractères forment un nombre (2013, 2014, etc)
        For i = 7 To LastLig                            'de la ligne 7 à la dernière ligne
          Set R = S.Range(S.Cells(i, j), S.Cells(i, j)) 'c'est la cellule cible dont la valeur sera aligné sur la droite
          R.HorizontalAlignment = xlRight
                                                        'on y crée une CheckBox Excel (Contrôle de formulaire)
          Set CBX = ActiveSheet.CheckBoxes.Add( _
              Left:=R.Left, Top:=R.Top, Width:=R.Width, Height:=R.Height)
     
          With CBX                        'avec la CheckBox
            .Caption = ""                 'on vide son texte
            '---
            .LinkedCell = R.Address       'on lui affecte la cellule cible en tant que cellule liée
            '---
            .Value = True                 'pour que la cellule liée affiche l'état de la CheckBox
            .Value = False                'on est forcé d'affecter à cette dernière True puis False
          End With
         Next i
      End If
    Next j
    End Sub
     
    Sub DeleteExcelCheckBox()
    Dim S As Worksheet
    Dim CBX As Excel.CheckBox
    '---
    Set S = Sheets("Participants")    'à adapter
    For Each CBX In S.CheckBoxes
      CBX.Delete
    Next CBX
    End Sub

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci PMO2017 et désolée pour ma réponse tardive,
    Je vais tester ce code pour voir s'il convient à mon projet et vous tiendrai au courant!

Discussions similaires

  1. Récupérer les valeurs de mes checkbox créées dynamiquement
    Par new_dreams dans le forum Composants
    Réponses: 2
    Dernier message: 28/03/2013, 23h41
  2. Réponses: 17
    Dernier message: 16/01/2009, 12h13
  3. utiliser une CheckBox créée dynamiquement
    Par duthooma dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/08/2008, 21h29
  4. Détruire des CheckBox créées dynamiquement
    Par Chayanne47 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 15/04/2008, 15h40
  5. Message pour une checkbox créée dynamiquement
    Par g0up1l dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 30/03/2007, 12h19

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