Lorsque vous développez une feuille de calcul qui sera utilisée par d’autres personnes, vous souhaiterez peut-être vous assurer qu’elles remplissent certaines cellules avant d’être autorisées à fermer le classeur. Il n’y a pas de fonction intégrée dans Excel pour ce faire, mais vous pouvez créer une macro qui effectuera la vérification nécessaire et arrêtera l’utilisateur pour continuer. Cela peut être une macro assez simple, liée à l’événement BeforeClose.

L’événement BeforeClose est déclenché chaque fois qu’un classeur est fermé par quelque moyen que ce soit. L’astuce est le réglage de la propriété Cancel dans le gestionnaire d’événements. Définir Annuler sur True arrêtera la fermeture du classeur et le laisser inchangé entraînera la fermeture normale du classeur.

Par exemple, la macro suivante vérifie si la cellule A1 contient quelque chose; si c’est le cas, le classeur est fermé. Si ce n’est pas le cas, l’utilisateur est informé qu’il manque quelque chose et la fermeture est annulée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1).Value = "" Then         MsgBox "Please fill cell A1"

Cancel = True     End If End Sub

Des macros plus élaborées peuvent être créées, si vous le souhaitez. Par exemple, vous pouvez avoir plusieurs cellules différentes qui doivent être vérifiées. La version suivante vérifie une plage nommée «Obligatoire» pour voir si chaque cellule de la plage contient quelque chose. Si l’une des cellules est vide, le classeur ne peut pas être enregistré ou fermé. (Cette macro est déclenchée non seulement pendant l’événement BeforeClose, mais également pendant l’événement BeforeSave.)

Ces deux gestionnaires d’événements doivent être placés dans la feuille de code du classeur:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _   Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub

Notez que les gestionnaires d’événements appellent la fonction ForceDataEntry. Cette fonction doit être placée dans un module macro ordinaire:

Function ForceDataEntry() As Boolean     Dim rng As Range     Dim c As Variant     Dim rngCount As Integer     Dim CellCount As Integer

Set rng = Range("Mandatory")

rngCount = rng.Count

CellCount = 0     For Each c In rng         If Len(c) > 0 Then             CellCount = CellCount + 1         End If     Next c     ForceDataEntry = False     If CellCount <> rngCount Then ForceDataEntry = True End Function

Notez que toute implémentation qui nécessite des macros (comme celle-ci) souffre d’un problème potentiel: les utilisateurs peuvent décider de ne pas activer les macros lorsque le classeur est chargé. S’ils exécutent le classeur avec les macros désactivées, ils pourront toujours enregistrer le classeur sans toutes les cellules obligatoires contenant des valeurs.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (9574) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Requiring_Input [Requérir une entrée].