Différer éxécution d'une macro selon valeur d'une cellule

Bonjour,

Dans la série "essayons de faire des trucs originaux avec excel"...

J'ai un fichier excel qui traite des données.

Pour des raisons que je ne vais pas détailler ici, l'utilisateur du fichier excel a besoin que le déclenchement d'une macro soit décalé dans le temps.

Voilà précisément le fonctionnement désiré :

La cellule B1 du feuillet 2 contient une valeur entre 0 et 3. Entre le lancement de notre macro et le début effectif des tâches que cette macro contient, nous souhaitons que se déroule le temps de latence indiqué dans la cellules A1 (en secondes, millisecondes ou minutes, peu importe).

Exemple : Si B1 contient 1.5, alors lorsque la macro est déclenchée, la première tâche inclue dans la macro doit se déclencher après 1.5 secondes, et le reste du déroulement de la macro doit se faire normalement.

Quelqu'un sait-il faire cela?

Nicole

'Ouvrez un classeur Excel

'Dans le premier feuille copier ce code

Private Sub Worksheet_Change(ByVal Target As Range)

If IsNumeric(Range("B1").Value) = False Or IsEmpty(Range("B1").Value) = True Then

Exit Sub

Else

Belkacem Range("B1").Value

'Votre macro ici

'Exemple

MsgBox "Salut nicopat "

End If

End Sub

'---------------------------------

' dans un module copier le code :

Public Sub Belkacem(nicopat As Date)

BEL = DateAdd("s", nicopat, Now)

While BEL > Now

DoEvents

Wend

End Sub

Dans la cellule B1 de la page1 tapez: 2 ou 3 (il sera le nombre de secondes)

Bonjour Belkacem,

J'ai essayé ta proposition, mais je ne suis pas parvenue à la faire fonctionner.

J'ai créer un fichier exemple ci-joint. Ce fichier comprend :

  • une valeur aléatoire en B1
  • une macro "Paste" qui sert d'exemple

Le fichier est en recalcul manuel et doit le rester.

Le but, c'est que lorsque je lance la macro "Paste" de ce fichier (ou une autre macro intermédiaire créée spécialement pour résoudre mon problème), il se déroule X secondes (X est la valeur dans B1) avant que la macro "Paste" ne se déclenche.

15delay-test.xlsm (14.27 Ko)

Bonjour,

Procédure à lancer, qui programmera le lancement de Paste :

Sub LancerPaste()
    Dim t
    t = Now + TimeSerial(0, 0, ActiveSheet.Range("B1"))
    Application.OnTime "Paste", t
End Sub

B1 contient une durée en secondes...

MFerrand a écrit :

Bonjour,

Procédure à lancer, qui programmera le lancement de Paste :

Sub LancerPaste()
    Dim t
    t = Now + TimeSerial(0, 0, ActiveSheet.Range("B1"))
    Application.OnTime "Paste", t
End Sub

B1 contient une durée en secondes...

Bonjour MFerrand,

Merci pour ton aide.

Le problème, c'est que ça lance une procédure de débogage en surlignant en jaune cette partie du code : Application.OnTime "Paste", t

Désolé ! J'ai inversé. Excuses.

Application.OnTime t, "Paste"

Super MFerrand, ça marche. Merci bcp !

Bonjour,

Voici la macro finale :

Sub delay()

    Dim t
    t = Now + TimeSerial(0, 0, ActiveSheet.Range("B1"))
    Application.OnTime t, "Action"
End Sub

Comment la modifier pour que, au lieu de se référer à la valeur de "ActiveSheet.Range("B1")", la macro se réfère à la valeur de la cellule B1 d'un feuillet nommé "data", et ce quelque soit le feuillet en cours d'ouverture?

ça semble OK en remplaçant par :

ActiveWorkbook.Sheets("Data").Range("B1")

Rechercher des sujets similaires à "differer execution macro valeur"