Sub mettre_a_jour_plages()
Call supprimer_donnees
Call lister_plages_horaires
Call ajout_rdv_dans_plages
End Sub
Sub supprimer_donnees()
Dim lstrw As Long
Dim lstcol As Long
Call load_public_variables
lstcol = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column
lstrw = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row
If lstcol > 3 Then
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 4), ws_plages_RDV.Cells(4, lstcol)).EntireColumn.Delete
End If
If lstrw > 4 Then
ws_plages_RDV.Rows("5:" & lstrw).EntireRow.Delete
End If
ws_plages_RDV.Cells(4, 1).ClearContents
ws_plages_RDV.Cells(1, 3).Clear
ws_plages_RDV.Cells(2, 3).Clear
End Sub
Sub lister_plages_horaires()
Dim heure_debut As Date
Dim heure_fin As Date
Dim tranche_horaire_min As Long
Dim nb_jours As Long
Dim nb_heures As Long
Dim nb_plages As Long
Dim date_en_cours As Date
Dim heure_en_cours As Date
Dim date_heure_plage As Date
Dim rw_paste As Long
Dim pause_midi_debut As Date
Dim pause_midi_fin As Date
Call load_public_variables
'heures ouvertures
heure_debut = TimeSerial(8, 0, 0)
heure_fin = TimeSerial(19, 0, 0)
'pause midi
pause_midi_debut = TimeSerial(12, 0, 0)
pause_midi_fin = TimeSerial(13, 59, 0)
nb_heures = 11
tranche_horaire_min = 15
nb_plages = (nb_heures / (tranche_horaire_min / 60)) - 1
nb_jours = 7
'boucle sur le nombre de jours
For i = 0 To nb_jours
'identifier la date avec l'heure d'ouverture
date_en_cours = DateAdd("d", i, Date)
heure_en_cours = heure_debut
'boucle sur le nombre de plage horaires sur les heures d'ouvertures
For k = 0 To nb_plages
'ligne pour coller
If ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row = 4 And ws_plages_RDV.Cells(4, 1) = "" Then
rw_paste = 4
Else
rw_paste = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
If k = 0 Then
ws_plages_RDV.Cells(rw_paste, 1) = date_en_cours + heure_en_cours
Else
'itération sur l'heure
heure_en_cours = DateAdd("n", tranche_horaire_min, heure_en_cours)
'condition sur la tranche
If heure_en_cours >= pause_midi_debut And heure_en_cours < pause_midi_fin Then
'alors rien
Else
'coller date et heure de la plage
ws_plages_RDV.Cells(rw_paste, 1) = date_en_cours + heure_en_cours
End If
End If
Next
Next
End Sub
Sub ajout_rdv_dans_plages()
Dim arr_data() As Variant
Dim lstrw As Long, lstcol As Long
Dim date_rdv As Date
Dim heure_rdv As Date
Dim date_debut_rdv As Date, date_fin_rdv As Date
Dim duree_rdv_min As Long
Dim col_coller As Long
Call load_public_variables
'enregistrer les données dans une array
lstrw = ws_rdv.Cells(Rows.Count, 1).End(xlUp).Row
lstcol = ws_rdv.Cells(1, Columns.Count).End(xlToLeft).Column
arr_data = ws_rdv.Range(ws_rdv.Cells(2, 1), ws_rdv.Cells(lstrw, lstcol))
'boucle sur les RDV
For i = LBound(arr_data) To UBound(arr_data)
'vérifier que la date du RDV est après ou égal à la date du jour
If arr_data(i, 1) >= Date Then
'identifier la date et heure de début
date_rdv = arr_data(i, 1)
heure_rdv = arr_data(i, 2)
date_debut_rdv = date_rdv + heure_rdv
'identifier la durée du RDV
duree_rdv_min = arr_data(i, 7)
'identifier la date et heure de fin
date_fin_rdv = date_rdv + DateAdd("n", duree_rdv_min, heure_rdv)
'ajouter une colonnes sur onglet avec les dates sur lignes 1 et 2
col_coller = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column + 1
With ws_plages_RDV
.Cells(1, col_coller) = date_debut_rdv
.Cells(2, col_coller) = date_fin_rdv
.Cells(3, col_coller) = "RDV"
End With
'copier coller la formule
If col_coller > 3 Then
ws_plages_RDV.Cells(4, 3).Copy
ws_plages_RDV.Cells(4, col_coller).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
End If
Next
Erase arr_data
'ajout formule
lstcol = ws_plages_RDV.Cells(1, Columns.Count).End(xlToLeft).Column
lstrw = ws_plages_RDV.Cells(Rows.Count, 1).End(xlUp).Row
If lstcol <= 3 Then
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 2), ws_plages_RDV.Cells(lstrw, 2)).FormulaR1C1 = "=[@[RDV]]"
Else
'ws_plages_RDV.Cells(4, 2).FormulaR1C1 = "=SUM(Tableau3[@[RDV]:[RDV" & lstcol - 2 & "]])"
ws_plages_RDV.Range(ws_plages_RDV.Cells(4, 2), ws_plages_RDV.Cells(lstrw, 2)).FormulaR1C1 = "=SUM(Tableau3[@[RDV]:[RDV" & lstcol - 2 & "]])"
End If
End Sub