S’assurer que les cellules sont remplies avant l’enregistrement (Microsoft Excel)
Riley a une feuille de travail avec laquelle il doit travailler tous les vendredis. Cette feuille de calcul est basée sur un modèle, et il y a, au minimum, cinq cellules qu’il doit remplir, dans la plage C4: C8. Lorsqu’il commence avec la feuille de calcul, ces cellules sont vides. Riley se demande s’il existe un moyen d’empêcher la feuille de calcul d’être enregistrée et / ou fermée jusqu’à ce qu’il remplisse ces cinq cellules.
Il existe un moyen de le faire, mais cela implique l’utilisation de macros. Excel prend en charge le concept de gestionnaires d’événements, ce qui signifie que vous pouvez développer des macros qui s’exécutent, automatiquement, lorsque certains événements se produisent. Les deux événements pour lesquels vous pouvez créer des gestionnaires d’événements spéciaux sont BeforeClose (c’est-à-dire avant la fermeture du classeur) et BeforeSave (avant l’enregistrement du classeur).
À titre d’exemple de la façon dont cela pourrait fonctionner, disons que la feuille de calcul contenant la plage à vérifier (C4: C8) est nommée «MyData». Vous pouvez ajouter ce code au module ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim rng As Range Dim iCount As Integer Dim sTemp As String Set rng = Worksheets("MyData").Range("C4:C8") iCount = Application.WorksheetFunction.CountBlank(rng) If iCount <> 0 Then sTemp = rng.Address & " has blank cells. " & vbCrLf sTemp = sTemp & "The workbook will not be closed." MsgBox sTemp Cancel = True End If End Sub
Notez que la macro s’appuie sur la fonction de feuille de calcul CountBlank pour déterminer s’il existe des espaces dans la plage de cellules. S’il détecte des cekks vides (iCount est supérieur à 0), la macro affiche un message à l’utilisateur et la variable Cancel est définie sur True, ce qui empêche en fait la fermeture du classeur.
Vous pouvez utiliser une macro similaire pour l’événement BeforeSave, de cette manière:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rng As Range Dim iCount As Integer Dim sTemp As String Set rng = Worksheets("MyData").Range("C4:C8") iCount = Application.WorksheetFunction.CountBlank(rng) If iCount <> 0 Then sTemp = rng.Address & " has blank cells. " & vbCrLf sTemp = sTemp & "The workbook will not be saved." MsgBox sTemp Cancel = True End If End Sub
Si vous voulez vous assurer que la routine a sélectionné les cellules dans lesquelles l’entrée est nécessaire (comme étape finale), vous pouvez ajouter la ligne suivante aux deux macros, juste après la ligne qui définit la variable Cancel sur True:
rng.Select
N’oubliez pas également que, puisque votre classeur est basé sur un modèle, il devra être enregistré en tant que modèle prenant en charge les macros pour fonctionner correctement.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (4364) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.