John a une feuille de travail de saisie de données qui permet aux utilisateurs d’entrer des informations.

Il aimerait qu’une cellule soit automatiquement formatée pour afficher exactement le nombre de décimales qu’un utilisateur tape. Par exemple, si l’utilisateur tape «12,345», il souhaite que la cellule soit automatiquement formatée pour afficher 3 décimales. John sait qu’il pourrait utiliser le format Général pour une cellule (ce qui le fait bien), mais cette approche ne fonctionne pas si l’utilisateur entre une valeur qui se termine par 0, telle que « 12.34500 », qu’il voudrait formatée (automatiquement) pour afficher 5 décimales.

Si vous pensez pouvoir utiliser un format personnalisé pour répondre au besoin, cela ne fonctionnera pas. Avec un format toujours personnalisé que nous pourrions proposer, Excel supprime tous les zéros de fin de ce qu’il affiche. (Ou, inversement, si le format personnalisé inclut « 0 » comme espace réservé, il ajoute des zéros à la fin de l’entrée.)

Le moyen le plus simple de gérer cela, très honnêtement, consiste simplement à formater les cellules en tant que texte avant de commencer à saisir des informations. De cette façon, Excel acceptera simplement ce qui est entré, y compris les zéros de fin, et le remplira dans la cellule. Vous pouvez, en outre, aligner à droite le contenu des cellules afin qu’elles ressemblent au moins un peu plus à des valeurs numériques.

L’inconvénient est que vous devez être prudent lorsque vous utilisez les valeurs dans les formules. Le moyen le plus sûr est simplement d’entourer toute référence à la cellule dans la fonction VALUE, de cette manière:

=VALUE(A1) * 1.375

Une autre approche consiste à créer une macro qui vérifie ce qui est entré dans une plage de cellules. Commencez par mettre en forme les cellules en tant que texte, puis créez une plage nommée (DataEntry) à partir de ces cellules. Vous pouvez ensuite ajouter le code suivant à la feuille de code de la feuille de calcul que vous utilisez:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range     Dim sEntry As String     Dim dEntryNumber As Double     Dim arr

If Not Intersect(Target, Range("DataEntry")) Is Nothing Then         Application.EnableEvents = False         For Each c In Target.Cells             If IsEmpty(c) Then                 c.NumberFormat = "@"    ' Reset to Text format             Else                 If IsNumeric(c) Then                     If Len(c.Value) = 0 Then                         c.NumberFormat = "@"    ' Reset to Text format                     Else                         sEntry = c.Value                         dEntryNumber = CDbl(sEntry)



arr = Split(sEntry, ".")

If UBound(arr) = 1 Then                             ' Change NumberFormat in accordance with                             ' the number of digits after the decimal point                             c.NumberFormat = "0." & String(Len(arr(1)), "0")

c.Value = dEntryNumber                         End If                     End If                 End If             End If         Next c         Application.EnableEvents = True     End If End Sub

La macro est déclenchée chaque fois que quelque chose change dans la feuille de calcul. Il vérifie ensuite si ce changement s’est produit dans l’une des cellules de la plage DataEntry. Si tel est le cas, il examine ce qui est entré dans la cellule (qu’Excel traite comme du texte, puisque c’est ainsi que la cellule a été formatée)

et détermine s’il s’agit d’un nombre et, en outre, le nombre de chiffres à droite de la décimale. Il formate ensuite la cellule pour avoir autant de décimales affichées et remplit la valeur numérique dans la cellule.

La seule condition dans laquelle cette approche ne fonctionnera pas est si vous placez une valeur dans une cellule de la plage DataEntry (qui convertit la cellule au format numérique), puis que vous entrez une valeur numérique différente dans la même cellule. La macro n’a aucun moyen de savoir, dans ce cas, si des zéros de fin sont entrés. (N’oubliez pas que les zéros de fin ne sont conservés que si la cellule est formatée en texte. Comme la cellule ne l’est pas, Excel supprime les zéros de fin et la macro fonctionne avec cette valeur comme si elle avait été entrée.)

_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 (1963) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.