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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
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
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)
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
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)
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
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)
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
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$1@speranza.aioe.org...
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)
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
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)
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