Bonjour à tous,

je travaille actuellement sur une méthode pour ceux qui recensent (au sein de ma petite entreprise) les prises de congés, RTT et jours de récup.
Ce n'est pas du tout mon boulot mais je me suis lancé là-dedans avec mes petites connaissances en code.

Pour l'instant j'en suis seulement à l'étape de prototype, mais l'idée finale est que les salariés se servent d'un Microsoft form pour faire leur demande de congé, que je récupère ensuite le fichier excel associé pour automatiquement transférer ces données sur une fiche navette déjà créée regroupant toutes ces infos pour l'ensemble des salariés.

J'ai commencé à réfléchir à un algorithme qui automatise le remplissage d'une fiche navette en venant colorier en vert les jours demandés, à partir d'un formulaire créé sur un fichier excel.

je vous montre ce que j'ai en entrée sur le formulaire :
Nom : Capture d’écran 2018-11-29 à 10.46.54.png
Affichages : 4448
Taille : 34,8 Ko

et sur une 2ème feuille j'ai la fiche navette, ici que j'ai recréé mais la première ligne donne l'exemple de la façon dont sont stockées les données :
Nom : Capture d’écran 2018-11-29 à 10.51.28.png
Affichages : 1549
Taille : 54,0 Ko

ET voici le code :
Pour vous aider à comprendre, ma fonction colonnedebut permet de savoir en fonction de la date du mois demandé, de se placer dans la bonne colonne pour colorier. Après j'ai fait une boucle "if" à chaque fois pour savoir dans quelle ligne se placer en fonction du type de congé.
l'idée ensuite c'est qu'une fois que la personne a rempli ses informations (je n'ai pas encore géré les cas où ces champs sont vides ...), quand il clique sur valider, cela cherche dans ma fiche navette le nom correspondant, ensuite que ça colorie en vert en fonction des dates demandées (avec gestion des années bissextiles et des jours ouvrés).
Si il n'existe pas de champ à ce nom, cela va en créer un (mais je sais que cette fiche navette doit être déjà préparée avec recevoir ces données, donc les cases doivent être fusionnées, etc).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
 
Function bisextile(madate As Date) As Boolean
bisextile = Day(DateSerial(Year(madate), 3, 0)) = 29
End Function
 
 
Function colonnedebut(mois As Integer)
 
 
If bisextile(Year(Date)) Then
 
    If mois = 1 Then
        colonnedebut = 5
    End If
    If mois = 2 Then
        colonnedebut = 36
    End If
    If mois = 3 Then
        colonnedebut = 65
    End If
    If mois = 4 Then
        colonnedebut = 96
    End If
    If mois = 5 Then
        colonnedebut = 126
    End If
    If mois = 6 Then
        colonnedebut = 157
    End If
    If mois = 7 Then
        colonnedebut = 187
    End If
    If mois = 8 Then
        colonnedebut = 218
    End If
    If mois = 9 Then
        colonnedebut = 249
    End If
    If mois = 10 Then
        colonnedebut = 279
    End If
    If mois = 11 Then
        colonnedebut = 310
    End If
    If mois = 12 Then
        colonnedebut = 340
    End If
Else
    If mois = 1 Then
        colonnedebut = 5
    End If
    If mois = 2 Then
        colonnedebut = 36
    End If
    If mois = 3 Then
        colonnedebut = 64
    End If
    If mois = 4 Then
        colonnedebut = 95
    End If
    If mois = 5 Then
        colonnedebut = 125
    End If
    If mois = 6 Then
        colonnedebut = 156
    End If
    If mois = 7 Then
        colonnedebut = 186
    End If
    If mois = 8 Then
        colonnedebut = 217
    End If
    If mois = 9 Then
        colonnedebut = 248
    End If
    If mois = 10 Then
        colonnedebut = 278
    End If
    If mois = 11 Then
        colonnedebut = 309
    End If
    If mois = 12 Then
        colonnedebut = 339
    End If
End If
 
End Function
 
Function nbjoursouvres(datedebut, datefin)
 
Dim i As Long
    For i = datedebut To datefin
        If Weekday(CDate(i)) <> 1 And Weekday(CDate(i)) <> 7 Then _
            nbjoursouvres = nbjoursouvres + 1
    Next
 
End Function
 
 
 
 
Sub valider()
 
Dim nom As String
Dim prenom As String
Dim typeconge As String
Dim tampon As Integer
Dim datedebut As Date
Dim datefin As Date
Dim nbjourouvre As Integer
 
'Worksheets("saisie").Activate
'Worksheets("2018").Activate
 
'on récupère les différentes valeurs pour nom, prénom, date début, date fin
nom = Worksheets("saisie").Range("C3").Value
 
prenom = Worksheets("saisie").Range("E3").Value
datedebut = Worksheets("saisie").Range("C7").Value
datefin = Worksheets("saisie").Range("E7").Value
 
'on recupere la valeur de retour du menu deroulant
tampon = Worksheets("saisie").Range("I11").Value
 
If tampon = 1 Then
typeconge = "CP"
End If
 
If tampon = 2 Then
typeconge = "RTT"
End If
 
If tampon = 3 Then
typeconge = "Recup"
End If
 
'on initialise ligne et colonne pour que ça regarde la premiere ligne du tableau avec un nom
Dim ligne As Integer
ligne = 2
Dim colonne As Integer
colonne = 1
 
Dim dernierecase As String
Dim trouve As Boolean
trouve = False
 
Dim moisselect As Integer
Dim debutcolor As Date
Dim fincolor As Date
 
 
'on initialise dernierecase avec la premiere case nom du tableau
dernierecase = Worksheets("2018").Cells(ligne, colonne).Value
 
Do Until trouve = False
 
    While (dernierecase <> "") 'tant que la case sélectionnée n'est pas vide on rentre dans la boucle
 
        If dernierecase = nom Then 'si la case nom du tableau correspond au nom entrée alors on entre dans la boucle
 
            If typeconge = "CP" Then 'si la personne a sélectionné CP il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                'on ne change pas la valeur de ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
            End If
 
            If typeconge = "RTT" Then 'si la personne a sélectionné RTT il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                ligne = ligne + 1 'on ajoute 1 pour etre dans la bonne ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
 
            End If
 
            If typeconge = "Recup" Then 'si la personne a sélectionné RTT il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                ligne = ligne + 2 'on ajoute deux pour etre dans la bonne ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
            End If
 
                trouve = True 'on dit a la variable trouve qu'il a trouvé le nom
 
        Else
            ligne = ligne + 3 'on ajoute 3 car le nom est une cellule fusionnée contenant 3 lignes
            dernierecase = Worksheets("2018").Cells(ligne, colonne).Value 'on attribue a dernierecase le nom de la ligne suivante
       End If
    Wend
 
 
 
Loop
 
If trouve = False Then 'si on a pas trouvé le nom dans le tableau alors on créer une nouvelle ligne
 
    Worksheets("2018").Cells(ligne, colonne).Value = nom
    Worksheets("2018").Cells(ligne, colonne + 1).Value = prenom
            If typeconge = "CP" Then 'si la personne a sélectionné CP il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                'on ne change pas la valeur de ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
            End If
 
            If typeconge = "RTT" Then 'si la personne a sélectionné RTT il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                ligne = ligne + 1 'on ajoute 1 pour etre dans la bonne ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
 
            End If
 
            If typeconge = "Recup" Then 'si la personne a sélectionné RTT il faut ecrire dans la premiere ligne du tableau correspondant à son nom
                ligne = ligne + 2 'on ajoute deux pour etre dans la bonne ligne
                colonne = colonnedebut(Month(datedebut))   'sélectionne la colonne a laquelle on va commencer à colorier
                For colonne = colonne + Day(datedebut) To colonne + Day(datedebut) + nbjourouvre
                    Worksheets("2018").Cells(ligne, colonne).Interior.ColorIndex = 4 'on colorie la cellule en vert
                Next colonne
            End If
 
End If
 
 
 
 
 
End Sub
Voilà, mon code ne plante pas visiblement mais lorsque que je fais un test, cela ne colorie rien en vert. Donc il doit y avoir une erreur quelque part ... Je suis conscient qu'il doit pas être très optimisé, mais j'ai fait avec mon raisonnement et mes connaissances .. Si quelqu'un peut m'aider, je suis preneur !

Si vous avez besoin de plus d'infos, n'hésitez pas à demander.

Merci beaucoup,

Baptiste L.