VBA mois compris entre 2 dates

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
Je ne trouve pas l'idée de départ pour cela :
1) j'ai choisi un mois dans une box
2) je l'ai converti en chiffre ( janvier=1)
3) j'ai une date de début ex : 20/12/2015 et une date de fin 25/01/2016
J'aimerai afficher des infos SI la période intègre le mois choisi
Là pour l'exemple le test serai vrai si je demande DEcembre ou janvier
merci à vous

Rappel c'est dans un USF que cela se passe
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : VBA mois compris entre 2 dates

En fait j'ai une solution mais qui ne fonctionne pas à 100%
comme dans ce cas en petit exemple :
Code:
Sub test()
Dim dd, df As Date
Dim d1, d2, No_mois As Integer
No_mois = 1 ' JANVIER
dd = "18/11/2015"
df = "19/02/2016"
d1 = Month(dd)
d2 = Month(df)
If d1 <= No_mois Then MsgBox "debut ok"
If d2 >= No_mois Then MsgBox " Fin ok"
 If (d1 <= No_mois) And (No_mois <= d2) Then MsgBox "en stage"
End Sub
Si on cherche les gens en Janvier ( qui sera en 2016) cela ne fonctionne pas
avez vous une idée sur la méthode ?
dans le "IF" il y aura encore une condition en + donc un AND
 

gilbert_RGI

XLDnaute Barbatruc
Re : VBA mois compris entre 2 dates

Bonjour,

comme ceci peut-être
VB:
Sub test()
    Dim dd, df As Date
    Dim d1, d2, No_mois As Long
    No_mois = "42370" ' 1    ' JANVIER
    dd = "42326" '"18/11/2015"
    df = "42419" '"19/02/2016"
    d1 = dd
    d2 = df
    If d1 <= No_mois Then MsgBox "debut ok"
    If d2 >= No_mois Then MsgBox " Fin ok"
    If (d1 <= No_mois) And (No_mois <= d2) Then MsgBox "en stage"
End Sub
 

gilbert_RGI

XLDnaute Barbatruc
Re : VBA mois compris entre 2 dates

ou une autre solution

VB:
Sub test()
    Dim dd, df As Date
    Dim d1, d2, No_mois As Long
    No_mois = Format("1/1/2016", "standard") '"42370" ' 1    ' JANVIER
    dd = "18/11/2015"
    df = "19/02/2016"
    d1 = Format(dd, "standard")
    d2 = Format(df, "standard")
    If d1 <= No_mois Then MsgBox "debut ok"
    If d2 >= No_mois Then MsgBox " Fin ok"
    If (d1 <= No_mois) And (No_mois <= d2) Then MsgBox "en stage"
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : VBA mois compris entre 2 dates

Re , bonjour Gilbert
oui ton essai fonctionne , mais mon No_mois est issu d'une de liste dans USF
ensuite je l'affecte à son N° : j'ai 2 colonnes dans une feuille , je remplis ma Combo avec une ( janvier, fevrier ..etc) et celle d'à coté j'ai mis de 1 à 12 pour mettre dans le code
Comment fais tu pour changer de mois de recherche ?
 

Dranreb

XLDnaute Barbatruc
Re : VBA mois compris entre 2 dates

Bonjour.
Moi j'aurais fait comme ça :
VB:
Sub test()
Dim M As Integer, DébRéf As Date, FinRéf As Date, _
   DébDon As Date, FinDon As Date
M = 1 ' JANVIER ' ComboMois.listindex + 1
DébRéf = DateSerial(2016, M, 1)
FinRéf = DateSerial(2016, M + 1, 0)
DébDon = "18/11/2015"
FinDon = "19/02/2016"
If DébDon <= FinRéf And FinDon >= DébRéf Then
   If DébDon < DébRéf Then DébDon = DébRéf
   If FinDon > FinRéf Then FinDon = FinRéf
   MsgBox "En stage au cours du mois, du " & DébDon & " au " & FinDon
   End If
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : VBA mois compris entre 2 dates

Bjr Dranreb
je comprends mieux ton test mais pas valable si je demande DECEMBRE ( 12)
vu que tu mets 2016 dans ton code !
Peut-être n'est ce pas réalisable sauf faire une usine à gaz ?? ( triturer le choix du mois pour ajouter l'année en cours et puis comparer ...etc !)
 

Dranreb

XLDnaute Barbatruc
Re : VBA mois compris entre 2 dates

Alors comme ça :
VB:
Sub test()
Dim M As Integer, A As Integer, DébRéf As Date, FinRéf As Date, _
   DébDon As Date, FinDon As Date
M = 12 ' = ComboMois.listindex + 1
If M < Month(Date) Then M = M + 12
DébRéf = DateSerial(Year(Date), M, 1)
FinRéf = DateSerial(Year(Date), M + 1, 0)
DébDon = "18/11/2015"
FinDon = "19/02/2016"
If DébDon <= FinRéf And FinDon >= DébRéf Then
   If DébDon < DébRéf Then DébDon = DébRéf
   If FinDon > FinRéf Then FinDon = FinRéf
   MsgBox "En stage au cours du mois, du " & DébDon & " au " & FinDon
   End If
End Sub
Si toutefois c'est toujours soit le mois en cours soit un mois dans l'avenir qu'on veut consulter. S'il faut pouvoir revenir tout au plus 3 mois dans le passé il suffit de faire If M + 3 < Month(Date) Then M = M + 12.
C'est pas tellement usine à gaz. Il suffit de savoir que DateSerial, c'est comme la fonction DATE d'Excel, il interprète logiquement ce qu'on lui donne comme information: 0 comme N° de jour ? Eh ben c'est 1 jour de moins que le 1, donc la fin du mois précédent. Un mois > 12 ? Eh ben c'est ce mois diminué de 12 mais de l'année suivante.
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Re : VBA mois compris entre 2 dates

Oui , Dranreb cela commence à me plaire et être valable ( vite fait là ton code marche ..)
je teste en réel demain et te tiens au courant car il faut que j'adapte dans mon fichier
en gros quand tu as fait ton choix de "mois" et " service"; tu as une listBox qui te donne les gens qui correspondent à ta demande
donc ce que l'on désire savoir c'est Combien et Qui est en stage durant le mois choisi ... cela ne dépasse pas les 3 mois à venir
mais certainement comme Ici , le mois pourra chevaucher sur 2 années ; et donc dans le futur il faudra pouvoir selectionner n'importe quel mois ... et avoir la réponse correcte
Encore merci
 

Discussions similaires

Statistiques des forums

Discussions
314 237
Messages
2 107 609
Membres
109 874
dernier inscrit
nirpalush