Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombre de jours par mois entre 2 dates

2 réponses
Avatar
Thierry
Bonjour,
Grosse prise de tête au boulot et je n'arrive pas à m'en sortir...
Dans un fichier Excel de +sieurs centaines de lignes, il y a une colonne
avec une date de début de congé et une autre avec une date de fin de congé.
par exemple :
03/11/2010 18/02/2011

Il faut que je trouve, pour chaque ligne, le nombre de jours de congés par
mois
c'est à dire dans l'exemple ci-dessus :
27 en novembre
31 en décembre
31 en janvier
18 en février

Quelqu'un aurait-il déjà rencontré ( et solutionné ) ce problème ?
Merci d'avance
Thierry

2 réponses

Avatar
Charabeuh
Bonjour,

Une piste avec une macro en VBA:

1) sélectionner les cellules contenant la date de début de congé.
ex: de A2 à A100

2) sélectionner n'importe quelle cellule de la colonne des dates de fin
de congé
ex: B1 - si les date de fin sont en colonne B

3) sélectionner n'importe quelle cellule de la colonne à partir de
laquelle les résultats seront écrits.
ex: D1 - les cellules à gauche de la colonne D devront être vides car
leurs valeurs seront écrasées.

Code de la macro:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Nbjour()
Dim rgDeb As Range, rgFin As Range, rgDest As Range
Dim ColDeb As Integer, ColFin As Integer, ColDest As Integer
Dim xCell As Range, LigTop As Long
Dim I As Integer, K As Integer, ColCour As Integer
Dim DateFinMois As Long, Nbjour As Long, DateDebut As Long

Set rgDeb = Application.InputBox( _
prompt:="Sélectionner la zone des dates de début de congé", _
Type:=8)
Set rgDeb = rgDeb.Columns(1)
Set rgFin = Application.InputBox( _
prompt:="Sélectionner une cellule de la colonne " & _
"des dates de fin de congé", _
Type:=8)
Set rgFin = rgDeb.Offset(0, rgFin.Column - rgDeb.Column)
Set rgDest = Application.InputBox( _
prompt:="Sélectionner une cellule de la colonne " & _
"début des résultats", _
Type:=8)

ColDeb = rgDeb.Column
ColFin = rgFin.Column
ColDest = rgDest.Column
LigTop = rgDeb.Row - 1

For K = 1 To rgDeb.Rows.Count
DateDebut = rgDeb.Cells(K, 1).Value
ColCour = ColDest

For I = 0 To 24
DateFinMois = DateSerial(Year(DateDebut), _
Month(DateDebut) + 1, 1) - 1
If DateFinMois >= rgFin.Cells(K, 1) Then _
DateFinMois = rgFin.Cells(K, 1)
Nbjour = DateFinMois - DateDebut + 1
Cells(LigTop + K, ColCour) = _
Format(DateFinMois, "mmm yyyy") & " : "
Cells(LigTop + K, ColCour).HorizontalAlignment = xlRight
ColCour = ColCour + 1
Cells(LigTop + K, ColCour) = Nbjour
Cells(LigTop + K, ColCour).NumberFormat = "0"
Cells(LigTop + K, ColCour).HorizontalAlignment = xlLeft
ColCour = ColCour + 1
DateDebut = DateFinMois + 1
If DateFinMois = rgFin.Cells(K, 1) Then Exit For
Next I
Next K

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
limité à 24 mois de congé !





Thierry a émis l'idée suivante :
Bonjour,
Grosse prise de tête au boulot et je n'arrive pas à m'en sortir...
Dans un fichier Excel de +sieurs centaines de lignes, il y a une colonne avec
une date de début de congé et une autre avec une date de fin de congé.
par exemple :
03/11/2010 18/02/2011

Il faut que je trouve, pour chaque ligne, le nombre de jours de congés par
mois
c'est à dire dans l'exemple ci-dessus :
27 en novembre
31 en décembre
31 en janvier
18 en février

Quelqu'un aurait-il déjà rencontré ( et solutionné ) ce problème ?
Merci d'avance
Thierry
Avatar
Thierry
Bonjour Charabeuh,
Impeccable, c'est exactement ce que je voulais.
Merci beaucoup de votre aide et bonne journée.
Thierry

"Charabeuh" a écrit dans le message de groupe de discussion :
iqchql$eo4$

Bonjour,

Une piste avec une macro en VBA:

1) sélectionner les cellules contenant la date de début de congé.
ex: de A2 à A100

2) sélectionner n'importe quelle cellule de la colonne des dates de fin
de congé
ex: B1 - si les date de fin sont en colonne B

3) sélectionner n'importe quelle cellule de la colonne à partir de
laquelle les résultats seront écrits.
ex: D1 - les cellules à gauche de la colonne D devront être vides car
leurs valeurs seront écrasées.

Code de la macro:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Nbjour()
Dim rgDeb As Range, rgFin As Range, rgDest As Range
Dim ColDeb As Integer, ColFin As Integer, ColDest As Integer
Dim xCell As Range, LigTop As Long
Dim I As Integer, K As Integer, ColCour As Integer
Dim DateFinMois As Long, Nbjour As Long, DateDebut As Long

Set rgDeb = Application.InputBox( _
prompt:="Sélectionner la zone des dates de début de congé", _
Type:=8)
Set rgDeb = rgDeb.Columns(1)
Set rgFin = Application.InputBox( _
prompt:="Sélectionner une cellule de la colonne " & _
"des dates de fin de congé", _
Type:=8)
Set rgFin = rgDeb.Offset(0, rgFin.Column - rgDeb.Column)
Set rgDest = Application.InputBox( _
prompt:="Sélectionner une cellule de la colonne " & _
"début des résultats", _
Type:=8)

ColDeb = rgDeb.Column
ColFin = rgFin.Column
ColDest = rgDest.Column
LigTop = rgDeb.Row - 1

For K = 1 To rgDeb.Rows.Count
DateDebut = rgDeb.Cells(K, 1).Value
ColCour = ColDest

For I = 0 To 24
DateFinMois = DateSerial(Year(DateDebut), _
Month(DateDebut) + 1, 1) - 1
If DateFinMois >= rgFin.Cells(K, 1) Then _
DateFinMois = rgFin.Cells(K, 1)
Nbjour = DateFinMois - DateDebut + 1
Cells(LigTop + K, ColCour) = _
Format(DateFinMois, "mmm yyyy") & " : "
Cells(LigTop + K, ColCour).HorizontalAlignment = xlRight
ColCour = ColCour + 1
Cells(LigTop + K, ColCour) = Nbjour
Cells(LigTop + K, ColCour).NumberFormat = "0"
Cells(LigTop + K, ColCour).HorizontalAlignment = xlLeft
ColCour = ColCour + 1
DateDebut = DateFinMois + 1
If DateFinMois = rgFin.Cells(K, 1) Then Exit For
Next I
Next K

End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
limité à 24 mois de congé !





Thierry a émis l'idée suivante :
Bonjour,
Grosse prise de tête au boulot et je n'arrive pas à m'en sortir...
Dans un fichier Excel de +sieurs centaines de lignes, il y a une colonne
avec une date de début de congé et une autre avec une date de fin de
congé.
par exemple :
03/11/2010 18/02/2011

Il faut que je trouve, pour chaque ligne, le nombre de jours de congés par
mois
c'est à dire dans l'exemple ci-dessus :
27 en novembre
31 en décembre
31 en janvier
18 en février

Quelqu'un aurait-il déjà rencontré ( et solutionné ) ce problème ?
Merci d'avance
Thierry