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.

Le BeforeClose même est déclenché chaque fois qu’un classeur est fermé par un moyen quelconque. 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.) Les deux gestionnaires d’événements sont placés dans le code du classeur et la macro ForceDataEntry est placée dans un module de macro standard.

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
Sub 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 If End Sub

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 (9572) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Requiring_Input [Entrée requise].