interdiction fermeture fichier sous condition certaines cellules vides et msg précis

superbog

XLDnaute Occasionnel
Bonsoir,

Je souhaiterai pouvoir empêcher un classeur de se fermer si certaines cellules ne sont pas remplies et je n'y arrive pas.
Je m'explique, il s'agit de remplir une liste d'adhérent et de s'assurer que certains items sont impérativement remplis.
Il faudrait également qu'en cas d'erreur une msgbox apparaissent indiquant: "votre classeur ne se ferme pas car vous avez omis de remplir la case .... (ici le range concerné). " avec la possibilité de ok et remplir les cases ou fermer quand même.
et il faudrait également que les cases vides des lignes concernées soient colorées en rouge

les cellules A à G, i 0 j et P doivent impérativement être remplies, les autres peuvent être vides.

voici un fichier test

merci d'avance
 

Pièces jointes

  • Classeur1.xlsx
    66.2 KB · Affichages: 29
  • Classeur1.xlsx
    66.2 KB · Affichages: 37

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : interdiction fermeture fichier sous condition certaines cellules vides et msg pr

Bonsoir superbog,

Une MFC sur les colonnes A à G, I à J et P (de la ligne 2 à la ligne 999) colore les cellules en rose si elles sont vides.

Formule de la MFC:
VB:
=ET(NBVAL($A2:$G2;$I2:$J2;$P2)>0;A2=""

Une macro dont le code est dans le module de code de ThisWorbook se charge de trouver les cellules non renseignées, de les afficher et de demander à l'utilisateur s'il veut fermer ou non le fichier.

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n&, xrg As Range, T, ok As Boolean, i&, j, L, S, ko As Boolean

With Sheets("clients")
  n = .Cells(.Rows.Count, "a").End(xlUp).Row
  If n = 1 Then Exit Sub
  T = .Range("a2:p" & n).Value: n = 0: ok = True

  For i = 1 To UBound(T)
    L = "": ko = False
    For Each j In Array(1, 2, 3, 4, 5, 6, 7, 9, 10, 16)
      L = L & T(i, j)
    Next j
    If Trim(L) <> "" Then
      For Each j In Array(1, 2, 3, 4, 5, 6, 7, 9, 10, 16)
        If T(i, j) = "" Then
          S = S & "  " & Cells(i + 1, j).Address(0, 0)
          ok = False
          ko = True
        End If
      Next j
      If ko Then S = S & vbLf
    End If
  Next i

  If Not ok Then
    MsgBox "Il existe des cellules devant être renseignées : " & vbLf & _
      S, vbExclamation + vbOKOnly
    If MsgBox("Voulez-vous MALGRE TOUT fermer le fichier ?", _
      vbQuestion + vbYesNo + vbDefaultButton2) = vbNo Then
        Cancel = True
        .Activate
        .Range(Split(Trim(S))(0)).Select
    End If
  End If
End With
End Sub
 

Pièces jointes

  • superbog- Fermer classeur sous condition- v1.xlsm
    74 KB · Affichages: 43

Statistiques des forums

Discussions
311 711
Messages
2 081 786
Membres
101 817
dernier inscrit
carvajal