XL 2019 Création de cases à cocher dynamiquement

  • Initiateur de la discussion Initiateur de la discussion Flx1er
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Flx1er

XLDnaute Occasionnel
Bonjour,
Je dois modifier un formulaire existant en intégrant des nouveaux champs. Ces nouveaux champs seront des questions avec des réponses binaires (oui ou non). Pour cela cela, je désire utiliser les cases à coché.
Cependant, je ne parviens pas à générer de manière dynamique les cases à cocher pour chaque nouvelle ligne.
En exemple, sur la première ligne tableau nommé "Formulaire", il y a la présence des cases à coché et ces dernières sont liés à la cellule de droite :
Si case est coché alors
cellule droite = VRAI
Sinon
Cellule droite = FAUX
Fin de si
Est-il possible de mettre en place un système qui, à chaque création d'une nouvelle ligne, génère dynamiquement les cases à cocher (et les cellules liées) ?
En vous remerciant
 

Pièces jointes

Solution
RE
La suppression ne marche pas : en fait ce nom indique que le classeur est vérolé.

J'ai contourné mais il vaudrait mieux reconstruire un classeur en évitant le copier coller car cela embarque le PB dans le classeur cible
Bonjour à tous
Bonjour Chris,
J'essaye d'implémenter le morceau de code dans mon fichier en respectant bien les nommages : CocherC1, CocherC2, etc.., mais je bloque sur l'erreur : "Erreur d'exécution '1004':"
Il y a un problème dans ton classeur qui contient un nom invisible _xlfn.IFERROR
J'ai modifié le code pour le supprimer

J'ai aussi modifié la portée de CocherC1 et supprimer les autres nom CocherC... : si les coches sont cumulatives par ligne un seul nom doit s'appliquer la plage.
Si c'est alternatif il faut également utiliser une seule plage avec comme nom CocherA1

A noter qu'il est préférable de nommer ton tableau mais aussi d'utiliser des tableaus structurés pour les sources de listes déroulantes appelées à évoluer...
 

Pièces jointes

Bonjour à tous

Il y a un problème dans ton classeur qui contient un nom invisible _xlfn.IFERROR
J'ai modifié le code pour le supprimer

J'ai aussi modifié la portée de CocherC1 et supprimer les autres nom CocherC... : si les coches sont cumulatives par ligne un seul nom doit s'appliquer la plage.
Si c'est alternatif il faut également utiliser une seule plage avec comme nom CocherA1

A noter qu'il est préférable de nommer ton tableau mais aussi d'utiliser des tableaus structurés pour les sources de listes déroulantes appelées à évoluer...
Chris,
La version Formulaire.v05 en dev2.xlsm génère l'erreur ci-dessous
1741106500424.png
 

Pièces jointes

  • 1741106394845.png
    1741106394845.png
    7.9 KB · Affichages: 2
RE
La suppression ne marche pas : en fait ce nom indique que le classeur est vérolé.

J'ai contourné mais il vaudrait mieux reconstruire un classeur en évitant le copier coller car cela embarque le PB dans le classeur cible
Bonjour,
Je tiens à remercier Chris, Sylvanu et Phil69970 pour leurs aides précieuses.
J'ai intégrer la solution de Chris dans mon projet.
Encore merci
 
Bonjour @Flx1er🙂, à tous😉,

Vous pas tapez ! Je n'ai pas lu les contributions de ce fil ; je me suis contenté de lire le premier message du demandeur et de faire avec des cases à cocher.

Pour mettre à jour le tableau structuré, c'est à dire :
  • pour ajouter les cases à cocher manquantes
  • pour repositionner les cases à cocher
  • pour affecter les bonnes valeurs aux cellules des colonnes des questions (Vrai = cochée ou Faux = décochée)
  • pour affecter le bon format aux colonnes des questions
Un seul geste : double-cliquez sur l'image
1741943168226.png
(voir cellule Date du tableau structuré)

Remarques :
  • La mise à jour conserve les cases déjà existantes ainsi que leur état (cochée ou décochée)
  • La cellule liée à une case à cocher est la cellule qui contient cette case. Si vous vous placez dans cette cellule, vous verrez dans la barre de formule la valeur de la cellule Vrai ou Faux
  • Le format de la cellule avec une case à cocher n'affiche rien mais la valeur est bien présente (voir remarque précédente)
  • En cas de nombreuses lignes te colonnes du TS, cette méthode augmente beaucoup la taille du fichier et la mise à jour devient très longue.

Attention !

Vous pouvez ajouter (ou supprimer) une ou des colonnes de questions.
Mais vous devez l'indiquer dans le code à l'aide des deux constantes PremColQ et DerColQ :
VB:
Const PremColQ = 3      ' N° colonne du TS de la première question
Const DerColQ = 6       ' N° colonne du TS de la dernière question


La colonne J montre comment calculer le nombre de cases cochées ou décochées ( un simple NB.SI(...) )

Le code est commenté et se trouve dans le module de la feuille "Form" :
VB:
Option Explicit

Const PremColQ = 3      ' N° colonne du TS de la première question
Const DerColQ = 6       ' N° colonne du TS de la dernière question

Sub CreerCases()
Dim ts As ListObject, j&, x As Range, chk, MaChk, Old
 
   Application.ScreenUpdating = False
   Set ts = Range("a1").ListObject                          ' le tableau structuré en cellule A1
   For j = PremColQ To DerColQ                              ' pour chaque colonne de question
      ts.ListColumns(j).DataBodyRange.NumberFormat = ";;;"  ' le format masque la valeur de la cellule
      For Each x In ts.ListColumns(j).DataBodyRange         ' pour chaque cellule x de la colonne question j
         Old = x.Value                          ' Old est la valeur de la cellule
         Set MaChk = Nothing                    ' la case à cocher de la cellule : on présuppose qu'elle est absente
         For Each chk In Me.CheckBoxes          ' boucle sur les CheckBox existantes (indice de boucle chk)
            If chk.TopLeftCell.Address = x.Address Then  ' si le coin sup. droit de chk est l'adresse de la cellule x
                                                         '  alors c'est la checkbox de la cellule
               Set MaChk = chk                  ' on affecte cette checkbox existante  à la variable MaChk
               Exit For                         ' on a trouvé la checkbox, on quitte donc la boucle de recherche
            End If
         Next chk
         If MaChk Is Nothing Then                                 ' on n'a pas trouvé la checkbox de la cellule x
            Set MaChk = Me.CheckBoxes.Add(x.Left, x.Top, 10, 10)  ' on en crée une nouvelle
            MaChk.LinkedCell = x.Address                          ' et on la LIE à la cellule x
         End If
         With MaChk                 ' avec la case à cocher de la cellule x
            If Old = True Then      ' si la valeur de la cellule est True ('Vrai)
               .Value = True        ' on met la valeur de la checkbox à True (cochée)
            Else
               .Value = False       ' sinon on met la valeur de la checkbox à False (décochée)
               x = False            ' et la cellule est mise à False aussi
            End If
            ' on met en forme et on positionne la case à cocher de la cellule x
            .Characters.Text = ""                     ' le texte
            .Height = x.RowHeight - 1                 ' la hauteur
            .Width = 20                               ' la largeur
            .Top = x.Top + (x.Height - .Height) / 2   ' la position verticale
            .Left = x.Left + (x.Width - .Width) / 2   ' la position horizontale
            .Display3DShading = True                  ' le type de case (3D)
         End With
      Next x         ' on passe à la cellule suivante de la colonne
   Next j            ' on passe à la colonne de question suivante
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour