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

- - Dernière réponse :  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.
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
3
Merci
 Bonjour à tous,

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


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



jean-marc

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
3
Merci
 
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_JMO
0
Merci
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 .
Commenter la réponse de SuperKoala42
0
Merci
Je me permet juste de vous demander une ou deux explications ^^.

J'ai du mal à comprendre comment fonctionne la fonction DateSerial.
Une petite explication?
Commenter la réponse de SuperKoala42
0
Merci
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?
Commenter la réponse de SuperKoala42
0
Merci
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
Commenter la réponse de SuperKoala42
0
Merci
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.
Commenter la réponse de SuperKoala42
0
Merci
Est-il possible de remplacer le "vbLongDate" par un autre type permettant d'avoir un autre format de date, par exemple YYYYMMDD??
Commenter la réponse de SuperKoala42
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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)
Commenter la réponse de SuperKoala42
0
Merci
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.
Commenter la réponse de SuperKoala42
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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.
Commenter la réponse de ucfoutu
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
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
Commenter la réponse de cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
0
Merci
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
Commenter la réponse de cs_JMO
0
Merci
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..
Commenter la réponse de SuperKoala42
0
Merci
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
Commenter la réponse de SuperKoala42

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.