Mise en œuvre de 3 macros différentes sur plusieurs cellules dans une feuille par sélection

Je suis un noob complet à la fois Excel et Vba et j'essaie de trouver un code qui peut me donner une minuterie et un changement de couleur de cellule qui se produit lorsque je clique sur mes trois boutons StartBtn, StopBtn et ResetBtn. À l'heure actuelle, j'ai eu le code pour fonctionner pour une seule cellule B3 mais j'ai besoin des boutons pour fonctionner pour n'importe quelle cellule sur la feuille sur laquelle on clique. Je collage le code ci-dessous et j'espère que vous seriez assez gentil pour passer par le code et enregistrer ce noob confus.

Code:

Dim StopTimer As Boolean Dim SchdTime As Date Dim Etime As Date Const OneSec As Date = 1 / 86400# Private Sub StartBtn_Click() Range("B3").Interior.ColorIndex = 6 StopTimer = False SchdTime = Now() [B3].Value = Format(Etime, "hh:mm:ss") Application.OnTime SchdTime + OneSec, "Sheet1.NextTick" End Sub Private Sub ResetBtn_Click() Range("B3").Interior.ColorIndex = -4142 StopTimer = True Etime = 0 [B3].Value = "00:00:00" End Sub Private Sub StopBtn_Click() Range("B3").Interior.ColorIndex = 4 StopTimer = True Beep End Sub Sub NextTick() If StopTimer Then 'Don't reschedule update Else [B3].Value = Format(Etime, "hh:mm:ss") SchdTime = SchdTime + OneSec Application.OnTime SchdTime, "Sheet1.NextTick" Etime = Etime + OneSec End If End Sub 

En excel, vous pouvez utiliser la propriété de sélection pour traiter ce qui est sélectionné ou actif dans votre feuille de calcul.

Notez cependant que cela peut causer des problèmes plus loin sur le chemin car le code devient plus complexe et l'utilisation de la selection n'est habituellement pas la meilleure méthode.

Plutôt que d'utiliser la Selection dans tout votre code, je vous suggère d'utiliser la Selection pour identifier la cellule actuellement sélectionnée lorsque vous StartBtn votre StartBtn , enregistrez cet emplacement et utilisez-le dans les autres routines; par exemple,

  Dim StopTimer comme booléen
 Dim SchdTime As Date
 Dim Etime Date
 Dim SavedLoc As Variant 'Here
 Const OneSec As Date = 1/86400 #

 Private Sub StartBtn_Click ()
     Si Selection.Count <> 1 Then
         MsgBox "Sélectionnez une seule cellule".
         Exit Sub
     Fin si
     SavedLoc = Selection.Address 'Here
     Range (SavedLoc) .Interior.ColorIndex = 6 'Ici
     StopTimer = False
     SchdTime = maintenant ()
     Range (SavedLoc) .Value = Format (Etime, "hh: mm: ss") 'Ici
     Application.OnTime SchdTime + OneSec, "NextTick"
 End Sub

 Private Sub ResetBtn_Click ()
     Range (SavedLoc) .Interior.ColorIndex = -4142 'Ici

     StopTimer = True
     Etime = 0
     Range (SavedLoc) .Value = "00:00:00" 'Ici
     SavedLoc = nul 'Here
 End Sub

 Private Sub StopBtn_Click ()
     Range (SavedLoc) .Interior.ColorIndex = 4 'Ici
     StopTimer = True
     SavedLoc = nul 'Here
     Bip
 End Sub

 Sub NextTick ()
     Si StopTimer puis
         'Ne modifiez pas la mise à jour
     Autre
         Range (SavedLoc) .Value = Format (Etime, "hh: mm: ss") 'Ici
         SchdTime = SchdTime + OneSec
         Application.OnTime SchdTime, "NextTick"
         Etime = Etime + OneSec
     Fin si
 End Sub 

Si vous souhaitez exécuter simultanément des temporisations dans plusieurs cellules, cela devient beaucoup plus compliqué, et vous devriez vous référer aux commentaires sur votre autre question .