Réalisation d'un planning d'occupation
Fermé
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
-
10 juil. 2013 à 10:11
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 juil. 2013 à 15:43
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 juil. 2013 à 15:43
A voir également:
- Planning d'occupation des chambres
- Planning equipe - Télécharger - Outils professionnels
- Planning en 12h exemple - Télécharger - Outils professionnels
- Planning partagé google - Guide
- Télécharger chronos planning - Télécharger - Vie quotidienne
- Planning 12h 1 weekend sur 3 - Forum Bureautique
6 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
10 juil. 2013 à 14:10
10 juil. 2013 à 14:10
Bonjour,
Regarde cet Exemple de Michel_m et dis moi si c'est un bon début pour toi???
Regarde cet Exemple de Michel_m et dis moi si c'est un bon début pour toi???
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
10 juil. 2013 à 14:29
10 juil. 2013 à 14:29
Bonjour pijaku,
Tout d'abord, merci de ta réponse.
J'ai finalement réussi mon calendrier. En mettant dans chaque case du jour sa date, dans le case du 01/07/13 tu écris 01/07/13 en blanc à l'intérieur. Tu créés une boucle sur ton calendrier qui compare ta date au date en blanc.
Si les dates sont similaires la cellule se met en rouge.
Autre problème...
Nous travaillons du lundi au vendredi ( jours ouvrés). Or mon fonctionnement en fréquence d'intervention pose problème.
Le fonctionnement est :
On rentre la date de dernière intervention . On connait la fréquence d'intervention ( ex : tout les 3 jours). On connait donc la date de prochaine intervention ( date de dernière + fréquence)
Ce calcul tout bète me fait parfois tomber des samedis ou des dimanches, ou des jours fériés. Chose que j'aimerais éviter.
Si tu as des idées...
Merci,
DGVDR
Tout d'abord, merci de ta réponse.
J'ai finalement réussi mon calendrier. En mettant dans chaque case du jour sa date, dans le case du 01/07/13 tu écris 01/07/13 en blanc à l'intérieur. Tu créés une boucle sur ton calendrier qui compare ta date au date en blanc.
Si les dates sont similaires la cellule se met en rouge.
Autre problème...
Nous travaillons du lundi au vendredi ( jours ouvrés). Or mon fonctionnement en fréquence d'intervention pose problème.
Le fonctionnement est :
On rentre la date de dernière intervention . On connait la fréquence d'intervention ( ex : tout les 3 jours). On connait donc la date de prochaine intervention ( date de dernière + fréquence)
Ce calcul tout bète me fait parfois tomber des samedis ou des dimanches, ou des jours fériés. Chose que j'aimerais éviter.
Si tu as des idées...
Merci,
DGVDR
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 10/07/2013 à 15:31
Modifié par pijaku le 10/07/2013 à 15:31
Exemple d'une procédure VBA qui ajoute 2 jours à une date si c'est un samedi et un jour si cette date tombe un dimanche et qui envoie un message si jour férié (à toi de voir le traitement nécessaire pour chaque cas de férié...) :
Sources jour fériés : mdf
Sources jour fériés : mdf
Option Explicit Sub test() Dim NumeroJour As Integer Dim maDate As Variant Dim Feries(), i As Byte, FlagFerie As Boolean FlagFerie = False maDate = CDate("13/07/2013") NumeroJour = Weekday(maDate, vbMonday) If NumeroJour = 6 Then maDate = maDate + 2 If NumeroJour = 7 Then maDate = maDate + 1 Feries = ListeJoursFeries(Year(maDate)) For i = 1 To 13 If maDate = Feries(i, 1) Then FlagFerie = True: Exit For Next i If FlagFerie = True Then MsgBox "Attention jour férié : " & Feries(i, 1) End Sub Function ListeJoursFeries(An As Integer) As Variant 'myDearFriend! - www.mdf-xlpages.com '(Tableau des jours fériés français pour l'année An) Dim DF(1 To 13, 1 To 2) As Variant Dim D As Date Dim L As Byte D = DimPaques(An) For L = 1 To 13 DF(L, 1) = Choose(L, _ DateSerial(An, 1, 1), D, D + 1, DateSerial(An, 5, 1), _ DateSerial(An, 5, 8), D + 39, D + 49, D + 50, DateSerial(An, 7, 14), _ DateSerial(An, 8, 15), DateSerial(An, 11, 1), DateSerial(An, 11, 11), _ DateSerial(An, 12, 25)) DF(L, 2) = Choose(L, _ "Jour de l'An", "Dimanche de Pâques", "Lundi de Pâques", _ "Fête du Travail", "Armistice 1945", "Jeudi Ascension", _ "Dimanche de Pentecôte", "Lundi de Pentecôte", "Fête Nationale", _ "Assomption", "Toussaint", "Armistice 1918", _ "Noël") Next L ListeJoursFeries = DF End Function Private Function DimPaques(ByVal An As Integer) As Date 'myDearFriend! - www.mdf-xlpages.com '(Calcul du dimanche de Pâques d'après un algorithme de Thomas O'Beirne) Dim n As Integer, c As Integer, a As Byte, b As Byte n = An - 1900 a = n Mod 19 b = (11 * a + 4 - ((a * 7 + 1) \ 19)) Mod 29 c = 25 - b - ((n - b + 31 + (n \ 4)) Mod 7) DimPaques = DateAdd("d", c, DateSerial(An, 3, 31)) End Function
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
10 juil. 2013 à 15:33
10 juil. 2013 à 15:33
Pijaku,
Excel va être capable de reconnaitre que le 13/07/13 est un samedi, grace à I
Tout comme excel va être capable de trouvé que le 28/07/13 est un dimanche ?
Merci,
DGVDR
Excel va être capable de reconnaitre que le 13/07/13 est un samedi, grace à I
f NumeroJour = 6?
Tout comme excel va être capable de trouvé que le 28/07/13 est un dimanche ?
Merci,
DGVDR
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
10 juil. 2013 à 15:34
10 juil. 2013 à 15:34
Ben oui. Grâce à la fonction WeekDay.
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
10 juil. 2013 à 15:48
10 juil. 2013 à 15:48
Ok, très bien ! Quelques questions...
A quoi sert FlagFerie ?
A quoi sert CDate ?
A quoi sert vbMonday ?
Si j'ai bien compris ta liste de jours fériés est dans la colonne i ?
Dim DF(1 To 13, 1 To 2) As Variant
Je ne comprends pas cette ligne
Sub test() Dim NumeroJour As Integer Dim maDate As Variant Dim Feries(), i As Byte, FlagFerie As Boolean FlagFerie = False
A quoi sert FlagFerie ?
maDate = CDate("13/07/2013")
A quoi sert CDate ?
NumeroJour = Weekday(maDate, vbMonday)
A quoi sert vbMonday ?
If NumeroJour = 6 Then maDate = maDate + 2 If NumeroJour = 7 Then maDate = maDate + 1
Feries = ListeJoursFeries(Year(maDate))
Si j'ai bien compris ta liste de jours fériés est dans la colonne i ?
For i = 1 To 13 If maDate = Feries(i, 1) Then FlagFerie = True: Exit For Next i If FlagFerie = True Then MsgBox "Attention jour férié : " & Feries(i, 1) End Sub Function ListeJoursFeries(An As Integer) As Variant 'myDearFriend! - www.mdf-xlpages.com '(Tableau des jours fériés français pour l'année An)
Dim DF(1 To 13, 1 To 2) As Variant
Je ne comprends pas cette ligne
Dim D As Date Dim L As Byte D = DimPaques(An) For L = 1 To 13 DF(L, 1) = Choose(L, _ DateSerial(An, 1, 1), D, D + 1, DateSerial(An, 5, 1), _ DateSerial(An, 5, 8), D + 39, D + 49, D + 50, DateSerial(An, 7, 14), _ DateSerial(An, 8, 15), DateSerial(An, 11, 1), DateSerial(An, 11, 11), _ DateSerial(An, 12, 25)) DF(L, 2) = Choose(L, _ "Jour de l'An", "Dimanche de Pâques", "Lundi de Pâques", _ "Fête du Travail", "Armistice 1945", "Jeudi Ascension", _ "Dimanche de Pentecôte", "Lundi de Pentecôte", "Fête Nationale", _ "Assomption", "Toussaint", "Armistice 1918", _ "Noël") Next L ListeJoursFeries = DF End Function Private Function DimPaques(ByVal An As Integer) As Date 'myDearFriend! - www.mdf-xlpages.com '(Calcul du dimanche de Pâques d'après un algorithme de Thomas O'Beirne) Dim n As Integer, c As Integer, a As Byte, b As Byte n = An - 1900 a = n Mod 19 b = (11 * a + 4 - ((a * 7 + 1) \ 19)) Mod 29 c = 25 - b - ((n - b + 31 + (n \ 4)) Mod 7) DimPaques = DateAdd("d", c, DateSerial(An, 3, 31)) End Function
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
10 juil. 2013 à 16:16
10 juil. 2013 à 16:16
A quoi sert FlagFerie ?
FlagFerie est une variable déclarée de type Boolean. Donc n'accepte que 2 valeurs : true ou false.
Elle ne sert pas à grand chose ici...
Si tu veux la virer, pas de problème. Suffira de remplacer :
par :
Effectivement je n'aurais pas du procéder comme ça, c'est plus simple sans.
<italA quoi sert CDate ? </ital>
CDate est une fonction VBA transformant une date en une date au format date... Je m'explique : "13/07/2013" est une date mais, dans ce format là, n'est pas au format Date, mais String (chaîne de caractères). Lorsque l'on travaille sur des dates, il convient d'utiliser...des dates. D'où le CDate(machin). Fait ce test pour voir la différence :
A quoi sert vbMonday ?
vbMonday dit à la fonction Weekday que le premier jour de la semaine est lundi...
Si j'ai bien compris ta liste de jours fériés est dans la colonne i ?
Euh non... Là i est un nombre qui me sert à incrémenter une boucle : For i = 1 To 13. Boucle qui parcourt une variable tableau (variable qui comporte plusieurs valeurs). Cette variable tableau a été remplie par la Function ListeJoursFeries.
Dim DF(1 To 13, 1 To 2) As Variant
Je ne comprends pas cette ligne
Si tu n'as jamais rencontré de variable tableau c'est normal. Ici on déclare une variable à 2 dimensions, la 1ère de 12 et la seconde sur 2. Cette variable est donc capable "d'accueillir" 24 valeurs...
Test???
Voilà :
FlagFerie est une variable déclarée de type Boolean. Donc n'accepte que 2 valeurs : true ou false.
Elle ne sert pas à grand chose ici...
Si tu veux la virer, pas de problème. Suffira de remplacer :
For i = 1 To 13 If maDate = Feries(i, 1) Then FlagFerie = True: Exit For Next i If FlagFerie = True Then MsgBox "Attention jour férié : " & Feries(i, 1) End Sub
par :
For i = 1 To 13 If maDate = Feries(i, 1) Then MsgBox "Attention jour férié : " & Feries(i, 1): Exit For Next i End Sub
Effectivement je n'aurais pas du procéder comme ça, c'est plus simple sans.
<italA quoi sert CDate ? </ital>
CDate est une fonction VBA transformant une date en une date au format date... Je m'explique : "13/07/2013" est une date mais, dans ce format là, n'est pas au format Date, mais String (chaîne de caractères). Lorsque l'on travaille sur des dates, il convient d'utiliser...des dates. D'où le CDate(machin). Fait ce test pour voir la différence :
Sub test() Dim maDate As String, monJour As Date maDate = "13/07/2013" On Error GoTo traiterreur maDate = maDate + 1 traiterreur: MsgBox "On ne peux pas ajouter 1 à du texte" monJour = CDate(maDate) + 1 MsgBox "Par contre, on peut ajouter 1 à une date : " & monJour End Sub
A quoi sert vbMonday ?
vbMonday dit à la fonction Weekday que le premier jour de la semaine est lundi...
Si j'ai bien compris ta liste de jours fériés est dans la colonne i ?
Euh non... Là i est un nombre qui me sert à incrémenter une boucle : For i = 1 To 13. Boucle qui parcourt une variable tableau (variable qui comporte plusieurs valeurs). Cette variable tableau a été remplie par la Function ListeJoursFeries.
Dim DF(1 To 13, 1 To 2) As Variant
Je ne comprends pas cette ligne
Si tu n'as jamais rencontré de variable tableau c'est normal. Ici on déclare une variable à 2 dimensions, la 1ère de 12 et la seconde sur 2. Cette variable est donc capable "d'accueillir" 24 valeurs...
Test???
Voilà :
Sub test2() Dim DF(1 To 4, 1 To 2) Dim i As Byte, j As Byte For i = 1 To 4 For j = 1 To 2 DF(i, j) = "Valeur pour i : " & i & " Valeur pour j : " & j Next j Next i For i = 1 To 4 For j = 1 To 2 MsgBox DF(i, j) Next j Next i End Sub
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
11 juil. 2013 à 13:41
11 juil. 2013 à 13:41
Bonjour pijaku,
Je suis en plein travail sur ton code.
J'ai une erreur 13 : Incompatibilité de type.
Quand j'avances pas à pas grace à F8 , ca bloque à :
J'ai essayé de déclarer la variable en Integer , même chose...
Vois tu le problème ?
DGVDR
Je suis en plein travail sur ton code.
J'ai une erreur 13 : Incompatibilité de type.
Quand j'avances pas à pas grace à F8 , ca bloque à :
For L = 1 To 13
J'ai essayé de déclarer la variable en Integer , même chose...
Vois tu le problème ?
DGVDR
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
12 juil. 2013 à 08:13
12 juil. 2013 à 08:13
Bonjour,
L est bien un byte (ou integer, pas de souci)...
Je ne comprends pas ou ça bloque...
Peux tu nous passer ton classeur de test???
L est bien un byte (ou integer, pas de souci)...
Je ne comprends pas ou ça bloque...
Peux tu nous passer ton classeur de test???
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
12 juil. 2013 à 10:28
12 juil. 2013 à 10:28
Bonjour pijaku,
merci de ton aide
https://www.cjoint.com/?0GmkBoIEjgs
Le code concerné est dans la feuille Planning inter.
Bon courage,
DGVDR
merci de ton aide
https://www.cjoint.com/?0GmkBoIEjgs
Le code concerné est dans la feuille Planning inter.
Bon courage,
DGVDR
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
12 juil. 2013 à 10:43
12 juil. 2013 à 10:43
Je n'ai pas d'errur au niveau de cette procédure.
par contre, j'ai bien une erreur 13 au niveau du module ThisWorkBook dans l'événement Workbook_Open :
J'ai donc modifié ton code comme suit :
par contre, j'ai bien une erreur 13 au niveau du module ThisWorkBook dans l'événement Workbook_Open :
J'ai donc modifié ton code comme suit :
Private Sub Workbook_Open() Dim a As Integer ' variable pour commande' Dim b As Integer Dim rep As Integer Dim msg As String ' pour commande grosse pièce' Dim msg0 As String 'pour stock' Dim msg1 As String Dim msg2 As String Dim msg3 As String Dim msgt As String Dim rngTrouve As Range For a = 2 To 20 If Worksheets("Commandes").Range("G" & a) <> "" And Worksheets("Commandes").Range("F" & a) < Worksheets("Préventif").Range("B1") Then msg = Worksheets("Commandes").Range("A" & a) ' pour la pièce' msg1 = Worksheets("Commandes").Range("E" & a) ' pour la société' With Sheets("Contacts") Set rngTrouve = .Columns(1).Cells.Find(msg, Lookat:=xlWhole) If Not rngTrouve Is Nothing Then msg2 = rngTrouve.Offset(0, 4) msg3 = rngTrouve.Offset(0, 5) End If 'msg2 = Application.VLookup(msg, Sheets("Contacts").Range("A2:G36"), 5, True) ' pour l'adresse' 'msg3 = Application.VLookup(msg, Sheets("Contacts").Range("A2:G36"), 6, True) ' pour le tel' End With msgt = msg & " à commander chez " & msg1 & Chr(10) & Chr(10) & " Coordonnées : " & Chr(10) & Chr(10) & msg2 & Chr(10) & msg3 & Chr(10) & Chr(10) & "Repousser l'alerte ?"
DGVDR
Messages postés
158
Date d'inscription
vendredi 10 août 2012
Statut
Membre
Dernière intervention
20 juillet 2015
12 juil. 2013 à 15:38
12 juil. 2013 à 15:38
Pijaku,
Non il n'y a pas d'erreur cependant ça ne fonctionne pas.
Exemple :
Onglet préventif : case G10
Case indiqué au 13/07/13, qui est un samedi.
Ca ne modifie pas ma case , alors que ce code :
Devrait rajouter 2 à la date et donc l'amener à Lundi,
As tu des idées ?
DGVDR
Non il n'y a pas d'erreur cependant ça ne fonctionne pas.
Exemple :
Onglet préventif : case G10
Case indiqué au 13/07/13, qui est un samedi.
Ca ne modifie pas ma case , alors que ce code :
maDate = CDate(Worksheets("Préventif").Range("G" & i)) NumeroJour = Weekday(maDate, vbMonday) If NumeroJour = 6 Then Worksheets("Préventif").Range("G" & i) = Worksheets("Préventif").Range("G" & i) + 2 If NumeroJour = 7 Then Worksheets("Préventif").Range("G" & i) = Worksheets("Préventif").Range("G" & i) + 1
Devrait rajouter 2 à la date et donc l'amener à Lundi,
As tu des idées ?
DGVDR
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
12 juil. 2013 à 15:43
12 juil. 2013 à 15:43
Qu'elle procédure lance la fonction incriminée?
Soit précis
Parce que là, dans l'état ton classeur comporte tellement de macro qu'on ne peux pas le refaire pour toi...
Soit précis
Parce que là, dans l'état ton classeur comporte tellement de macro qu'on ne peux pas le refaire pour toi...