Bonjour tontonbox,
je vais te donner 3 réponses différentes, avec 1 fichier Excel
pour chaque réponse ; voici déjà la 1ère réponse. :)
https://www.cjoint.com/c/LLcaIrcYSr0
* la cellule active est G6 ; clic / bouton bleu ; ça ne fait rien du tout, et c'est normal.
* sélectionne E5:G8 ; clic / bouton bleu ; rien : ok ; c'est car tu as fait une sélection de
plus d'une colonne.
* sélectionne J2:J8 ; clic / bouton bleu ; rien : ok ; ta sélection est bien d'une seule
colonne, mais cette colonne doit être la colonne C.
* sélectionne C11:C16 ; clic / bouton bleu ; rien : ok ; ta sélection est bien d'une
seule colonne, c'est en colonne C, mais ta sélection est de plus de 5 cellules.
* sans changer la sélection actuelle, fais Maj ↑ ➯ la sélection devient C11:C15 ;
clic / bouton bleu ➯ ça met 5 cases à cocher.
* sélectionne C18 ; clic / bouton bleu ➯ ça met 1 case à cocher.
* sélectionne C21:C22 ; clic / bouton bleu ➯ ça met 2 cases à cocher.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* pour chacune des cases à cocher que tu viens d'insérer, tu peux bien sûr
cliquer dessus pour alternativement cocher ou décocher ; la couleur de
remplissage est celle attendue : en vert ou en rouge.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* un clic / bouton bleu ne fait rien non plus si la sélection commence en C1 ;
c'est normal, car une case à cocher ne doit pas être mise en C1, pour ne
pas écraser l'en-tête "PRESENT".
* rien non plus s'il n'y a pas de sélection de plusieurs cellules, et que la
cellule active est C1 ; même raison qu'au point ci-dessus.
-------------------------------------------------------------------------------------------------------------------
code VBA de Module1 (dont 1ère sub optimisée) :
Option Explicit
Sub CheckBox2_Click()
Dim r As Byte, g As Byte: r = 255: g = 0
With ActiveSheet.Shapes(Application.Caller)
If .ControlFormat.Value = 1 Then r = 0: g = 255
.Fill.ForeColor.RGB = RGB(r, g, 0): .Fill.Visible = -1
End With
End Sub
Sub AjoutCaseàcocher2()
Dim ChkBx As CheckBox, rngCel As Range: Application.ScreenUpdating = 0
With Selection
If .Columns.Count > 1 Then Exit Sub 'sortie si sélection de plus d'une colonne
If .Column <> 3 Then Exit Sub 'sortie si colonne de la sélection autre que C
If .Row = 1 Then Exit Sub 'sortie si 1ère ligne de la sélection = ligne 1
'à ce stade : la sélection est d'une seule colonne ; c'est la colonne C ;
'la 1ère ligne de la sélection est > 1 => 1ère ligne minimum : ligne 2 ;
'pour limiter à 5 le nombre de lignes de la sélection :
If .Rows.Count > 5 Then Exit Sub
'on peut donc ajouter d'un coup de une à 5 cases à cocher, en colonne C,
'avec une 1ère ligne autre que ligne 1.
End With
For Each rngCel In Selection
With rngCel.MergeArea.Cells
If .Resize(1, 1).Address = rngCel.Address Then
.NumberFormat = ";;;"
Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
With ChkBx
.Characters.Text = "Cochez si présent": .Value = 0: .OnAction = "CheckBox2_Click"
With .Border
.ColorIndex = 24: .Weight = 1: .LineStyle = xlLineStyleNone
End With
End With
End If
End With
Next rngCel
End Sub
dans la 2ème sub, j'ai mis plusieurs commentaires ; lis-les attentivement ;
regarde cette instruction : If .Rows.Count > 5 Then Exit Sub ; c'est elle
qui détermine que la sélection ne doit pas être de plus de 5 cellules ;
en fait je voulais mettre 10 ; j'ai mis 5 pour faciliter la démo ; à toi de
mettre la valeur que tu veux ; si tu mets 20, tu pourras insérer d'un
seul coup jusqu'à 20 cases à cocher maximum.
rhodo