VBS : Aide mon premier script (Récupération du dernier jour du mois en cours)

Résolu
SuperKoala42 - 12 mars 2013 à 13:42
 SuperKoala42 - 13 mars 2013 à 10:17
Bonjour à tous :).

Je me permets de poster sur ce forum car je débute en VBS et j'ai du mal à débugger mon premier script ^^.

J'aimerais récupérer le dernier jour du mois en cours:

J'ai vu dans un vieux post du site du zéro que pour réaliser un tel script il faut tester sir le mois comporte 31 jours et tester pour le mois de février si l'année est bissextile.

Voici mon code (bon c'est mon premier script VBS donc je ne suis pas DU TOUT sûr de certaine chose) :

Public Function EstPair(month As Long) As Boolean
    EstPair (month Mod 2) 0
End Function
 
Public Function EstBisex(year As Long) As Boolean
    EstPair (year Mod 4) 0
End Function
 
 
Dim month
Dim year
Dim DernierJourDuMoi
 
year = cint (year(now))
month = cint (month(now))
 
 
if (EstPaire(month) = true) then
            if(month = 8) then
                DernierJourDuMoi = 31
            end if
             
            if (EstBisex(year)true and month 2) then
                DernierJourDuMoi = 29
            else
                DernierJourDuMoi = 28
            end if
             
    DernierJourDuMoi = 30  
else
            DernierJourDuMoi = 31
end if
 
msqbox ("Le dernier jour du mois de :"& month(now) & _" est :" &DernierJourDuMoi&)


Tout d'abord j'ai créé deux fonctions :

- Test du mois impaire ou paire

- Test de l'année bissextile

J'ai créé trois variables dont deux ou je récupère l'année et le mois que je converti en int (je ne sais pas si il faut faire comme cela), et mon test dans ma boucle if..

J'ai beaucoup de mal à débugger ce script sachant qu'à la première ligne j'ai déjà une erreur dans la fonction avec le As long.

Merci d'avance pour l'aide que l'on pourrait m'apporter afin de m'améliorer.

Bonne journée à tous.

18 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
12 mars 2013 à 13:49
Bonjour,
1) VBS n'est en aucun cas du
Forum > VB.NET et VB 2005

2) Dans ces conditions : un simple rappel élémentaire : le dernier jour du mois en cours n'est jamais rien d'autre que
le premier jour du mois suivant moins un jour
.
C'EST ta réponse (et elle est simple).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
12 mars 2013 à 13:51
 Bonjour à tous,

c'est exactement la réponse (bonjour Jacques).


MsgBox FormatDateTime(DateSerial(Year(Date),Month(Date)+1,1)-1,vbLongDate)



jean-marc
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
12 mars 2013 à 14:48
 
Fonction DateSerial (script56.chm) : Renvoie un Variant de sous-type Date pour une année, un mois et un jour spécifiés.

DateSerial(year, month, day)

Arguments
year : Nombre compris entre 100 et 9999 inclus, ou une expression numérique.
month : Toute expression numérique.
day : Toute expression numérique.

Notes :
Pour spécifier une date telle que le 31 décembre 1991, la plage des nombres pour chaque argument DateSerial doit être normalement comprise dans la plage acceptée pour l'unité ; autrement dit, 1–31 pour les jours et 1–12 pour les mois. Toutefois, vous pouvez aussi spécifier des dates relatives pour chaque argument en utilisant toute expression numérique représentant un certain nombre de jours, de mois ou d'années antérieurs ou postérieurs à une date donnée.

L'exemple suivant utilise des expressions numériques à la place des nombres absolus de date. Ici, la fonction DateSerial renvoie une date correspondant au jour précédant le premier jour (1 - 1), deux mois précédant le mois d'août (8 - 2), 10 ans avant 1990 (1990 - 10) ; en d'autres termes, le 31 mai 1980.

Dim MyDate1, MyDate2
MyDate1 = DateSerial(1970, 1, 1) ' Renvoie 1 janvier 1970.
MyDate2 = DateSerial(1990 - 10, 8 - 2, 1 - 1) ' Renvoie 31 mai 1980.



Pour le thème : Visual Basic 6 > Langages dérivés > VBScript


jean-marc
3
SuperKoala42
12 mars 2013 à 14:36
Bonjour et merci pour vos réponses.

Tout à fait vbs n'est pas du .net ou du vb 2005, mais je n'ai pas trouvé de section relative au scripting dans le Forum (ou alors j'ai très mal cherché).

En tout cas merci beaucoup, c'est tout de suite plus simple comme cela .
0

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

Posez votre question
SuperKoala42
12 mars 2013 à 14:40
Je me permet juste de vous demander une ou deux explications ^^.

J'ai du mal à comprendre comment fonctionne la fonction DateSerial.
Une petite explication?
0
SuperKoala42
12 mars 2013 à 16:55
Merci pour ces réponses positives.

J'aimerais poster autre chose sur du vbs, mais je ne trouve pas de section adéquate, est-ce normal?

Je souhaite créer une tache planifier pour chaque dernier jour d'un mois, pour le moment, j'ai trouvé cela :

[code=vb]strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create _
("Notepad.exe", "********123000.000000-420", _
True , 1 OR 4 OR 16, , , JobID)
Wscript.Echo errJobCreated[code=vbs]

le 1 correspond à lundi, 4 à mercredi et 16 à vendredi, j'aimerais mettre une date précise mais je ne sais pas si cela est possible?
0
SuperKoala42
12 mars 2013 à 16:56
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create _
    ("Notepad.exe", "********123000.000000-420", _
        True , 1 OR 4 OR 16, , , JobID) 
Wscript.Echo errJobCreated
0
SuperKoala42
12 mars 2013 à 17:00
Je suis allé un peu vite en besogne, je pense avoir trouvé les infos qu'il me fallait : http://technet.microsoft.com/en-us/library/ee176705.aspx

UTC time to run the job. This is of the form YYYYMMDDHHMMSS.MMMMMM(+-)OOO, where YYYYMMDD must be replaced by ********. Example: ********123000.000000-420, which implies 12:30 P.M. Pacific time with daylight saving time in effect.

Je post pour les intéressés.
0
SuperKoala42
12 mars 2013 à 17:11
Est-il possible de remplacer le "vbLongDate" par un autre type permettant d'avoir un autre format de date, par exemple YYYYMMDD??
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2013 à 17:21
J'aimerais poster autre chose sur du vbs, mais je ne trouve pas de section adéquate, est-ce normal?

Visual Basic / Langages dérivés / VBScript ne te parait pas suffisamment clair ?
Ton second problème est distinct du premier, qui, lui, traite du Récupération du "dernier jour du mois en cours" ===>> une discussion distincte s'impose (dans la bonne section, s'il te plait, maintenant que tu la connais).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
SuperKoala42
12 mars 2013 à 17:35
Voilà mon code pour les intéressés, il ne reste plus qu'à ajouter tout cela à la création de la tâche planifié.

Dim uneDate
Dim mTab
Dim final

uneDate = FormatDateTime(DateSerial(Year(Date),Month(Date)+1,1)-1,vbShortDate)

mTab = Split(Cstr (uneDate), "/")
MsgBox mTab(1)
MsgBox mTab(2)
MsgBox mTab(0)

final = (mTab(2)+mTab(1)+mTab(0))

msgBox (final)
0
SuperKoala42
12 mars 2013 à 17:38
Ah dac j'étais dans Visual Basic 6 > Langages dérivés > vbscript.

Désolé.

En tout cas merci pour votre aide je continuerais tout cela dans un autre post.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2013 à 17:46
assez surprenant d'utiliser le split pour extraire l'année, le mois et le jour alors que tu as déjà l'année (year), le mois (month) et le jour (day) ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2013 à 17:48
Ah dac j'étais dans Visual Basic 6 > Langages dérivés > vbscript

Non. Tu étais dans la section Forum > VB.NET et VB 2005 y as été déplacé vers la bonne par un administrateur bienveillant.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
12 mars 2013 à 18:00
Pour info,

MsgBox FormatDateTime(DateSerial(Year(Date),Month(Date)+1,1)-1,vbLongDate) & vbCrLf &_
       FormatDateTime(DateSerial(Year(Date),Month(Date)+1,1)-1,vbShortDate) & vbCrLf &_
       DateSerial(Year(Date),Month(Date)+1,1)-1


Donc

MyDate = DateSerial(Year(Date),Month(Date)+1,1)-1
MyDate = Right(MyDate,4) & Mid(MyDate,4,2) & Left(MyDate,2)
MsgBox MyDate,,DateSerial(Year(Date),Month(Date)+1,1)-1

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
12 mars 2013 à 18:05
MsgBox DateSerial(Year(Date),Month(Date)+1,1)-1 & vbCrLf &_
       DateSerial(Year(Date),Month(Date)+1,1-1)


Les deux syntaxes renvoient le même résultat.

jean-marc
0
SuperKoala42
13 mars 2013 à 08:46
Bonjour à tous.

Et merci beaucoup de votre aide précieuse (aussi bien pour le code que pour le placement de mon post dans le forum ^^).

Juste pour finir de comprendre le code de JMO :
- La fonction DateSerial, c'est Top!!!
- Mais pourquoi pas

MyDate = DateSerial(Year(Date),Month(Date)+1,1)-1
MyDate = Right(MyDate,4) & Mid(MyDate,4,2) & Left(MyDate,2)
MsgBox MyDate


Au lieu de :
MyDate = DateSerial(Year(Date),Month(Date)+1,1)-1
MyDate = Right(MyDate,4) & Mid(MyDate,4,2) & Left(MyDate,2)
MsgBox MyDate,,DateSerial(Year(Date),Month(Date)+1,1)-1


Les deux renvoient le même résultat..
0
SuperKoala42
13 mars 2013 à 10:17
Petite info :

MyDate = DateSerial(Year(Date),Month(Date)+1,1)-1
MyDate = Right(MyDate,4) & Mid(MyDate,4,2) & Left(MyDate,2)
MsgBox MyDate,,DateSerial(Year(Date),Month(Date)+1,1)-1


retourne 20130331 sous W7
retourne 2013/03/31/ sous XP
0
Rejoignez-nous