XL 2019 Checkbox

momo2394

XLDnaute Occasionnel
Bonjour le forum

Voilà mon souci, j'ai des checkbox et je voudrais une macro que si l'une des checkbox n'est pas coché, alors je ne peux enregistrer
et qu'elle me montre ou est la ou les checkbox(s) n'ont coché

Merci
 

Pièces jointes

  • Special checkbox.xlsm
    42.3 KB · Affichages: 8

laurent3372

XLDnaute Impliqué
Supporter XLD
J'ai un peu arrangé ta feuille.
Voici la macro:
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim lig As Long
    Dim rng As Range
    Dim err As Boolean
    err = False
    For lig = 2 To 4
        Set rng = Cells(lig, "G").Resize(, 3)
        rng.Interior.Color = RGB(255, 255, 255) ' Fond blanc
        If Not Cells(lig, "O").Value Then
            rng.Interior.Color = RGB(255, 0, 0) 'Si erreur, fond rouge
            err = True
        End If
    Next lig
    If err Then
        MsgBox "Cocher les cases"
        Cancel = True ' On n'enregistre pas
    End If
End Sub
 

Pièces jointes

  • Special checkbox (1).xlsm
    32.5 KB · Affichages: 5

momo2394

XLDnaute Occasionnel
Salut le forum et Laurent3372

Je reviens vers vous pour la macro print si les checkboxs sont cochés, elle fonctionne super bien seulement les feuilles de mon classeur sont différents dans les nombres de checkboxs donc de lignes.
Comment gérer le :
For Lig = 2 to 4 pour la feuil 1
For Lig = 2 to 6 pour la feuil 2
For Lig = 2 to 8 pour la feuil 3
ou alors est il possible d'insérer un BeforePrint dans chaque Feuille.
Merci
 

Pièces jointes

  • Special checkbox.xlsm
    86.7 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
bonjour
teste cela et analyse
VB:
Sub testx()
    Dim result(1 To 3), F&, Rng, Lig&, NbLimite
    NbLimite = Array(3, 6, 8)
    For F = 1 To 3
        'result(F) = Sheets(F).Name
        For Lig = 2 To NbLimite(F - 1)
            Set Rng = Sheets(F).Cells(Lig, "G").Resize(, NbLimite(F - 1))
            Rng.Interior.Color = RGB(255, 255, 255)    ' Fond blanc
            If Not Sheets(F).Cells(Lig, "O").Value Then
                Rng.Interior.Color = RGB(255, 0, 0)    'Si erreur, fond rouge
                result(F) = Sheets(F).Name
                err = True
            End If
        Next Lig
    Next F
    If err = True Then MsgBox "les sheets a revoir sont  : " & vbCrLf & Replace(Application.Trim(Join(result, " ")), " ", vbCrLf)
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 991
Membres
103 420
dernier inscrit
eric.wallet46