PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Aujourd'hui 2ème lundi du mois
Aujourd'hui 2ème lundi du mois
Débuté par David02, 13 jan. 2020 21:18 - 14 réponses
Membre enregistré
66 messages
Posté le 13 janvier 2020 - 21:18
Bonjour à tous

Dans une Combo, je récupère une date et j'aimerais récupérer dans une Combo, le jour et dans une autre, le N° du jour.

Exemple !

Combo1 = lundi 13 janvier 2020
Combo2 = Lundi
Combo3 = 2ème

Merci de votre aide
David
Posté le 14 janvier 2020 - 09:59
Bonjour,
Je t'invite à regarder les fonctions sur les dates dans l'aide Windev :
https://doc.pcsoft.fr/fr-FR/?3027029

Exemple de code :
DateVersJourEnLettre() //Renvoi le jour de la semaine correspondant à la date spécifiée : lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche.
Membre enregistré
66 messages
Posté le 14 janvier 2020 - 15:14
Bonjour NN12

Merci de ta réponse
Pour le jour (lundi), il n'y a pas de problème

C'est sur le combo3 que je ne vois pas
Membre enregistré
212 messages
Popularité : +1 (1 vote)
Posté le 14 janvier 2020 - 15:42
Bonjour,
Si on arrive à obtenir :
- Le premier jour du mois considéré
- Le numéro de jour (1 pour lundi...) du premier jour du mois
- La numero de jour de la date considérée (1 pour lundi 13 janvier 2020 dans l'exemple)
- sachant qu'une semaine fait 7 jours
- quelques soustractions et une division et on devrait obtenir le N du Nième jour de semaine considéré dans le mois

Bon dev
Membre enregistré
66 messages
Posté le 14 janvier 2020 - 17:12
houla !
Je débute...
Si tu peux m'indiquer le code et ou le placer stp ?
En fait, il n'y a pas de Combo1. c'est un champ de saisie avec calendrier (SAI_Date)!
Message modifié, 14 janvier 2020 - 17:16
Membre enregistré
138 messages
Posté le 15 janvier 2020 - 01:26
Bonjour;
Date : JJ-MM-AAAA
C'est le résultat de la division du JJ sur 7 et on ajoute 1

exemple : on est le 15-01-2020

résultat de 15 / 7 = 2
on ajoute 1 au résultat : 2+1 = 3

on est le 3ieme Mercredi du mois

Bon Dev.
Membre enregistré
212 messages
Popularité : +1 (1 vote)
Posté le 15 janvier 2020 - 09:30
@Fouedusa

Bonjour

Attention à cette formule qui renverra toujours 2 pour le 7 du mois (au lieu de 1)

Bon dev
Membre enregistré
66 messages
Posté le 15 janvier 2020 - 12:42
Bonjour
Merci pour ton aide

Dans mon code, si je sélectionne 18/01/2020, le SAI_DateRecherche (Type numérique sans chiffre après la virgule) affiche "4" alors que c'est le 3ème samedi
Je comprend que le résultat est 3,57 donc il prend 4.
Comment faire pour qu'il affiche le premier chier avant la virgule ?

A chaque Modification de SAI_Date
MaDate est une Date = MoiMême

SI DateValide(MoiMême) ALORS
SAI_DateRecherche=MaDate..Jour/7+1


Merci de cette aide
Membre enregistré
212 messages
Popularité : +1 (1 vote)
Posté le 15 janvier 2020 - 13:24
Essayez :

SAI_DateRecherche= partieentiere ((madate..jour-1)/7)+1


Bon dev
Membre enregistré
694 messages
Posté le 15 janvier 2020 - 13:57
Bonjour,

je viens d'ecrire ca

PROCÉDURE RenvoiPositionJour(daterecherche est une Date = "20200101")
/// on cherche le premier jour du mois
datedebut est une Date = PremierJourDuMois(daterecherche)
////on cherche le dernier jour du mois
datefin est une Date = DernierJourDuMois(datedebut)
///// on declare un tableau associatif pour stocker les dates des lundi / mardi / etc

taBleaudate est un tableau associatif de tableau de Date

/// on boucle pour le nombre de jour dans le mois
POUR i = 0 _À_ DateDifférence(datedebut,datefin)
// on prend la date de debut
dAteincrement est un Date = datedebut
// on incremente i dans le jour de recherche
dAteincrement..Jour += i
//// on cherche si la date est un lundi / mardi
njour est un entier = DateVersJourDeLaSemaine(dAteincrement)
/// on ajoute lundi / mardi / mercredi dans le tableau associatif
Insère(taBleaudate,njour)
SI njour <> 0 ALORS
/////// on ajoute la date du lundi dans le tableau lundi/ mardi dans mardi etc..
Ajoute(taBleaudate[njour],dAteincrement)
FIN
FIN
///////////////
////// en suite on va chercher la position de la date de recherche dans le tableau
njourrecherche est un entier = DateVersJourDeLaSemaine(daterecherche)
npositionjour est un entier = TableauCherche(taBleaudate[njourrecherche],tcLinéaire,daterecherche)
SI npositionjour <> -1 ALORS
SELON npositionjour
CASE 1
RENVOYER "1er " + DateVersJourEnLettre(daterecherche)
AUTRE CAS
RENVOYER npositionjour + "ème " + DateVersJourEnLettre(daterecherche)
FIN
FIN


Je pense qu'il y a beaucoup plus simple mais ca fonctionne bien

RenvoiPositionJour("20200115") // affiche 3eme mercredi
RenvoiPositionJour("20200115") //affiche 5eme vendredi


A vous de modifier le renvoi de la procedure

jordan
Membre enregistré
694 messages
Posté le 15 janvier 2020 - 14:21
edit : C'est "20200131" et non "20200115" qui renvoi 5ème vendredi

Maudit soit le copier coller ;)
Membre enregistré
66 messages
Posté le 15 janvier 2020 - 15:02
Bonjour
Merci à vous trois !

Jordan, ""DateVersJourDeLaSemaine"" concerne WinDev 25. J'ai WinDev 19 ! Dommage

Samir, pour le chiffre c'est bon mais J'ai essayé d'ajouter "ème" et "er" comme ceci

MaDate est une Date = MoiMême

SI DateValide(MoiMême) ALORS
SAI_DateLettre= EntierVersJourEnLettre(DateVersEntier(MoiMême)) //Pour le jour en lettre : lundi, mardi, etc

SI SAI_DateChiffre <> 1 ALORS
SAI_DateChiffre= PartieEntière ((MaDate..Jour-1)/7)+1 + "ème "// Pour le jour en chiffre : 2ème,3ème
SINON
SAI_DateChiffre= PartieEntière ((MaDate..Jour-1)/7)+1 + "er "// Pour le jour en chiffre : 1er
FIN
FIN


Ca ne fonctionne pas (aléatoire). C'est un problème de masque de saisie ?

David
Membre enregistré
212 messages
Popularité : +1 (1 vote)
Posté le 15 janvier 2020 - 15:22
Sai_DateChiffre doit être un champ de type texte et votre code :

MaDate est une Date = MoiMême


SI DateValide(MaDate ) ALORS

posiJour est un entier = PartieEntière ((MaDate..Jour-1)/7)+1

SAI_DateLettre= EntierVersJourEnLettre(DateVersEntier(MaDate )) //Pour le jour en lettre : lundi, mardi, etc

SI posiJour <> 1 ALORS
SAI_DateChiffre= posiJour + "ème "// Pour le jour en chiffre : 2ème,3ème
SINON
SAI_DateChiffre= posiJour + "er "// Pour le jour en chiffre : 1er
FIN
FIN
Membre enregistré
694 messages
Posté le 15 janvier 2020 - 16:14
David a écrit :
Bonjour
Merci à vous trois !

Jordan, ""DateVersJourDeLaSemaine"" concerne WinDev 25. J'ai WinDev 19 ! Dommage

Samir, pour le chiffre c'est bon mais J'ai essayé d'ajouter "ème" et "er" comme ceci

MaDate est une Date = MoiMême

SI DateValide(MoiMême) ALORS
SAI_DateLettre= EntierVersJourEnLettre(DateVersEntier(MoiMême)) //Pour le jour en lettre : lundi, mardi, etc

SI SAI_DateChiffre <> 1 ALORS
SAI_DateChiffre= PartieEntière ((MaDate..Jour-1)/7)+1 + "ème "// Pour le jour en chiffre : 2ème,3ème
SINON
SAI_DateChiffre= PartieEntière ((MaDate..Jour-1)/7)+1 + "er "// Pour le jour en chiffre : 1er
FIN
FIN


Ca ne fonctionne pas (aléatoire). C'est un problème de masque de saisie ?

David


Tu peux utiliser DateVersJour()

Jordan
Membre enregistré
66 messages
Posté le 15 janvier 2020 - 17:21
Merci Samir. Impeccable