[Résolu]Calcul automatique de champ avec une date

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

[Résolu]Calcul automatique de champ avec une date

Message par Seb1258 »


La modération vous a écrit: Merci de faire preuve d'inventivité dans un titre.
Un titre clair et explicite n'est pas pour vous mais pour ceux effectuant ensuite des recherches dans ce forum.

Bonjour,

Sur la base de donnée ci-jointe que je suis en train de créer, pourriez-vous m'aider pour que les 2 champs ci-dessous se remplissent automatiquement ?

Champ "Âge" : calcul automatique en fonction de la date de naissance
Champ "Renouvellement" : calcul automatique en fonction de la durée de validité d'une formation

Dans la base jointe, j'ai encadré le champ AGE en jaune et pour le champ renouvellement (je n'arrive pas à encadrer comme il faut) il se trouve dans le contrôle de table que j'ai mis en bleu.

J'ai également modifié ma macro d'ouverture pour que le formulaire Agents s'affiche à l'ouverture.

Merci d'avance :)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Seb1258 le 02 nov. 2024 15:29, modifié 2 fois.
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
HRk2o
Membre cOOnverti
Membre cOOnverti
Messages : 366
Inscription : 29 mai 2009 08:51
Localisation : Guyane

Re: Calcul automatique dans un champ.

Message par HRk2o »

Rebjr,

- durée de validité de formation: que signifie t-elle?
- pouvez-vous fournir un fichier avec + de données pratiques et cohérentes.
@+
Windows 10 sous AOO 4.1.16 et LibO 24.8.5.2
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Calcul automatique dans un champ.

Message par Seb1258 »

Re,

La durée de validité de la formation indique la durée pendant laquelle la formation est valable. Par exemple, une habilitation électrique (dans mon exemple) est valable 3 ans, donc il doit y avoir un recyclage au bout de 3 ans. Sachant que c'est moi qui renseigne la durée de validité lorsque je crée une formation.

Si l'agent passe la formation du 01/01/23 au 15/01/23 il devra être renouvelé avant le 15/01/26 (j'ai mis quelques exemples sur l'agent TEST1, sur la base que je mets en PJ comme demandé).

Merci :D
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Calcul automatique dans un champ.

Message par jeanmimi »

Bonjour,
Seb1258 a écrit : 30 oct. 2024 17:28 Champ "Renouvellement" : calcul automatique en fonction de la durée de validité d'une formation
En pratique, il faudra donc indiquer la date de la fin de la formation dans la Table source.
Dans la requête, et non pas dans une Table T_AGTFORM comme dans l'exemple que tu as joint, il faudra extraire l'année, y ajouter la durée de la validité, puis reconstituer la date à partir de laquelle la formation ne sera plus valide.
Il est possible de faire ces calculs avec cette syntaxe SQL :

Code : Tout sélectionner

SELECT "Agents"."Prénom", "Agents"."Nom", "Agents"."Date de naissance", "Formation"."Type de formation", "T_AGTFORM"."FORM_fin", "Formation"."Durée de validité de la formation", YEAR( "FORM_fin" ) AS "Année_fin_formation", YEAR( "FORM_fin" ) + "Durée de validité de la formation" AS "Année_fin_de_validité", EXTRACT( DAY FROM "FORM_fin" ) AS "Jour", EXTRACT( MONTH FROM "FORM_fin" ) AS "Mois", EXTRACT( DAY FROM "FORM_fin" ) || '/' || EXTRACT( MONTH FROM "FORM_fin" ) || '/' || ( YEAR( "FORM_fin" ) + "Durée de validité de la formation" ) AS "DATE_FIN_DE_VALIDITE" FROM "Test", "Agents", "T_AGTFORM", "Formation" WHERE "Test"."Ref_agent" = "Agents"."Ref_agent" AND "T_AGTFORM"."REF_AGT" = "Agents"."Ref_agent" AND "T_AGTFORM"."REF_FORM" = "Formation"."Ref_formation"
Calcul Dates dans Requête.png
Il y a possiblement plus simple.
En général, il vaut mieux des libellés de champs courts, sans espaces et sans accents.
Gestion_agents_forum_v2.odb
Quant au calcul de l'âge, il y a plusieurs exemples de requêtes dans le forum. A voir, si un peut répondre à ta demande.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
HRk2o
Membre cOOnverti
Membre cOOnverti
Messages : 366
Inscription : 29 mai 2009 08:51
Localisation : Guyane

Re: Calcul automatique dans un champ.

Message par HRk2o »

Bsr,

voici une nouvelle version!
le calcul de l'âge et du renouvellement est lié aux vues correspondantes dans le formulaire "F_agents".

@+
Gestion_agents_forum_v3.odb
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Windows 10 sous AOO 4.1.16 et LibO 24.8.5.2
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Calcul automatique dans un champ.

Message par Seb1258 »

Bonjour à tous les deux.

Merci pour vos retours, mais malheureusement je ne comprends pas tous. Pourriez-vous m'éclairer sur les points suivants :

Jeanmimi, le code que tu as inscrit se situe où dans la base ? S'il n'est pas encore dedans, peux tu me préciser où je dois le mettre ? Pour le calcul de l'âge, j'ai bien trouvé quelques exemples, mais soit je ne fais pas ce qu'il faut... Soit ma version étant ancienne il y a des bugs...

De plus, en ouvrant le formulaire "F_Agents" sur la V3, le champ "Age" ne se mets pas à jours quand je change la date de naissance de l'agent. Pour le champ "Renouvellement" sur la V2 c'est pareil. En revanche, sur la V3, le champ "Validité" s'affiche bien quand je sélectionne une ligne. Sur la V2 je me suis dis qu'il fallait peut être changer quelque chose sur le formulaire, mais je n'y arrive pas.

Néanmoins, pour la V3, dans le champ "Validité", est-il possible d'avoir le résultats intégrer dans une liste en face des différentes formations ? Où dois-je obligatoirement cliquer sur la ligne de formation pour avoir le résultat ? Je vous avoue qu'un résultat visible directement serait plus simple que de devoir cliquer sur chaque formation. Mais biensûre, je ne sais pas si c'est faisable.

Enfin, j'ai vu sur la V3 qu'il y avait une table "VueRenouvel" dans laquelle je ne pouvais pas modifier les informations. Je ne peux pas non plus l'utiliser dans les relations. Est-ce normal ? Est-ce un paramétrage fait à la création de la table ?

Désolé si je galère un peu à vous suivre mais comme vous l'aurez constaté mon niveau sur Base (sur libre office en générale d'ailleurs) est très faible.

En tous cas merci beaucoup pour votre aide :D
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Calcul automatique de champ avec une date

Message par jeanmimi »

Seb1258 a écrit : 31 oct. 2024 10:15 Jeanmimi, le code que tu as inscrit se situe où dans la base ?
Comme tout ce qui se calcule dans Base, dans une Requête.
Seb1258 a écrit : 31 oct. 2024 10:15 Soit ma version étant ancienne il y a des bugs.
Le SQL est toujours le même depuis des années, la requête de calcul de l'âge en années se fait de cette manière :

Code : Tout sélectionner

SELECT "Ref_agent", "Nom", "Prénom", "Date de naissance", CONCAT( DATEDIFF( 'year', "Date de naissance", NOW( ) ), ' ans' ) AS "Age" FROM "Agents"
Seb1258 a écrit : 31 oct. 2024 10:15 Sur la V2 je me suis dis qu'il fallait peut être changer quelque chose sur le formulaire
Oui, il faut que les champs calculés soient dans des sous-formulaires (SubForm) en relation avec le formulaire principal (MainForm). On peut en conclure que la Table Agents avec un champ Age n'est pas conforme puisque cette Table Agents ne devrait contenir que des informations fixes et invariables.
Affichage de l'âge.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Calcul automatique de champ avec une date

Message par Seb1258 »

EDIT : Je viens de voir que tu avais joint une base... Du coups j'ai supprimé mon premier message....

Le résultat est parfait, je voulais juste savoir si c'était possible d'améliorer l'affichage pour qu'il se mette à jour immédiatement sans avoir besoin de repasser par un autre formulaire pour que les données s'actualisent ?

En tous cas, merci beaucoup à tous les deux, c'est vraiment top...

Je vais ouvrir d'autre poste pour d'autre question je pense :)
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Calcul automatique de champ avec une date

Message par jeanmimi »

Seb1258 a écrit : 31 oct. 2024 11:28 améliorer l'affichage pour qu'il se mette à jour immédiatement
Est-ce que tu parles de la date de renouvellement de la formation ?
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Calcul automatique de champ avec une date

Message par Seb1258 »

Je parle des 2 champs calculés (âge et date de renouvellement).

Sur ma version de libre office, je dois sortir du formulaire et y revenir pour avoir les données affichées.

D'ailleurs j'ai trouvé un problème avec le renouvellement. J'ai ajouté 2 fois la même formation et le champs renouvellement est le même pour les deux, alors qu'il devrait être différent de plusieurs années.

Je remets la base car j'ai fais de nouvelles modifications :)
renouv-2.PNG
renouv-1.PNG
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17219
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Calcul automatique de champ avec une date

Message par jeanmimi »

Seb1258 a écrit : 31 oct. 2024 13:15 J'ai ajouté 2 fois la même formation et le champs renouvellement est le même pour les deux, alors qu'il devrait être différent de plusieurs années.
C'est parce qu'il y a une erreur dans les relations entre les Tables ou Requêtes entre le MainForm et le SubForm; il reste à la trouver et la corriger !
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
HRk2o
Membre cOOnverti
Membre cOOnverti
Messages : 366
Inscription : 29 mai 2009 08:51
Localisation : Guyane

Re: Calcul automatique de champ avec une date

Message par HRk2o »

Bjr,

je reprends à partir du dernier fichier fourni; je ne me retrouvai plus dans les versions multiples non identifiées.
les captures vous montrent les corrections à apporter;
Screenshot_2.png
Screenshot_1.png
Gestion_agents_forum_v4.odb
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Windows 10 sous AOO 4.1.16 et LibO 24.8.5.2
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Calcul automatique de champ avec une date

Message par Seb1258 »

Bonjour à tous les deux,

Merci beaucoup pour votre aide, j'ai fais les corrections et ça fonctionne bien maintenant !

Je vais continuer et je reviens si je bloque encore :lol:

Bon week-end :)
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro