Création d’un décompte animé (Microsoft Excel)
Ray aimerait, si possible, un moyen d’animer un « décompte » pour une valeur dans une cellule. Par exemple, dans la cellule B7, il pourrait avoir une valeur de 23. Il aimerait référencer cette valeur dans la cellule E4 et faire en sorte que la cellule E4 compte de 0 à 23 (0, 1, 2, 3, etc.), montrant chaque nombre à son tour.
Il n’existe aucun moyen intégré de le faire dans Excel, mais vous pouvez utiliser une macro pour effectuer l’animation. Fondamentalement, la macro aurait besoin de découvrir ce qui se trouve dans la cellule B7, puis d’utiliser une boucle For … Next pour parcourir les valeurs entre 0 et ce qui se trouve dans B7. Au cours de chaque itération de la boucle, la valeur dans E4 est modifiée et une sorte de retard est introduit.
La partie délai de la macro est ce qui permet en fait de faire varier la façon dont la macro effectue son travail. Le délai est nécessaire pour que l’animation semble fonctionner; sans elle, les nombres dans E4 augmenteraient trop rapidement. Excel fournit quelques moyens pratiques pour implémenter le délai. Par exemple, cet exemple de macro repose sur la fonction Sleep:
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If Private Sub Worksheet_Change(ByVal Target As Range) Dim n As Integer Const cellWatch As String = "$B$7" Const cellCount As String = "$E$4" Const msec As Long = 200 ' milliseconds If Target.Address = cellWatch Then Application.EnableEvents = False Range(cellCount).Show If IsNumeric(Target) Then For n = 0 To Target ' skipped if Target < 0 Range(cellCount) = n Sleep msec ' delay each increment Next n End If Range(cellCount) = Target Application.EnableEvents = True End If End Sub
Ce code doit être ajouté au module ThisWorksheet, car il est conçu pour s’exécuter chaque fois que quelque chose change dans la feuille de calcul. Le code vérifie si la cellule modifiée est la cellule cible (B7). Si c’est le cas, il saisit la valeur là-bas et saute dans une boucle For … Next qui met à jour tout ce qui se trouve dans la cellule E4. La fonction Sleep est utilisée pour retarder, dans ce cas, 200 millisecondes entre chaque mise à jour de E4.
Si vous souhaitez une macro plus courte et ne reposant pas sur le gestionnaire d’événements Worksheet_Change, vous pouvez envisager les éléments suivants. Il utilise la méthode Wait pour faire une pause dans la boucle For … Next:
Sub CountUp() Dim J As Integer For J = 0 To Range("B7").Value Range("E4").Value = J Application.Wait (Now + TimeValue("0:00:01")) Next J Range("E4").Value = Range("B7").Value End Sub
Cette version de la macro met en pause une seconde complète entre chaque mise à jour de la cellule E4.
Chaque fois que vous utilisez une macro comme celle-ci qui implémente une sorte de retard, rappelez-vous que votre feuille de calcul peut sembler moins réactive. Cela est dû à ce retard et quelle que soit la valeur de la cellule E4. (Plus la valeur est élevée, plus le délai agrégé est long.)
_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 (13753) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.