PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → champ planning
champ planning
Débuté par NdToure, 17 oct. 2025 14:39 - 3 réponses
Membre enregistré
326 messages
Posté le 17 octobre 2025 - 14:39
Bonjour ,
J'ai un fichier qui stock les données de mon planning avec un champs date - heure debut et heure de fin.Je veux afficher sur une table les heures non réservé donc les heures qui ne sont pas référencé dans le fichier de données.Le planning commence de 08h00 à 18h:00 avec des crénaux horaire de 15mn:

Voici mon code mais pour l'instant ca ne fonctionne pas :

// ===========================================
// Générer les créneaux libres sur une journée
// ===========================================

// Paramètres de la journée
hDebutJour est une Heure = ChaîneVersHeure("08:00", "HH:MM")
hFinJour est une Heure = ChaîneVersHeure("18:00", "HH:MM")
dDateAnalyse est une Date = SAI_Date // champ de saisie date

// Tableaux
tabOccupe est un tableau de 2 chaînes // [HeureDébut, HeureFin]
tabLibres est un tableau de chaînes

// Nettoyage de la table visuelle
TableSupprimeTout(TABLE_heure)

// --- Récupérer les créneaux occupés depuis la table PlanningRV ---
POUR TOUT PlanningRV AVEC dateRV = dDateAnalyse
sDebut est une chaîne = HeureVersChaîne(PlanningRV.HeureDebut, "HH:MM")
sFin est une chaîne = HeureVersChaîne(PlanningRV.HeureFin, "HH:MM")
// TableauAjoute(tabOccupe, [sDebut, sFin])
TableauAjoute(tabOccupe,[sDebut,sFin])
FIN

// --- Génération des créneaux de 15 minutes ---
hCourante est une Heure = hDebutJour
TANTQUE hCourante < hFinJour
sHeureDebut est une chaîne = HeureVersChaîne(hCourante, "HH:MM")
sHeureFin est une chaîne = HeureVersChaîne(hCourante + 15 min, "HH:MM")

// Vérifie si ce créneau chevauche une réservation
bOccupe est un booléen = Faux
POUR TOUT rdv DE tabOccupe
SI (sHeureDebut >= rdv[1] ET sHeureDebut < rdv[2]) OU (sHeureFin > rdv[1] ET sHeureFin <= rdv[2]) ALORS
bOccupe = Vrai
FIN
FIN

// Si le créneau est libre, on l'ajoute dans la table et le tableau
SI bOccupe=Faux ALORS
TableauAjoute(tabLibres, sHeureDebut + " - " + sHeureFin)
TableAjouteLigne(TABLE_heure, sHeureDebut, sHeureFin)
FIN

hCourante += 15 min
FIN



A qui a une idée
Merci
Membre enregistré
20 messages
Posté le 17 octobre 2025 - 15:36
Hello

Si tes créneaux sont TOUS de 15 minutes et commencent toutes les 15 minutes, fais une boucle de 08:00 à 18:00 avec un incrément minutes+=15
Pour chaque valeur, cherche dans la table des RDV si l'heure de début existe avec cette valeur - si n'existe pas, le créneau est libre.

Bon dev.
Membre enregistré
326 messages
Posté le 17 octobre 2025 - 17:51
Samir BOUCHETIBAT a écrit :
Hello

Si tes créneaux sont TOUS de 15 minutes et commencent toutes les 15 minutes, fais une boucle de 08:00 à 18:00 avec un incrément minutes+=15
Pour chaque valeur, cherche dans la table des RDV si l'heure de début existe avec cette valeur - si n'existe pas, le créneau est libre.

Bon dev.


Merci pour ta réponse.
Cela ne fonctionnera pas, car si, par exemple, un créneau de 10h00 à 11h00 est déjà réservé,
le programme ne doit pas afficher 10h30 parmi les heures libres,
puisque cette heure fait partie d’un créneau déjà planifié.
C’est pour cette raison qu’une simple recherche ne suffit pas dans ce cas.

--
Développeur freelance en PHP laravel et produit PCSOFT.En cas de besoin veuillez me contacter (groupesysteme01[at]gmail.com).
Membre enregistré
974 messages
Posté le 18 octobre 2025 - 10:03
Bonjour,
si vous souhaitez fonctionner par créneaux et si un créneau de 10h00 à 11h00 est réservé, il aurait fallu dans ce cas enregistrer 4 créneaux occupés dans la base, soit :
10h00 -10h15
10h15 - 10h30
10h30 - 10h45
10h45 - 11h00
mais si vous décidez un jour de modifier la durée d'un créneau (par exemple 10mn), ça ne fonctionnera plus.

Vous pouvez aussi parcourir les créneaux occupés d'un jour donné, convertir l'heure de début et l'heure de fin en entier, et ainsi rechercher pour chaque créneau possible d'une journée, que sa valeur convertie en entier ne se trouve pas entre les entiers d'un créneau réservé :

HeureVersEntier
https://doc.pcsoft.fr/?3027017

Cette deuxième méthode fonctionnera également si la durée d'un créneau venait à changer (15mn -> 10mn)

Edit : la méthode de Samir BOUCHETIBAT fonctionne si vous testez en ajoutant 15mn pour chaque créneau depuis l'heure de début occupée jusqu'à l'heure de fin occupée (10h00, 10h00 + 15mn, etc... jusque 11h00)

Cdlt
Message modifié, 18 octobre 2025 - 10:11