Probléme de condition en fonction d'une heure

Bonjour,

Demain ma petite amie va avoir ses 18 ans, j’ai eu la subite envie de lui faire une ptite connerie pour la faire rire demain matin ( elle est née a 9h30 ) et sachant que je bosse a cette heure la je pourrais pas l’appeler :confused:

Mon code est assez bête ( j’ai commencé le VBS hier vers 23h ^^ ) En fait j’aimerai que des passé 9h30 un message apparaisse sur son PC, son arrière plan change ca je sais le faire j’ai prévu de faire une boucle pour qu’il teste en continue pour l’heure . J’arriverai a lui faire mette au démarrage ( BDR ) je lui ferais téléchargé sur un serveur FTP l’arrière plan comme ca elle ne se doutera de rien . j’ai pensé aussi a lui faire jouer une musique mais bon ca j’ai encore quelque heure devant moi pour peaufiner :slight_smile:

J’ai voulu tenté en utilisant une condition avec plusieur AND pour qu’il teste le mois le jour l’année et l’heure cependant je suis confronté a un problème si elle allume son PC a 9h31 le code ne fonctionnera pas j’ai donc remplacé les ANDs de l’heure et des minutes par des “>=” mais je suis confronté a un autre problème arrivé a 10h ca ne fonctionnera pas car les minute seront inférieure a 30 :confused:

Existe t il un moyen pour lui qu’il fasse en gros Si minute <30 mais que heure >9 alors exécuté le code ?

Je suis désolé si c’est le fouilli j’ai encore pas mal de boulot a faire mais je garde espoir

Le code n’est qu’a l’état de test la première partie ne sera pas dans le code final bien entendu

Les MsgBox OK et No seront remplacé par les instructions que je lui donnerai a faire :slight_smile:

WScript.Echo Day(Now)& "."& Month(Now)& "."& Year(Now)& " "& Hour(Now)& ":"& Minute(Now)& ":"& Second(Now) 
if Year(now) = 2008 AND Month(now) = 07 AND Day(now) = 10 AND Hour(now) >= 9 AND Minute(now) >= 30  Then 
MsgBox "OK!"
Else 
MsgBox "NO!"
end if

Merci d’avance et désolé si c’est vraiment le bordel mon code ^^

Après réflexion j’ai essayé un OR aprés le test pour les minutes ca donne donc si minute <= 30 Ou heure <=10 alors exécuter instruction

if Year(now) = 2008 AND Month(now) = 07 AND Day(now) = 10 AND Hour(now) >= 9 AND Minute(now) >= 30 OR Hour(now) >= 10 Then 

Je laisse le message on sait jamais ca pourra servir a quelqu’un ^^

Edit : En faite c’est pas bon le ou casse tout j’ai remis mon système a la bonne date et vu qu’il est plus de dix heure ca s’exécute :frowning:

Edit2 : J’ai réajouté les condition d’année de mois et de jour après le or et ça fonctionne ce qui donne

]if Year(now) = 2008 AND Month(now) = 07 AND Day(now) = 10 AND Hour(now) >= 9 AND Minute(now) >= 30 OR Hour(now) >= 10 AND Year(now) = 2008 AND Month(now) = 07 AND Day(now) = 10 Then [quote=""]

En espérant que ça soit la bonne …

/me boulet !
Edité le 09/07/2008 à 18:35

Pourquoi ne pas faire l’inverse ?
Tu convertis ta date cible de texte en date avec Cdate(), et ensuite tu n’as plus qu’à comparer deux nombres

Pourrais tu m’en dire plus ca fais que quelque heure que je fais du VBS ^^

Une date, c’est stocké sous forme d’un nombre décimal, dans lequel la partie entière représente le nombre de jours écoulés, et la partie décimale les heures minutes secondes à l’intérieur de ce jour (sous forme de fraction de jour).
essaie de faire
x = now(), puis x=x+1, tu verras que ru as progressé d’un jour
x = now() puis x=x + 0.5, tu auras progressé de 12h

Bien sûr tu peux jouer aussi sur les égalités/inégalités
x=now()
x = x + 4 '4 jours plus tard
while now() < x

wend

Pour utiliser une date déterminée, on fait la conversion d’un texte (format de date valide) avec Cdate
x = Cdate(“2008/07/14 22:30:00”)

Ah ok toujours bon a savoir ca .

Le code est quasiment fini il me reste a mettre en place la boucle mais j’arrive pas a savoir laquelle utilisé

Je voulais utilise un Do Loop comme ceci

Do

Si condition ok exécuté code, en fin de code y’a un exit do
Si condition pas ok Loop

Mais il me dit qu’il manque loop …

Rahh j’en ai marre :@ Pas moyen de comprendre y’a pas un goto like en VBS ?

Faut encore que je fasse le code d’installation , le txt pour le ftp et que je trouve un ftp que je teste tout ca sur un autre poste et il me reste 3 heure grand maximum :’(
Edité le 09/07/2008 à 20:53

Je ne suis pas spécialiste de vbs, je connais mieux le vba, mais je pense que c’est la même chose à ce niveau :
Il ne doit pas exister de syntaxe do … loop
tu as do while … loop
do until … loop
do … loop while
do … loop until
Et tu ne devrais pas avoir besoin de sortie forcée (exit do)

Si tu n’y arrives pas avec une de ces méthodes, poste le bout de code qui te pose problème

Je ne sais pas le quel utilise do while loop ou do loop while . ni meme comment les utiliser :frowning:


if Year(now) = 2008 AND Month(now) = 07 AND Day(now) = 10 AND Hour(now) >= 9 AND Minute(now) >= 30 OR Hour(now) >= 10 AND Year(now) = 2008 AND Month(now) = 

07 AND Day(now) = 10 Then
MsgBox "Premier message"
MsgBox "Second message"
Dim Shell
Set Shell = WScript.CreateObject("WScript.Shell")
Shell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\OriginalWallpaper", "C:\windows\system32\anniv.bmp", "REG_SZ"
Shell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper", "C:\windows\system32\anniv.bmp", "REG_SZ"
Shell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\WallpaperStyle", "2", "REG_SZ"
Shell.RegWrite "HKEY_CURRENT_USER\Control Panel\Desktop\TileWallpaper", "0", "REG_SZ"
Shell.Run "%windir%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters", 1, False
MsgBox "3 eme message"
MsgBox "4 eme message"
MsgBox "5 eme message"
shell.Run "c:\windows\system32\mpc.exe c:\windows\system32\TLLCC.mp3"
WScript.Sleep 15000
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill
strComputer = "."
strProcessKill = "'mpc.exe'"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
next
MsgBox "6 eme"
MsgBox "7 eme"
MsgBox "8 eme"
shell.Run "c:\windows\system32\mpc.exe c:\windows\system32\LQAM.mp3", True
MsgBox "9 eme"
MsgBox "10 eme "
MsgBox "Et enfin le dernier"
else
endif

Merci de ton aide
Edité le 09/07/2008 à 21:07

Tu veux attendre l’heure fatidique sans rien faire ?
while now < x
sleep(60000)
wend
(action)

autre syntaxe
do while now < x
sleep(60000)
loop
(action)

Edit:
Ton code est arrivé pendant que j’écrivais
Ce que je te propose remplace les 2 premières lignes ; ensuite ça devrait être bon, je pense que tu as déjà testé le reste compte tenu des MsgBox qui s’y trouvent

Edit 2 :
N’oublie pas d’enlever le endif à la fin !
Edité le 09/07/2008 à 21:13

Oui je veux qu’il reste la a rien glandé juque temps que l’heure arrive ^^

x correspond a quoi ?
Edité le 09/07/2008 à 21:13

correspond à l’heure que tu t’es choisie, comme expliqué un peu plus haut dans le fonctionnement de Cdate()

Ok bon je vais tenté merci infiniement

Edit : J’y arrive pas je comprend pas le Cdate :confused:

En plus je commence a être HS et j’ai loin d’avoir fini :’(
Edité le 09/07/2008 à 21:23

Je marque ca

x = Cdate(“2008/07/14 22:30:00”)

MsgBox x et il me sort 14/07/2008 22:30:00 et pas un truc décimal :s

Oui, c’est de l’interprétation par msgbox pour une meilleure lecture

essaie Msgbox Cdbl(x) si ça peut te rassurer

OMFG Merci …
J’avoue que je commencais a désespéré :frowning:

C’est bon ca ?

x = CDate (now)
y = Cdate("2008/07/10 09:30:00")
Do While x < y
WScript.Sleep(3000)
loop

J’ai trouvé !!

Sachant que la boucle se faisais aprés le Cdate(now) jamais il le recalculait donc ca ne s’exécuté jamais .

x = CDate (now) y = Cdate("2008/07/10 09:30:00") Do While x < y x = CDate (now) y = Cdate("2008/07/10 09:30:00") WScript.Sleep(1000) loop

C’est pas forcément beau comme code mais ca marche !

Merci GCC merci beaucoup !
Edité le 09/07/2008 à 22:33

1- Now est déjà une date, pas besoin de le repasser dans Cdate
2- to y ne change jamais de valeur, tu peux donc le définir ue fois pour toutes en dehors de la boucle
3- si tu veux que le test se fasse par rapport à l’heure courante, il te faut calculer x au dernier moment, et pas avant le sleep(), sinon tu auras un décalage d’une minute


x = now
y = Cdate("2008/07/10 09:30:00")
Do While x < y
WScript.Sleep(1000)
x = CDate (now)
loop

tu peux même encore simplifier


y = Cdate("2008/07/10 09:30:00")
Do While now < y
WScript.Sleep(1000)
loop

Edité le 09/07/2008 à 22:46

Je te remercie beaucoup pour toute l’aide que tu m’a apporter tout à fonctionner a la perfection . Je n’y serais jamais parvenu sans ton aide ^^ .

J’ai lu que tu connaissais le VBA qu’elle sont les avantage du VBA par rapport au VBS et aussi les inconvénients ?

Tous les VBx sont de la même famille
Après, c’est l’environnement d’utilisation qui change
Le VBS, tu l’utilises directement, un peu comme un .bat (ou comme un exécutable compilé).
Le VBA c’est le langage de programmation associé aux produits microsoft comme excel, word, powerpoint etc.
Attention le vba d’excel n’est pas (tout à fait) le même que celui de word ou d’acces …

Par exemple, ton programme en vba excel:
tu ouvres excel, tu rentres la date cible dans la cellule A1
tu vas dans le vba, workbook, open et tu ecris ta fonction

Private Sub Workbook_Open()
Do While now < Range("A1")
Sleep(1000)
loop
(action)
End Sub

Juste pour le fun je vais tenté de faire le meme programme ( si on peut appeler ça un programme ) en C++ ^^

Merci encore de ton aide !