Microsoft 365 Aide pour case à cocher - checklist

patrickm

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai besoin de vos compétences pour finaliser un document.
Dans les faits, j'ai un document avec des checklist "intermédiaires" et j'aimerais avoir un repère visuel sur mon document en ce sens que je souhaite pouvoir cliquer sur le
à chaque fois que la phase intermédiaire est terminée.

Aussi j'aimerais
- pouvoir cliquer sur ladite case à cocher si les cellules de H5 à H14 sont vertes ou grise
- NE PAS pouvoir cliquer sur la case à cocher si les cellules de H5 à H14 sont jaunes ou rouge
- si la case à cocher est cochée : programmer la cellule et la colorier en vert

Est que quelqu'un pourrai m'aider SVP car je sèche devant mon écran :)

Merci d'avance
 

Pièces jointes

  • Classeur1.xlsm
    265.4 KB · Affichages: 16

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Bien du mal tu as eu pour mettre tout les cheklist que je supprime
J'ai mis une écriture Webding la macro mets "n" qui fait un rond
J'ai aussi mis un encard explication
Le tout par double-click
Bruno
 

Pièces jointes

  • Classeur2.xlsm
    236.8 KB · Affichages: 6

gbinforme

XLDnaute Impliqué
Aussi j'aimerais
- pouvoir cliquer sur ladite case à cocher si les cellules de H5 à H14 sont vertes ou grise
- NE PAS pouvoir cliquer sur la case à cocher si les cellules de H5 à H14 sont jaunes ou rouge
- si la case à cocher est cochée : programmer la cellule et la colorier en vert
Bonjour

Comme tes cases à cocher ne sont liées à aucun événement l'on ne peut pas éviter qu'elles soit cliquées.
Cependant je t'ai mis en place une procédure qui fait que si tu valides à tort, le simple changement de sélection va remettre en place ta cellule et si tu valides à raison ta case passe en vert.

Attention à tes cases action qui ne sont pas toujours correctes.
Bon test
 

Pièces jointes

  • Patrickm.xlsm
    226.4 KB · Affichages: 3
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
J'avais fait ces modifs et aussi les explications alors je mets.
Les cases à cocher sont pas gérables et aucun événement en macro alors on fait autrement.
La macro gère bien les choix, le tout par double_click
Bruno
 

Pièces jointes

  • Classeur4.xlsm
    53.7 KB · Affichages: 7

patrickm

XLDnaute Nouveau
Bonjour

Comme tes cases à cocher ne sont liées à aucun événement l'on ne peut pas éviter qu'elles soit cliquées.
Cependant je t'ai mis en place une procédure qui fait que si tu valides à tort, le simple changement de sélection va remettre en place ta cellule et si tu valides à raison ta case passe en vert.

Attention à tes cases action qui ne sont pas toujours correctes.
Bon test
Un tout grand MERCI pour ton coup de main 👍
 

patrickm

XLDnaute Nouveau
J'avais fait ces modifs et aussi les explications alors je mets.
Les cases à cocher sont pas gérables et aucun événement en macro alors on fait autrement.
La macro gère bien les choix, le tout par double_click
Bruno
J'avais fait ces modifs et aussi les explications alors je mets.
Les cases à cocher sont pas gérables et aucun événement en macro alors on fait autrement.
La macro gère bien les choix, le tout par double_click
Bruno
MERCI beaucoup pour ces améliorations qui bonifient le fichier 👍
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonne nuit à toutes & à tous, bonne nuit @patrickm
Bon, bien-sûr c'est un peu tard (dans la nuit et dans le post) mais j'y vais de ma proposition.

Comme je pense que multiplier les contrôles de formulaire ou les ActiveX dans une feuille conduit vite à des ralentissements, je suis parti sur l'idée de @youky(BJ) : une police de caractère pour le 'coché' ou le 'non coché', et l'utilisation d'un événement de la feuille pour déclencher la macro.
La police est Wingdings et les caractères sont '¡' pour le non coché et 'l' (L minuscule) pour le coché
(attention '¡' n'est pas un 'i' mais le caractère 161)

Mais j'ai préférer le clic droit au double clic (un clic de moins ;) ) et je ne le désactive que si l'on est dans une zone à modifier (cancel = true).

J'ai également prévu une macro de réinitialisation.
  • On peut 'décocher' une case sans en 'cocher' une autre de la même ligne.
  • L'invite à la validation de la phase varie en fonction de l'avancement.
    (Phase non débutée, Phase en cours, Phase terminée cocher la cellule, Phase terminée.)
  • La validation de la phase se fait également par un clic droit, j'ai préféré garder une validation volontaire à une validation automatique, mais on peut évidemment changer cela.
  • J'ai mis des formules en colonne H : =SIERREUR(EQUIV("l";D5:G5;0);3) (pour la ligne 5) et j'ai revu ses formats conditionnels.
  • J'ai mis également des formats conditionnels en colonne P.
  • Pour les formats conditionnels, je les ai appliqués de la ligne 5 à la ligne 110, une formule se charge de vérifier si la cellule est concernée ou non par le format (ça diminue le nombre de MFC de la feuille)
  • J'ai mis la description des zones utilisées dans des constantes en début de code.
Voilà je pense avoir fait le tour.

Voici le code largement commenté :
VB:
'Les constantes
     Const Coché = "l", Décoché = "¡", Terminé = "ü"
     Const Col_Oui = 4, Col_Part = 5, Col_Non = 6, Col_NA = 7, Col_Terminé = 16
     Const CoulOui = 3394611, CoulPart = 65535, CoulNon = 255, CoulNA = 10921638
    
     'CONSTANTES A AJUSTER EN FONCTION DU MODELE DE PHASES SUR LA FEUILLE
     Const nbPhases = 9
     Const iTitre = 1, iInterligne = 1, nbItems = 10

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    
     Dim rMin As Long, rMax As Long, Pas%, RestMax%
     Dim maZone As Range, zTerminée As Range, tablo, txt$
    
     'Description des plages de saisie ([phase_0] nom défini sur la ligne de titre de la 1ère phase)
     rMin = [phase_0].Row + 1: rMax = rMin + nbPhases * (nbItems + iTitre + iInterligne) - iTitre - 2: Pas = nbItems + iTitre + iInterligne: RestMax = Pas - (iTitre + iInterligne) - 1
    
     R = ((ActiveCell.Row - rMin) Mod Pas) 'rang de la ligne active dans la phase (commence à 0)
     C = Col_Oui - ActiveCell.Column       'décalage de la colonne par rapport à la colonne oui
     Col = -C + 1                          'rang de la colonne active dans la zone à cocher (commence à 1)
    
     With ActiveCell
          'Sortir si en-dehors de la zone utile
          If ((.Column < Col_Oui Or .Column > Col_NA Or .Row < rMin) And (.Column <> Col_Terminé)) Or R > RestMax Or .Row > rMax Then Exit Sub
          
          '=============================
          'Clic sur un "pseudo bouton :"
          '=============================
          If (.Column >= Col_Oui And .Column <= Col_NA And .Row >= rMin) Then
               'Zone contenant les pseudo boutons
               Set maZone = .Offset(-R, C).Resize(RestMax + 1, 4)
               'Case terminée correspondant à cette zone
               Set zTerminée = maZone.Resize(1, 1).Offset(nbItems - 1, 12)
              
               'Mémorisation des valeurs actuelles
               tablo = maZone.Value
               If tablo(R + 1, Col) = Coché Then
                    'décochage simple
                    tablo(R + 1, Col) = Décoché
               Else
                    'décochage cases de la ligne courante, puis cochage de la case active
                    If tablo(R + 1, Col) = Décoché Then For i = 1 To 4: tablo(R + 1, i) = Décoché: Next: tablo(R + 1, Col) = Coché
               End If
              
               'remettre les valeurs à 'décoché' si valeur effacée
               For i = 1 To 10
                    For j = 1 To 4
                         If tablo(i, j) = "" Then tablo(i, j) = Décoché:
                    Next
               Next
              
               'mise à jour de la zone
               maZone.Value = tablo
               'effacer la coche 'phase terminée'
               zTerminée.ClearContents
               Cancel = True
              
          End If
          
          '=================================
          'Clic sur un cellule "fin de phase"
          '=================================
          If (.Column = Col_Terminé) And ((.Row - rMin) Mod Pas = RestMax) Then
               txt = "Phase terminée" & Chr(10) & "cocher la cellule"
               Select Case .Offset(0, -2).Value
               Case "Phase non débutée", "Phase en cours"
                    .ClearContents
                    MsgBox .Offset(0, -2) & Chr(10) & "Terminez avant de cocher !"
               Case "Phase terminée"
                    .ClearContents
               Case txt
                    .Value = Terminé
               End Select
               Cancel = True
          End If
     End With
    
End Sub

Sub Initialisation()
     Dim maZone As Range, zTerminée As Range
    
     'Tableau pour valeurs "décochées"
     ReDim tablo(1 To nbItems, 1 To 4)
     For i = 1 To UBound(tablo, 1): For j = 1 To UBound(tablo, 2): tablo(i, j) = "¡": Next j: Next i
    
     'Réinitialisation des tableaux de phase
     For i = 0 To nbPhases - 1
          Set maZone = Me.Cells([phase_0].Row + iTitre, Col_Oui).Resize(nbItems, 4).Offset(i * (iTitre + nbItems + iInterligne))
          Set zTerminée = maZone.Resize(1, 1).Offset(nbItems - 1, 12)
          maZone.Value = tablo: zTerminée.ClearContents
     Next i
    
End Sub

Voir le fichier joint.

A bientôt
 

Pièces jointes

  • Aide pour case à cocher - checklist AtTheOne.xlsm
    56.8 KB · Affichages: 3

Discussions similaires

Réponses
17
Affichages
2 K

Statistiques des forums

Discussions
313 265
Messages
2 096 667
Membres
106 704
dernier inscrit
Mymy.ol