je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir
de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa )
En colonne B : heure de début de garde ( hh:mm )
En colonne C : date de fin de garde
En colonne D : heure de fin de garde
En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais
voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de
08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain
- pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit :
En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00
En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00
En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00
etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés ?
Sub test() Application.ScreenUpdating = False rep = InputBox("année à saisir") * 1 'base For i = 1 To (DateSerial(rep, 12, 31) - DateSerial(rep - 1, 12, 31)) Cells(i, 1) = DateSerial(rep, 1, i) Next Cells(1, 2) = "20:" Cells(1, 3) = "8:" Range("b1:C1").AutoFill Range("b1:c" & Cells(65536, 1).End(xlUp).Row) 'traitement samedi et dimanche i = 1 Do Until Cells(i, 1) = "" If Weekday(Cells(i, 1), 2) > 5 Then 'en traitant les fériés pas tester 'If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then Rows(i).Insert Cells(i, 1) = Cells(i + 1, 1) Cells(i, 2) = "8:" Cells(i, 3) = "20:" i = i + 1 End If i = i + 1 Loop End Sub
-- a+ rural thierry Veaux et Broutards d'Anjou Wicasa on kin nape yapi inahni yo (à l'essai)
"David 02" a écrit dans le message de news: bnhgou$a65$
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa ) En colonne B : heure de début de garde ( hh:mm ) En colonne C : date de fin de garde En colonne D : heure de fin de garde En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de 08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain - pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit : En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00 En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00 En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00 etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés ?
Merci de votre aide.
David
Salut
pourrait donner quelque chose comme cela :
Sub test()
Application.ScreenUpdating = False
rep = InputBox("année à saisir") * 1
'base
For i = 1 To (DateSerial(rep, 12, 31) - DateSerial(rep - 1, 12, 31))
Cells(i, 1) = DateSerial(rep, 1, i)
Next
Cells(1, 2) = "20:"
Cells(1, 3) = "8:"
Range("b1:C1").AutoFill Range("b1:c" & Cells(65536, 1).End(xlUp).Row)
'traitement samedi et dimanche
i = 1
Do Until Cells(i, 1) = ""
If Weekday(Cells(i, 1), 2) > 5 Then
'en traitant les fériés pas tester
'If Weekday(Cells(i, 1), 2) > 5 or
application.countif(cells(i,1),[feriés])=1 then
Rows(i).Insert
Cells(i, 1) = Cells(i + 1, 1)
Cells(i, 2) = "8:"
Cells(i, 3) = "20:"
i = i + 1
End If
i = i + 1
Loop
End Sub
--
a+
rural thierry
Veaux et Broutards d'Anjou
Wicasa on kin nape yapi inahni yo (à l'essai)
"David 02" <direction-ternoise@wanadoo.fr> a écrit dans le message de news:
bnhgou$a65$1@news-reader3.wanadoo.fr...
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir
de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa )
En colonne B : heure de début de garde ( hh:mm )
En colonne C : date de fin de garde
En colonne D : heure de fin de garde
En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais
voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de
08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain
- pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit :
En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00
En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00
En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00
etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés
?
Sub test() Application.ScreenUpdating = False rep = InputBox("année à saisir") * 1 'base For i = 1 To (DateSerial(rep, 12, 31) - DateSerial(rep - 1, 12, 31)) Cells(i, 1) = DateSerial(rep, 1, i) Next Cells(1, 2) = "20:" Cells(1, 3) = "8:" Range("b1:C1").AutoFill Range("b1:c" & Cells(65536, 1).End(xlUp).Row) 'traitement samedi et dimanche i = 1 Do Until Cells(i, 1) = "" If Weekday(Cells(i, 1), 2) > 5 Then 'en traitant les fériés pas tester 'If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then Rows(i).Insert Cells(i, 1) = Cells(i + 1, 1) Cells(i, 2) = "8:" Cells(i, 3) = "20:" i = i + 1 End If i = i + 1 Loop End Sub
-- a+ rural thierry Veaux et Broutards d'Anjou Wicasa on kin nape yapi inahni yo (à l'essai)
"David 02" a écrit dans le message de news: bnhgou$a65$
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa ) En colonne B : heure de début de garde ( hh:mm ) En colonne C : date de fin de garde En colonne D : heure de fin de garde En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de 08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain - pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit : En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00 En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00 En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00 etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés ?
Merci de votre aide.
David
AV
A tester dans un classeur vierge puis adapter à ton usage (Noms de feuille, plage de départ....) Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes() varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date)) If varAn = "" Then Exit Sub Application.ScreenUpdating = False
'création feuille et plage jours féries On Error Resume Next Application.DisplayAlerts = False Sheets("Fériés").Delete Application.DisplayAlerts = True Sheets.Add.Name = "Fériés" '1° janvier [A1] = Evaluate("date(" & varAn & ",1,1)") 'Lundi de Pâques [A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn & ",19),30))/7,)*7-5") '1° Mai [A3] = Evaluate("date(" & varAn & ",5,1)") '8 Mai [A4] = Evaluate("date(" & varAn & ",5,8)") 'Jeudi de l'Ascension [A5] = [A2] + 38 'Lundi de Pentecôte [A6] = [A2] + 49 '14 Juillet [A7] = Evaluate("date(" & varAn & ",7,14)") '15 Aôut [A8] = Evaluate("date(" & varAn & ",8,15)") '1° Novembre [A9] = Evaluate("date(" & varAn & ",11,1)") '11 Novembre [A10] = Evaluate("date(" & varAn & ",11,11)") 'Noël [A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs" ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An Sheets("Feuil1").Select [A:E] = "" With [A1] .Value = DateSerial(varAn, 1, 1) .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse End With
'Ecrit Jours et heures de gardes For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1 Step -1 Dim x1 As Range Set x1 = Cells(z, 1) x2 = x1.Value testJFrs = IsError(Application.Match(x1, [JFrs], 0)) If Weekday(x1, 2) < 6 And testJFrs <> 0 Then x1.Offset(0, 1) = 20 / 24 x1.Offset(0, 2) = x2 + 1 x1.Offset(0, 3) = 8 / 24 ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then x1.Offset(0, 1) = 8 / 24 x1.Offset(0, 2) = x2 x1.Offset(0, 3) = 20 / 24 x1.Offset(1, 0).Range("A1:E1").Insert 'x1.Offset(1, 0) = x2 'Optionnel x1.Offset(1, 1) = 20 / 24 x1.Offset(1, 2) = x2 + 1 x1.Offset(1, 3) = 8 / 24 End If Next End Sub
AV
A tester dans un classeur vierge puis adapter à ton usage (Noms de feuille,
plage de départ....)
Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes()
varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date))
If varAn = "" Then Exit Sub
Application.ScreenUpdating = False
'création feuille et plage jours féries
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Fériés").Delete
Application.DisplayAlerts = True
Sheets.Add.Name = "Fériés"
'1° janvier
[A1] = Evaluate("date(" & varAn & ",1,1)")
'Lundi de Pâques
[A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn &
",19),30))/7,)*7-5")
'1° Mai
[A3] = Evaluate("date(" & varAn & ",5,1)")
'8 Mai
[A4] = Evaluate("date(" & varAn & ",5,8)")
'Jeudi de l'Ascension
[A5] = [A2] + 38
'Lundi de Pentecôte
[A6] = [A2] + 49
'14 Juillet
[A7] = Evaluate("date(" & varAn & ",7,14)")
'15 Aôut
[A8] = Evaluate("date(" & varAn & ",8,15)")
'1° Novembre
[A9] = Evaluate("date(" & varAn & ",11,1)")
'11 Novembre
[A10] = Evaluate("date(" & varAn & ",11,11)")
'Noël
[A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs"
ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An
Sheets("Feuil1").Select
[A:E] = ""
With [A1]
.Value = DateSerial(varAn, 1, 1)
.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse
End With
'Ecrit Jours et heures de gardes
For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1 Step -1
Dim x1 As Range
Set x1 = Cells(z, 1)
x2 = x1.Value
testJFrs = IsError(Application.Match(x1, [JFrs], 0))
If Weekday(x1, 2) < 6 And testJFrs <> 0 Then
x1.Offset(0, 1) = 20 / 24
x1.Offset(0, 2) = x2 + 1
x1.Offset(0, 3) = 8 / 24
ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then
x1.Offset(0, 1) = 8 / 24
x1.Offset(0, 2) = x2
x1.Offset(0, 3) = 20 / 24
x1.Offset(1, 0).Range("A1:E1").Insert
'x1.Offset(1, 0) = x2 'Optionnel
x1.Offset(1, 1) = 20 / 24
x1.Offset(1, 2) = x2 + 1
x1.Offset(1, 3) = 8 / 24
End If
Next
End Sub
A tester dans un classeur vierge puis adapter à ton usage (Noms de feuille, plage de départ....) Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes() varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date)) If varAn = "" Then Exit Sub Application.ScreenUpdating = False
'création feuille et plage jours féries On Error Resume Next Application.DisplayAlerts = False Sheets("Fériés").Delete Application.DisplayAlerts = True Sheets.Add.Name = "Fériés" '1° janvier [A1] = Evaluate("date(" & varAn & ",1,1)") 'Lundi de Pâques [A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn & ",19),30))/7,)*7-5") '1° Mai [A3] = Evaluate("date(" & varAn & ",5,1)") '8 Mai [A4] = Evaluate("date(" & varAn & ",5,8)") 'Jeudi de l'Ascension [A5] = [A2] + 38 'Lundi de Pentecôte [A6] = [A2] + 49 '14 Juillet [A7] = Evaluate("date(" & varAn & ",7,14)") '15 Aôut [A8] = Evaluate("date(" & varAn & ",8,15)") '1° Novembre [A9] = Evaluate("date(" & varAn & ",11,1)") '11 Novembre [A10] = Evaluate("date(" & varAn & ",11,11)") 'Noël [A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs" ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An Sheets("Feuil1").Select [A:E] = "" With [A1] .Value = DateSerial(varAn, 1, 1) .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse End With
'Ecrit Jours et heures de gardes For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1 Step -1 Dim x1 As Range Set x1 = Cells(z, 1) x2 = x1.Value testJFrs = IsError(Application.Match(x1, [JFrs], 0)) If Weekday(x1, 2) < 6 And testJFrs <> 0 Then x1.Offset(0, 1) = 20 / 24 x1.Offset(0, 2) = x2 + 1 x1.Offset(0, 3) = 8 / 24 ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then x1.Offset(0, 1) = 8 / 24 x1.Offset(0, 2) = x2 x1.Offset(0, 3) = 20 / 24 x1.Offset(1, 0).Range("A1:E1").Insert 'x1.Offset(1, 0) = x2 'Optionnel x1.Offset(1, 1) = 20 / 24 x1.Offset(1, 2) = x2 + 1 x1.Offset(1, 3) = 8 / 24 End If Next End Sub
AV
David 02
merci à tous les deux, je vais tester les deux solutions
"David 02" a écrit dans le message de news:bnhgou$a65$
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa ) En colonne B : heure de début de garde ( hh:mm ) En colonne C : date de fin de garde En colonne D : heure de fin de garde En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de 08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain - pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit : En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00 En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00 En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00 etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés ?
Merci de votre aide.
David
merci à tous les deux, je vais tester les deux solutions
"David 02" <direction-ternoise@wanadoo.fr> a écrit dans le message de
news:bnhgou$a65$1@news-reader3.wanadoo.fr...
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir
de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa )
En colonne B : heure de début de garde ( hh:mm )
En colonne C : date de fin de garde
En colonne D : heure de fin de garde
En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais
voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de
08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain
- pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit :
En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00
En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00
En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00
etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés
?
merci à tous les deux, je vais tester les deux solutions
"David 02" a écrit dans le message de news:bnhgou$a65$
Bonsoir à tous
je cherche à créer un tableau de garde du 01/01/2004 au31/12/2004 à partir de A2 de ce style :
En colonne A : date de début de garde ( jj/mm/aa ) En colonne B : heure de début de garde ( hh:mm ) En colonne C : date de fin de garde En colonne D : heure de fin de garde En colonne E : un nom
Je pourais faire une recopie incrémentée (pour les dates) vers le bas mais voila le problème
- pour les samedis, dimanches et jours fériés, il y a 2 gardes : une de 08h00 à 20h00 le meme jour, et, une de 20h00 à 08h00 le lendemain - pour les jours en semaine 1 garde de 20h00 à 08h00 le lendemain
soit : En A2 : 01/01/2004, en B2 : 08:00, en C2 : 01/01/2004, en D2 : 20:00 En A3 : 01/01/2004, en B3 : 20:00, en C3 : 02/01/2004, en D3 : 08:00 En A4 : 02/01/2004, en B4 : 20:00, en C4 : 03/01/2004, en D4 : 08:00 etc...
Comment créer ceci via une macro ou formule sans oublier les jours fériés ?
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et d'un dimanche la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
y a t'il une petite modif possible ?
merci de ton aide
david
merci alain
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et
d'un dimanche
la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et d'un dimanche la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
y a t'il une petite modif possible ?
merci de ton aide
david
guy
Hello AV et TOUS, Je suis tojours en admiration devant toutes vos réponses et CONNAISSANCES. Une chose m'intrigue depuis toujours : est-t-il possible de copier, où l'on veut, cette très longue formule sans devoir l'écrire. J'aimerais, svp, si quelqu'un à la patience et le temps, une réponse très simple car je suis un vieil apprenti. Un tout grand merci. Guy AV" a écrit dans le message de news:
A tester dans un classeur vierge puis adapter à ton usage (Noms de feuille,
plage de départ....) Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes() varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date)) If varAn = "" Then Exit Sub Application.ScreenUpdating = False
'création feuille et plage jours féries On Error Resume Next Application.DisplayAlerts = False Sheets("Fériés").Delete Application.DisplayAlerts = True Sheets.Add.Name = "Fériés" '1° janvier [A1] = Evaluate("date(" & varAn & ",1,1)") 'Lundi de Pâques [A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn & ",19),30))/7,)*7-5") '1° Mai [A3] = Evaluate("date(" & varAn & ",5,1)") '8 Mai [A4] = Evaluate("date(" & varAn & ",5,8)") 'Jeudi de l'Ascension [A5] = [A2] + 38 'Lundi de Pentecôte [A6] = [A2] + 49 '14 Juillet [A7] = Evaluate("date(" & varAn & ",7,14)") '15 Aôut [A8] = Evaluate("date(" & varAn & ",8,15)") '1° Novembre [A9] = Evaluate("date(" & varAn & ",11,1)") '11 Novembre [A10] = Evaluate("date(" & varAn & ",11,11)") 'Noël [A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs" ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An Sheets("Feuil1").Select [A:E] = "" With [A1] .Value = DateSerial(varAn, 1, 1) .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse End With
'Ecrit Jours et heures de gardes For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1 Step -1
Dim x1 As Range Set x1 = Cells(z, 1) x2 = x1.Value testJFrs = IsError(Application.Match(x1, [JFrs], 0)) If Weekday(x1, 2) < 6 And testJFrs <> 0 Then x1.Offset(0, 1) = 20 / 24 x1.Offset(0, 2) = x2 + 1 x1.Offset(0, 3) = 8 / 24 ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then x1.Offset(0, 1) = 8 / 24 x1.Offset(0, 2) = x2 x1.Offset(0, 3) = 20 / 24 x1.Offset(1, 0).Range("A1:E1").Insert 'x1.Offset(1, 0) = x2 'Optionnel x1.Offset(1, 1) = 20 / 24 x1.Offset(1, 2) = x2 + 1 x1.Offset(1, 3) = 8 / 24 End If Next End Sub
AV
Hello AV et TOUS,
Je suis tojours en admiration devant toutes vos réponses et CONNAISSANCES.
Une chose m'intrigue depuis toujours : est-t-il possible de copier, où l'on
veut, cette très longue formule sans devoir l'écrire.
J'aimerais, svp, si quelqu'un à la patience et le temps, une réponse très
simple car je suis un vieil apprenti.
Un tout grand merci.
Guy
AV" <alain.vallon@wanadoo.fr> a écrit dans le message de
news:ume1VPGnDHA.372@TK2MSFTNGP11.phx.gbl...
A tester dans un classeur vierge puis adapter à ton usage (Noms de
feuille,
plage de départ....)
Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes()
varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date))
If varAn = "" Then Exit Sub
Application.ScreenUpdating = False
'création feuille et plage jours féries
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Fériés").Delete
Application.DisplayAlerts = True
Sheets.Add.Name = "Fériés"
'1° janvier
[A1] = Evaluate("date(" & varAn & ",1,1)")
'Lundi de Pâques
[A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn &
",19),30))/7,)*7-5")
'1° Mai
[A3] = Evaluate("date(" & varAn & ",5,1)")
'8 Mai
[A4] = Evaluate("date(" & varAn & ",5,8)")
'Jeudi de l'Ascension
[A5] = [A2] + 38
'Lundi de Pentecôte
[A6] = [A2] + 49
'14 Juillet
[A7] = Evaluate("date(" & varAn & ",7,14)")
'15 Aôut
[A8] = Evaluate("date(" & varAn & ",8,15)")
'1° Novembre
[A9] = Evaluate("date(" & varAn & ",11,1)")
'11 Novembre
[A10] = Evaluate("date(" & varAn & ",11,11)")
'Noël
[A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs"
ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An
Sheets("Feuil1").Select
[A:E] = ""
With [A1]
.Value = DateSerial(varAn, 1, 1)
.DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse
End With
'Ecrit Jours et heures de gardes
For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1
Step -1
Dim x1 As Range
Set x1 = Cells(z, 1)
x2 = x1.Value
testJFrs = IsError(Application.Match(x1, [JFrs], 0))
If Weekday(x1, 2) < 6 And testJFrs <> 0 Then
x1.Offset(0, 1) = 20 / 24
x1.Offset(0, 2) = x2 + 1
x1.Offset(0, 3) = 8 / 24
ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then
x1.Offset(0, 1) = 8 / 24
x1.Offset(0, 2) = x2
x1.Offset(0, 3) = 20 / 24
x1.Offset(1, 0).Range("A1:E1").Insert
'x1.Offset(1, 0) = x2 'Optionnel
x1.Offset(1, 1) = 20 / 24
x1.Offset(1, 2) = x2 + 1
x1.Offset(1, 3) = 8 / 24
End If
Next
End Sub
Hello AV et TOUS, Je suis tojours en admiration devant toutes vos réponses et CONNAISSANCES. Une chose m'intrigue depuis toujours : est-t-il possible de copier, où l'on veut, cette très longue formule sans devoir l'écrire. J'aimerais, svp, si quelqu'un à la patience et le temps, une réponse très simple car je suis un vieil apprenti. Un tout grand merci. Guy AV" a écrit dans le message de news:
A tester dans un classeur vierge puis adapter à ton usage (Noms de feuille,
plage de départ....) Pour le test, le classeur doit contenir une feuille nommée "Feuil1"
Sub Gardes() varAn = InputBox("Saisir un millésime", "Calendrier Gardes", Year(Date)) If varAn = "" Then Exit Sub Application.ScreenUpdating = False
'création feuille et plage jours féries On Error Resume Next Application.DisplayAlerts = False Sheets("Fériés").Delete Application.DisplayAlerts = True Sheets.Add.Name = "Fériés" '1° janvier [A1] = Evaluate("date(" & varAn & ",1,1)") 'Lundi de Pâques [A2] = Evaluate("ROUND(DATE(" & varAn & ",4,MOD(234-11*MOD(" & varAn & ",19),30))/7,)*7-5") '1° Mai [A3] = Evaluate("date(" & varAn & ",5,1)") '8 Mai [A4] = Evaluate("date(" & varAn & ",5,8)") 'Jeudi de l'Ascension [A5] = [A2] + 38 'Lundi de Pentecôte [A6] = [A2] + 49 '14 Juillet [A7] = Evaluate("date(" & varAn & ",7,14)") '15 Aôut [A8] = Evaluate("date(" & varAn & ",8,15)") '1° Novembre [A9] = Evaluate("date(" & varAn & ",11,1)") '11 Novembre [A10] = Evaluate("date(" & varAn & ",11,11)") 'Noël [A11] = Evaluate("date(" & varAn & ",12,25)")
'définit le nom "JFrs" ActiveWorkbook.Names.Add Name:="JFrs", RefersTo:="=Fériés!$A$1:$A$11"
'écrit série jours An Sheets("Feuil1").Select [A:E] = "" With [A1] .Value = DateSerial(varAn, 1, 1) .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _ xlDay, Step:=1, Stop:ÚteSerial(varAn, 12, 31), Trend:úlse End With
'Ecrit Jours et heures de gardes For z = DateSerial(varAn, 12, 31) - DateSerial(varAn, 1, 1) + 1 To 1 Step -1
Dim x1 As Range Set x1 = Cells(z, 1) x2 = x1.Value testJFrs = IsError(Application.Match(x1, [JFrs], 0)) If Weekday(x1, 2) < 6 And testJFrs <> 0 Then x1.Offset(0, 1) = 20 / 24 x1.Offset(0, 2) = x2 + 1 x1.Offset(0, 3) = 8 / 24 ElseIf Weekday(x1, 2) > 5 Or testJFrs = 0 Then x1.Offset(0, 1) = 8 / 24 x1.Offset(0, 2) = x2 x1.Offset(0, 3) = 20 / 24 x1.Offset(1, 0).Range("A1:E1").Insert 'x1.Offset(1, 0) = x2 'Optionnel x1.Offset(1, 1) = 20 / 24 x1.Offset(1, 2) = x2 + 1 x1.Offset(1, 3) = 8 / 24 End If Next End Sub
AV
AV
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et d'un dimanche la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
Ca c'est au choix ! Il y a une ligne précédée d'une apostrophe (à enlever) pour que ça le fasse 'x1.Offset(1, 0) = x2 'Optionnel
Il me semblait que c'était plus lisible ainsi mais tu choisis..
AV
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et
d'un dimanche
la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
Ca c'est au choix !
Il y a une ligne précédée d'une apostrophe (à enlever) pour que ça le fasse
'x1.Offset(1, 0) = x2 'Optionnel
Il me semblait que c'était plus lisible ainsi mais tu choisis..
cela me va parfaitement mais toutefois lors d'un jour férié, d'un samedi et d'un dimanche la ligne se crée bien mais la date de début de garde ne s'inscrit pas.
Ca c'est au choix ! Il y a une ligne précédée d'une apostrophe (à enlever) pour que ça le fasse 'x1.Offset(1, 0) = x2 'Optionnel
Il me semblait que c'était plus lisible ainsi mais tu choisis..
AV
AV
Dans un classeur vierge, tu fais alt+F11 > insertion > module > copier/coller le code puis l'exécuter à partir de Outils> Macro > Macros > sélectionner le nom (Gardes) puis Exécuter Attention, à partir du forum, figure un retour à la ligne à supprimer aprés : ......*MOD(" & varAn & La ligne commence à [A2] = Evaluate... et se finit à ......",19),30))/7,)*7-5")
AV
Dans un classeur vierge, tu fais alt+F11 > insertion > module > copier/coller le
code puis l'exécuter à partir de Outils> Macro > Macros > sélectionner le nom
(Gardes) puis Exécuter
Attention, à partir du forum, figure un retour à la ligne à supprimer aprés :
......*MOD(" & varAn &
La ligne commence à
[A2] = Evaluate...
et se finit à ......",19),30))/7,)*7-5")
Dans un classeur vierge, tu fais alt+F11 > insertion > module > copier/coller le code puis l'exécuter à partir de Outils> Macro > Macros > sélectionner le nom (Gardes) puis Exécuter Attention, à partir du forum, figure un retour à la ligne à supprimer aprés : ......*MOD(" & varAn & La ligne commence à [A2] = Evaluate... et se finit à ......",19),30))/7,)*7-5")
AV
ru-th
Normal, saut intempestif de lignes
If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage nommée fériés dans ton classeur avec les jours fériées concernés si c'est le cas l'apostrophe doit être viré et la ligne du dessus supprimée
a+ rural thierry
"David 02" a écrit dans le message de news: bnilel$q5o$
merci de ta réponse
mais cela bloque à cette endroit :
application.countif(cells(i,1),[feriés])=1 then
erreur de compilation, erreur de synthaxe
salutations
David
Normal, saut intempestif de lignes
If Weekday(Cells(i, 1), 2) > 5 or
application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage
nommée fériés dans ton classeur avec les jours fériées concernés
si c'est le cas l'apostrophe doit être viré et la ligne du dessus supprimée
a+
rural thierry
"David 02" <direction-ternoise@wanadoo.fr> a écrit dans le message de news:
bnilel$q5o$1@news-reader2.wanadoo.fr...
If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage nommée fériés dans ton classeur avec les jours fériées concernés si c'est le cas l'apostrophe doit être viré et la ligne du dessus supprimée
a+ rural thierry
"David 02" a écrit dans le message de news: bnilel$q5o$
merci de ta réponse
mais cela bloque à cette endroit :
application.countif(cells(i,1),[feriés])=1 then
erreur de compilation, erreur de synthaxe
salutations
David
David 02
merci d'avoir penser pour moi !!! je retient la solution de alain, car elle permet de gérer les J.F. merci encore salutations.
"ru-th" a écrit dans le message de news:
Normal, saut intempestif de lignes
If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage nommée fériés dans ton classeur avec les jours fériées concernés si c'est le cas l'apostrophe doit être viré et la ligne du dessus supprimée
a+ rural thierry
"David 02" a écrit dans le message de news:
bnilel$q5o$
merci de ta réponse
mais cela bloque à cette endroit :
application.countif(cells(i,1),[feriés])=1 then
erreur de compilation, erreur de synthaxe
salutations
David
merci d'avoir penser pour moi !!!
je retient la solution de alain, car elle permet de gérer les J.F.
merci encore
salutations.
"ru-th" <ailleurs@nowhere> a écrit dans le message de
news:OS4yhiGnDHA.2772@TK2MSFTNGP12.phx.gbl...
Normal, saut intempestif de lignes
If Weekday(Cells(i, 1), 2) > 5 or
application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage
nommée fériés dans ton classeur avec les jours fériées concernés
si c'est le cas l'apostrophe doit être viré et la ligne du dessus
supprimée
a+
rural thierry
"David 02" <direction-ternoise@wanadoo.fr> a écrit dans le message de
news:
merci d'avoir penser pour moi !!! je retient la solution de alain, car elle permet de gérer les J.F. merci encore salutations.
"ru-th" a écrit dans le message de news:
Normal, saut intempestif de lignes
If Weekday(Cells(i, 1), 2) > 5 or application.countif(cells(i,1),[feriés])=1 then
doivent être sur un seul ligne, j'ai présupposé que tu avais une plage nommée fériés dans ton classeur avec les jours fériées concernés si c'est le cas l'apostrophe doit être viré et la ligne du dessus supprimée