Ok. Bon vous allez devoir faire des changements. Donc je vous invite à bien suivre point par point ce que je vous écris ci-après
Etape 1
- Allez dans Thisworbook
- Supprimez complétement le code que je vous ai donné et remplacez la par celui ci-dessous
Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim dlg As Integer
Dim i As Byte
Application.ScreenUpdating = False
Call controle_feuille_active(nom)
'si variable nom est vide on sort de la macro
If nom = "" Then Cancel = True: Exit Sub
'définir dernière ligne de colonne A
dlg = Sheets(nom).Range("A" & Rows.Count).End(xlUp).Row
'vérifier si case à cocher se trouve bien en colonne B à D
If Not Intersect(Target, Sheets(nom).Range("B5:D" & dlg)) Is Nothing Then
'cas si double click sur une case déjà cochée
If Target.Value = "R" Then
With Sheets(nom).Cells(Target.Row, Target.Column)
.Font.Name = "Wingdings 2"
.Font.Size = 12
.Font.ColorIndex = xlAutomatic
.Value = "£"
End With
Sheets(nom).Range("N" & Target.Row & ":P" & Target.Row) = 0
Cancel = True
Exit Sub
End If
'cas si double clic sur une case décochée
'1.réinitialisation des 3 cases à cocher
With Sheets(nom).Range("B" & Target.Row & ":D" & Target.Row)
.Font.Name = "Wingdings 2"
.Font.Size = 12
.Font.ColorIndex = xlAutomatic
.Value = "£"
End With
Sheets(nom).Range("N" & Target.Row & ":P" & Target.Row) = 0 'remise à 0 des colonnes N a P
'2.cochage de la case double cliquée
With Target
.Font.Name = "Wingdings 2"
.Font.Size = 12
.Font.ThemeColor = Sheets(nom).Range("A2").Interior.ThemeColor
.Value = "R"
End With
Cancel = True
Target.Offset(0, 12) = 1
End If
Application.ScreenUpdating = True
End Sub
Etape 2
- Allez dans l'éditeur VBA
- Dans le menu, cliquez sur INSERTION et choisissez MODULE
- Collez toutes les lignes de code ci-dessous
Const feuille As String = "PGBET-CST,SO-CS,LTG,IE,AC,AB,AP-ergo,EQT-EPCI"
Public nom As String
Sub controle_feuille_active(nom As String)
Dim f() As String
Dim i As Byte
f = Split(feuille, ",")
For i = LBound(f) To UBound(f)
If ActiveSheet.Name = f(i) Then
nom = f(i)
Exit For
End If
Next i
End Sub
Sub Reinit_Casecochee()
Dim dlg As Integer
Call controle_feuille_active(nom)
'si variable nom est vide on sort de la macro
If nom = "" Then Cancel = True: Exit Sub
'définir dernière ligne de colonne A
dlg = Sheets(nom).Range("A" & Rows.Count).End(xlUp).Row
With Sheets(nom).Range("B5:D" & dlg) 'edit : remplacé B2 par B5
.Font.Name = "Wingdings 2"
.Font.Size = 12
.Font.ColorIndex = xlAutomatic
.Value = "£"
End With
Sheets(nom).Range("N5:P" & dlg) = 0
End Sub
Etape 3
- faites un click droite sur votre rectangle qui sera utilisé pour décocher les "cases à cocher"
- choisir "Affecter à une macro"
- Sélectionnez la macro "Reinit_Casecochee"
Explications
- Vos noms de feuilles concernées par les cases à cocher sont mentionnées dans la ligne --> Const feuille.... C'est là que vous pouvez adapter au cas où vous voudriez modifier un nom de feuille, le retirer ou ajouter une nouveau
Veillez à l'orthographe exact entre ce qui est écrit dans la ligne CONST FEUILLE et le nom de vos feuilles --> y compris Majuscule et Minuscule
- les cases à cocher commencent toujours en ligne 5
- la couleur de référence appliquée à une case cochée en toujours en A2
NB : dans un de vos fichiers, j'ai vu "module de classe". Vous ne devriez avoir que le module que je vous ai dit de créer