Alarme horloge VBA excel

cs_aminiou Messages postés 8 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 3 septembre 2011 - 20 juin 2011 à 10:12
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 11 nov. 2011 à 13:08
Bonjour,

Je cherche un code pour déclencher une alarme en fonction de la date et de l'heure qui sont déjà entrés dans un tableau excel :

exemple

en A1 20/06/2011 B1 17:30
en A2 20/06/2011 B2 18:00

Ainsi l'alarme se déclenche quand la date et l'heure sont atteint, et à la suite.

Est ce possible ?

Merci à l'avance pour vos réponses.

Cordialement.

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juin 2011 à 12:50
Bonjour,

La méthode OnTime (Application.OnTime) est ta solution et est à bûcher dans ton aide VBA.

Pistes :
- Il te faudra placer la procédure appelée (appelons-la alarme) dans un module standard, en "Public"
- je te conseille :
--de l'appeler une première fois à l'ouverture de ta feuille
-- d'utiliser une variable (appelons-la macel) static typée en Range et de l'incrémenter par Offset. Au tout premier appel, macel sera nothing (et ne rien faire alors si ce n'est de la définir comme Range("A1")
-- depuis alarm : rappeler alarm avec la valeur de macel, ===>>> ton message d'alarme ===>>> incrémenter macel (par offset).

- bien évidemment : ne le faire (par offset) que si la cellule "suivante" est remplie !

Si tu as l'âme d'un développeur (même en herbe), ces indications devraient te suffire pour "articuler" la "chose".
Je n'interviendrai à nouveau qu'au vu d'un code tenté.

Ceci étant dit : je trouve que ton mécanisme est assez risqué (celui de mettre en dur dans des cellules des dates/heurs d'alarme).
Quid si, par exemple, tu ouvres ton appli alors qu'est déjà dépassé l'heure de la cellule A1 ? ===> il te faudra "boucler" jusqu'à ce que :

--- soit la cellule suivante contient une valeur supérieure
- soit la cellule suivante ne contient plus de valeur.
Tout cela est bien évidemment possible, mais un peu ... "lourdaud"
Je t'attends avec ton code d'essai pour continuer avec toi (c'est là un de mes principes fondamentaux d'aide apportée à un développeur).




____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
20 juin 2011 à 13:39
Salut,

c'est pas du VB.net ça !!! fait gaffe quand tu postes

C'est quoi cette alarme ? une boite de message, un son etc

Dans quelle condition doit elle se déclencher ? à l'ouverture du fichier, même si le fichier est déjà ouvert etc

Précise

A+
0
cs_aminiou Messages postés 8 Date d'inscription vendredi 5 novembre 2010 Statut Membre Dernière intervention 3 septembre 2011
20 juin 2011 à 15:48
Merci déjà pour vos réponses, je connais Ontime mais cela se produit dans workbook_Open ou dans worksheet_change alors que je veux que cela se produise même si le fichier est déjà ouvert et même si je travaille sur une autre feuille.

Est ce possible ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juin 2011 à 16:37
oui ? Et ?
relis-moi (et je souligne ici) :

de l'appeler une première fois à l'ouverture de ta feuille
-- d'utiliser une variable (appelons-la macel) static typée en Range et de l'incrémenter par Offset. Au tout premier appel, macel sera nothing (et ne rien faire alors si ce n'est de la définir comme Range("A1")
-- depuis alarm : rappeler alarm avec la valeur de macel, ===>>> ton message d'alarme ===>>> incrémenter macel (par offset).


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
20 juin 2011 à 17:55
de toute façon cela n'a aucun lien direct les evenements que tu as cités

copie de l'aide VBA :

OnTime, méthode


Détails:
Cette méthode programme l'exécution d'une procédure à un moment précis (soit à une heure précise soit après l'écoulement d'un délai précis).

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
expression Obligatoire. Expression qui renvoie un objet Application.

EarliestTime Argument de type Variant obligatoire. Heure à laquelle vous voulez que la procédure s'exécute.

Procedure Argument de type String obligatoire. Nom de la procédure à exécuter.

LatestTime Argument de type Variant facultatif. Heure maximale à laquelle la procédure peut être exécutée. Par exemple, si vous affectez à l'argument LatestTime la valeur EarliestTime + 30 et que Microsoft Excel n'est pas en mode Ready, Copy, Cut ou Find au moment EarliestTime parce qu'une autre procédure est en cours d'exécution, Microsoft Excel attendra la fin de la procédure pendant 30 secondes. Si Microsoft Excel ne se trouve pas en mode Ready dans les 30 secondes, la procédure ne sera pas exécutée. Si vous ne spécifiez pas cet argument, Microsoft Excel attendra jusqu'à ce que la procédure puisse être exécutée.

Schedule Argument de type Variant facultatif. Cet argument a la valeur True pour programmer une nouvelle procédure OnTime. Il a la valeur False pour effacer une procédure précédemment définie. La valeur par défaut est True.

Notes
Utilisez Now + TimeValue(time) pour programmer une procédure à exécuter après un certain délai (à partir de maintenant). Utilisez TimeValue(time) pour programmer une procédure à exécuter à un moment précis.

Exemples
Cet exemple montre comment exécuter my_Procedure dans 15 secondes.

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

Cet exemple montre comment exécuter my_Procedure à 17 heures.

Application.OnTime TimeValue("17:00:00"), "my_Procedure"

Cet exemple montre comment annuler le paramétrage de OnTime de l'exemple précédent.

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
20 juin 2011 à 17:56
pardon, petite correction :

de toute façon cela n'a aucun lien direct avec les événements que tu as cités
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juin 2011 à 18:24
Bon (mon jour de bonté) :

je fais ici ce que je t'ai dit de faire (pas plus)

pour l'ouverture de ton classeur :
Private Sub Workbook_Open()
  alarme
End Sub

pour la procédure alarme (à mettre en pulic dans un module)
Public Sub alarme()
  Static macel As Range
  If macel Is Nothing Then
    Set macel = Worksheets("Feuil1").Range("A1")
    Application.OnTime macel.Value, "alarme"
  Else
    MsgBox "hola"
  End If
  Set macel = macel.Offset(1, 0)
  If macel.Value <> "" Then
    Application.OnTime macel.Value, "alarme"
  End If
End Sub

exécutera le message à chaque heure figurant successivement en cellules (de ta Feuil1) A1,A2,A3, etc ... jusqu'à rencontrer une cellule vide en colonne A.
Il est clair que les cellules de ta colonne A doivent être formatées en date/heure

Voilà pour la méthode (simplissime).
Relis maintenant mon premier message. Je t'y parlais du risque engendré par une ouverture du classeur à une heure supérieure à celle de la cellule A1.
Je te laisse gérer au moins cela, hein (expressions conditionnelles en utilisant Now)
Allez ! au travail (il te reste vraiment peu, là ...)



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Abakarpro Messages postés 2 Date d'inscription vendredi 12 juin 2009 Statut Membre Dernière intervention 11 novembre 2011
11 nov. 2011 à 12:16
slt à tous
je souhaiterai savoir en VBA sur Excel comment savoir si OnTime a programmé un evenement en cours

L'informatique à large spectre!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 nov. 2011 à 13:08
Bonjour, Abakarpro,
ta question est pour le moins étrange !
1) Ontime ne "programme" pas d'évènements
2) Ontime gère, non spontanément mais à ta seule demande (donc ton code) les instructions que TU définis !
dès lors : ta question me laisse assez perplexe, car( équivalente à :
"je donne l'ordre à mon petit frère d'aller chez l'épicier à 14 heures tapantes et voudrais savoir qui a donné cet ordre à mon petit frère, lorsqu'il y va à 14 heures tapantes" !!!



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous