OVH Cloud OVH Cloud

répartition nb de jours par mois entre 2 dates

14 réponses
Avatar
Philippe de PARIS
Bonjour,

en
a1 = 01/02/2006
b1 =12/06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2 dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe

10 réponses

1 2
Avatar
docm
Bonjour.

Par macro:

Sub nombrejours()
d1 = CDate([a1])
d2 = CDate([b1])
colonne = 2
While DateSerial(Year(d1), Month(d1) + 1, 0) < d2
a = DateSerial(Year(d1), Month(d1) + 1, 0)
colonne = colonne + 1
Cells(1, colonne) = a - d1 + 1
d1 = a + 1
Wend
colonne = colonne + 1
Cells(1, colonne) = d2 - a
End Sub

docm

"Philippe de PARIS" a écrit dans le message
news:
Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2 dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe




Avatar
Jacques93
Bonjour Philippe de PARIS,

En VBA :

Private Sub Worksheet_Activate()
CompteJours
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then CompteJours
End Sub

Private Sub CompteJours()
Dim mDeb As Integer, mFin As Integer, mois As Integer

mDeb = Month(Range("A1"))
mFin = Month(Range("B1"))
For mois = 1 To 12
If mois < mDeb Or mois > mFin Then
Cells(1, 2 + mois) = 0
ElseIf mois = mDeb Then
Cells(1, 2 + mois) = Day(Range("A1"))
ElseIf mois = mFin Then
Cells(1, 2 + mois) = Day(Range("B1"))
Else
Cells(1, 2 + mois) = Day(DateAdd _
("d", -1, "01/" & mois + 1 & "/" & Year(Range("A1"))))
End If
Next mois
End Sub

Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2 dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe





--
Cordialement,

Jacques.

Avatar
Philippe de PARIS
Merci,

Mais je arrive pas à utiliser cette macro, elle apparaît pas ....

Elle est à coller où ?

merci,
Philippe



"Jacques93" a écrit dans le message de
news:
Bonjour Philippe de PARIS,

En VBA :

Private Sub Worksheet_Activate()
CompteJours
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then CompteJours
End Sub

Private Sub CompteJours()
Dim mDeb As Integer, mFin As Integer, mois As Integer

mDeb = Month(Range("A1"))
mFin = Month(Range("B1"))
For mois = 1 To 12
If mois < mDeb Or mois > mFin Then
Cells(1, 2 + mois) = 0
ElseIf mois = mDeb Then
Cells(1, 2 + mois) = Day(Range("A1"))
ElseIf mois = mFin Then
Cells(1, 2 + mois) = Day(Range("B1"))
Else
Cells(1, 2 + mois) = Day(DateAdd _
("d", -1, "01/" & mois + 1 & "/" & Year(Range("A1"))))
End If
Next mois
End Sub

Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2
dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe



--
Cordialement,

Jacques.



Avatar
Jacques93
Bonjour Philippe de PARIS,

Dans Excel, tu tapes Alt+F11, dans la partie gauche
(Project - VBA Project) tu double-click sur le nom de la feuille, puis
tu colles le code dans la partie droite.

Au cas ou, le classseur ici :

http://cjoint.com/?hksA7T1vyQ

Merci,

Mais je arrive pas à utiliser cette macro, elle apparaît pas ....

Elle est à coller où ?

merci,
Philippe



"Jacques93" a écrit dans le message de
news:

Bonjour Philippe de PARIS,

En VBA :

Private Sub Worksheet_Activate()
CompteJours
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then CompteJours
End Sub

Private Sub CompteJours()
Dim mDeb As Integer, mFin As Integer, mois As Integer

mDeb = Month(Range("A1"))
mFin = Month(Range("B1"))
For mois = 1 To 12
If mois < mDeb Or mois > mFin Then
Cells(1, 2 + mois) = 0
ElseIf mois = mDeb Then
Cells(1, 2 + mois) = Day(Range("A1"))
ElseIf mois = mFin Then
Cells(1, 2 + mois) = Day(Range("B1"))
Else
Cells(1, 2 + mois) = Day(DateAdd _
("d", -1, "01/" & mois + 1 & "/" & Year(Range("A1"))))
End If
Next mois
End Sub


Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2
dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe



--
Cordialement,

Jacques.







--
Cordialement,

Jacques.



Avatar
Philippe de PARIS
merci,
entre temps j'avais réussi...

ça a l'air de fonctionner, sauf pour le premier mois où apparaît
invariablement 1 au lieu du nb de jour ...


"Jacques93" a écrit dans le message de
news:
Bonjour Philippe de PARIS,

Dans Excel, tu tapes Alt+F11, dans la partie gauche
(Project - VBA Project) tu double-click sur le nom de la feuille, puis tu
colles le code dans la partie droite.

Au cas ou, le classseur ici :

http://cjoint.com/?hksA7T1vyQ

Merci,

Mais je arrive pas à utiliser cette macro, elle apparaît pas ....

Elle est à coller où ?

merci,
Philippe



"Jacques93" a écrit dans le message de
news:

Bonjour Philippe de PARIS,

En VBA :

Private Sub Worksheet_Activate()
CompteJours
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B1")) Is Nothing Then CompteJours
End Sub

Private Sub CompteJours()
Dim mDeb As Integer, mFin As Integer, mois As Integer

mDeb = Month(Range("A1"))
mFin = Month(Range("B1"))
For mois = 1 To 12
If mois < mDeb Or mois > mFin Then
Cells(1, 2 + mois) = 0
ElseIf mois = mDeb Then
Cells(1, 2 + mois) = Day(Range("A1"))
ElseIf mois = mFin Then
Cells(1, 2 + mois) = Day(Range("B1"))
Else
Cells(1, 2 + mois) = Day(DateAdd _
("d", -1, "01/" & mois + 1 & "/" & Year(Range("A1"))))
End If
Next mois
End Sub


Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2
dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe



--
Cordialement,

Jacques.







--
Cordialement,

Jacques.





Avatar
Jacques93
Chez moi, et sur le classeur mis sur http://cjoint.com/?hksA7T1vyQ
ça marche...

merci,
entre temps j'avais réussi...

ça a l'air de fonctionner, sauf pour le premier mois où apparaît
invariablement 1 au lieu du nb de jour ...


--
Cordialement,

Jacques.

Avatar
Philippe de PARIS
Chez moi non !

le nombre de jours du premier mois (quelque soit celui ci) n'est pas bon....

mystère d'excel ...


"Jacques93" a écrit dans le message de
news:
Chez moi, et sur le classeur mis sur http://cjoint.com/?hksA7T1vyQ
ça marche...

merci,
entre temps j'avais réussi...

ça a l'air de fonctionner, sauf pour le premier mois où apparaît
invariablement 1 au lieu du nb de jour ...


--
Cordialement,

Jacques.



Avatar
Jacques93
Juste modifié A1 = 01/02/2005 par A1 = 25/02/2005

http://cjoint.com/?hktgzDRfAO

j'obtiens :

http://cjoint.com/?hktkTV0RIE

Excel 2003

Chez moi non !

le nombre de jours du premier mois (quelque soit celui ci) n'est pas bon....

mystère d'excel ...



--
Cordialement,

Jacques.

Avatar
docm
Sub nombrejours()
d1 = CDate([a2])
d2 = CDate([b2])
colonne = 2
While DateSerial(Year(d1), Month(d1) + 1, 0) < d2
a = DateSerial(Year(d1), Month(d1) + 1, 0)
colonne = colonne + 1
Cells(1, colonne) = a - d1 + 1
d1 = a + 1
Wend
colonne = colonne + 1
Cells(1, colonne) = d2 - a
End Sub

"Philippe de PARIS" a écrit dans le message
news:
Bonjour,

en
a1 = 01/02/2006
b1 /06/2006

Comment répartir automatiquement le nb de jours par mois entre ces 2 dates
et avoir en

c1 = nb jours de janvier entre ces 2 dates
d1 = nb de jours de février entre ces 2 dates

etc jusqu'à
n1 = nb de jours de décembre entre ces 2 dates.

Les dates en A1 et B1 étant susceptible de varier pour couvrir tout ou
partie de l'année...

merci de votre aide !

Philippe




Avatar
Jacques93
Bonsoir Philippe de PARIS,

Pas les yeux en face des trous 8-)
Pour le 1er mois, je comptais les jours entre le 1 et la date de début
au lieu de compter entre la date et la fin du mois. Honte sur moi ...

Public Sub CompteJours()
Dim mDeb As Integer, mFin As Integer, mois As Integer

mDeb = Month(Range("A1"))
mFin = Month(Range("B1"))
For mois = 1 To 12
If mois < mDeb Or mois > mFin Then
Cells(1, 2 + mois) = 0
ElseIf mois = mDeb Then
Cells(1, 2 + mois) = DernierJourDuMois(mois, Year(Range("A1"))) - _
Day(Range("A1")) + 1
ElseIf mois = mFin Then
Cells(1, 2 + mois) = Day(Range("B1"))
Else
Cells(1, 2 + mois) = DernierJourDuMois(mois, Year(Range("A1")))
End If
Next mois
End Sub

Function DernierJourDuMois(m As Integer, y As Integer) As Integer
DernierJourDuMois = Day(DateAdd("d", -1, "01/" & m + 1 & "/" & y))
End Function


Chez moi non !

le nombre de jours du premier mois (quelque soit celui ci) n'est pas bon....

mystère d'excel ...




--
Cordialement,

Jacques.

1 2