Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/12/2010, 18h34   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Par défaut Max date from multiple date fields?

Bonsoir,

Avant d'exposer ma requête, je tiens à vous informer que j'ai cherché longement dans plusieurs forums, mais hélas, aucune réponse
je suis entrain de créer un formulaire dans lequel il y a les dates d'approbation d'une dizaine de membre (dans la même table),
je cherche à rajouter un champ calculé pour déterminer la date prévue pour le lancement du produit, cette date n'est que le MAX des dates d'approbation de tous les membres (Max de 10 Champs) majoré de 15 jours. cependant, cette date ne sera calculée que si tous les dates d'approbation de tous les membres seront saisient.
merci d'avance.
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 23h51   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Mounamidou,

A priori, il me semble peu opportun d'effectuer une requete de regroupement sur un nombre de champs.
Pour que la requête fonctionne simplement, il serait souhaitable que ces 10 champs soient regroupés dans une seule rubrique (mais avec 10 enregistrements maximum.
Dans le cas contraire, le SQL risque d'être compliqué. La seule solution alternative sera d'utiliser les fonction IIF()

Quelle est la structure de la table en entrée ?
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 07h26   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Citation:
Envoyé par dumas.blr Voir le message

Pour que la requête fonctionne simplement, il serait souhaitable que ces 10 champs soient regroupés dans une seule rubrique (mais avec 10 enregistrements maximum.
j'ai pas bien saisi, qu'est-ce que vous vouliez dire par regroupés dans une seule rubrique?

Citation:
La seule solution alternative sera d'utiliser les fonction IIF()
est-il possible de concevoir une fonction via VB pour calculer la date requise?
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 13h12   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour,

Je suppose que la table doit avoir la structure suivante (c'est pour cela que je demandais à connaitre sa structure):
- produit
- date1
- date2
- date3
- ...
- date10

alors qu'une structure plus adaptée serait celle-ci :
-produit
-membre
-data d'approbation

Ce qui se traduirait en terme de donnée :
produit1;membre1;date d'approbation
produit1;membre2;date d'approbation
produit1;membre3;date d'approbation
...
produit1;membre10;date d'approbation

Ceci dans la mesure ou tous les membre ont approuvé la date de lancement.

L'avantage est multiple :
- la requête est très simplifiée (on choisit le max en utilisant la fonction MAX du SQL qui est une fonction native de regroupement)
- On peut déterminer immédiatement si tous les membres ont donné une date d'approbation (en utilisant la fonction COUNT).
- De plus, le nombre de membres peut être variable, sans que la fonction SQL doivent être modifiée

alors que dans le cas présent, il faut tester chaque colonne de manière indépendante, et en fonction des autres colonnes.
ex :
Code :
iif(<date1> nonvide,iif(<date2> nonvide,iif(<date3> nonvide,iif(...),max(date...))))
la seule solution viable sera alors de coder en VBA, car non seulement, il faut tester si la colonne est vide, mais en plus il faut mémoriser la date de chaque colonne pour comparer aux dates des autres colonnes et trouver le MAX.

C'est une logique totalement différente de travailler en base de données par rapport au travail sous tableur, car sous tableur (Excel par ex.), les cellules peuvent être testées les unes par rapport aux autres dans n'importe que sens (horizontal comme vertical), ce qui ne peut pas être le cas quand on travaille sous base de données.























new songs
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 13h51   #5
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Citation:
Envoyé par dumas.blr Voir le message
Bonjour,

Je suppose que la table doit avoir la structure suivante (c'est pour cela que je demandais à connaitre sa structure):
- produit
- date1
- date2
- date3
- ...
- date10

alors qu'une structure plus adaptée serait celle-ci :
-produit
-membre
-data d'approbation

Ce qui se traduirait en terme de donnée :
produit1;membre1;date d'approbation
produit1;membre2;date d'approbation
produit1;membre3;date d'approbation
...
produit1;membre10;date d'approbation

Ceci dans la mesure ou tous les membre ont approuvé la date de lancement.

L'avantage est multiple :
- la requête est très simplifiée (on choisit le max en utilisant la fonction MAX du SQL qui est une fonction native de regroupement)
- On peut déterminer immédiatement si tous les membres ont donné une date d'approbation (en utilisant la fonction COUNT).
- De plus, le nombre de membres peut être variable, sans que la fonction SQL doivent être modifiée.
Si j'ai bien compris il faut avoir une structure de la base de données composée de trois table au lieu d'une seule: tbl_Produit; tbl_membre et tbl_date d'approbation?


Citation:
Envoyé par dumas.blr Voir le message
La seule solution viable sera alors de coder en VBA, car non seulement, il faut tester si la colonne est vide, mais en plus il faut mémoriser la date de chaque colonne pour comparer aux dates des autres colonnes et trouver le MAX.
est-ce que vous pouvez me donner une idée sur comment préparer un programme en VB pour aboutir au résultat escompté?
Merci
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 13h57   #6
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Mounamidou,

Quel est votre objectif au juste ? Garder la structure de la base de donnée existante( qui est peut-être un dérivé ou un lien sur une feuille Excel), ou concevoir une nouvelle base de donnée ?
L'objectif est atteignable dans les 2 cas.
Il me parait néanmoins plus pertinent de concevoir une base de donnée bien adaptée au départ, car la maintenance en sera grandement facilitée. En effet, il vaut mieux consacrer plus de temps à la conception que s'efforcer à "coller des rustines" après coup, ce qui, à chaque fois, occasionne de grandes difficultés à maintenir l'application.

Si toutefois vous n'avez pas le choix de modifier la strucre de la BDD existante, il faudra passer par les fonction DAO et travailler au niveau du recordset (voici ici un tutoriel très bien fait)
Quand vous aurez accédé au recordset souhaité, il faudra utiliser un algorithme de ce type (atention, le code n'est probablement pas exact, je le fais de tête sans tester) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function maxdate(rs as recordset) as string
dim date_max as date
date_max = #01/01/1900# 'initialisation de la variable
'test sur chacun des champs date
 if isnull(rs!date1) then 'test si le champ date1 est vide
         maxdate = "le champ date 1 est vide"
         exit function
end if
if rs!date1> date_max then : date_max = rs!date1
 
'on recommence les mêmes tests pour chacuns des champs date
' ...
 
maxdate = date_max
 
 
end function
On peut bien sûr améliorer l'algorithme en stockant le contenu du recordset dans une structure (déclaration de type) ou dans une variable de type tableau (ex:
Code :
dim date_choix() as date
)
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 14h13   #7
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Citation:
Envoyé par dumas.blr Voir le message
Bonjour Mounamidou,

Quel est votre objectif au juste ? Garder la structure de la base de donnée existante( qui est peut-être un dérivé ou un lien sur une feuille Excel), ou concevoir une nouvelle base de donnée ?
L'objectif est atteignable dans les 2 cas.
Hi Dumas et merci beaucoup pour l'intérêt que vous portez à mon application.
Ma base de donnée n’est pas un dérivé ou un lien sur une feuille Excel. Mon soucis est de pouvoir par la suite effectuer des contrôle et éditer automatiquement (lancement automatique) un état des membres qui n’ont pas donné leurs approbations, à la date prévue « deadline » (que je désir calculé tout au début).
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 14h26   #8
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Dans ce cas, je préconise la deuxième option, qui passe d'abords par une définition exacte de vos besoin et des informations qui sont à votre disposition.
Au vu de cet état des lieux, il sera aisé de concevoir la structure des tables qui contiendront les informations.
La conception des requêtes veidra ensuite
Enfin, vous pourrez terminer par la conception des formulaires et des états.
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 09h16   #9
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Citation:
Envoyé par dumas.blr Voir le message
Dans ce cas, je préconise la deuxième option, qui passe d'abords par une définition exacte de vos besoin et des informations qui sont à votre disposition.
Au vu de cet état des lieux, il sera aisé de concevoir la structure des tables qui contiendront les informations.
La conception des requêtes veidra ensuite
Enfin, vous pourrez terminer par la conception des formulaires et des états.
Bonjour Dumas, .
je vous explique l'objet de mon application.
dans notre compagnie, pour le lancement d'un produit, il y a un comité constitué de 10 membres, chaque membre doit donner son approbation avant le lancement.
les document concernant ce produit sont remis au comité à une certaine date (Submission date), ce comité à two weeks pour livrer son approbation ce qui implique un date limite (target deadline= Submission date +15). Après, chaque membre(x) donne son approbation à une date(x), et la date d'approbation du document c'est le Max des dates d'approbation de tous les membres. la détermination de cette date était l'objet de toute cette discution.
je souhaite aussi pouvoir éditer automatiquement une lettre à chaque membre qui n'a pas livré son approbation une fois le deadline atteint.
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 09h38   #10
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour Mounamidou,

Au vu des informations, je vois au moins les tables suivantes à définir, comme vous l'aviez fort justement analysé dans votre post précédent:

Tbl_membre
Elle contient la liste des membres composant le comité :
- identifiant du membre (Clé primaire)
-Nom du membre
-coordonnée téléphoniques et e-mail
- date de présence (pour éviter de relancer un membre si celui-ci est absent et de bloquer l'approbation d'un produit)

Tbl_produit:
Elle contient les caractéristiques du produit à approuver :
- identifiant du produit (Clé primaire)
- Description du produit
- pièces jointes événtuelles
- Date de soumission

Tbl_approbation
Elle contient les actions du comité d'approbation :
- identifiant du produit (Clé étrangère)
- identifiant du membre (Clé étrangère)
- date d'approbation émise par le membre sur ce produit
- observations éventuelle
La PK (primary key) de cette table étant la contaténation des 2 FK (Foreign Key)

Bon courage et tenez-nous au courant sur le forum.

NB : Il me paraitrait plus judicieux de délester ce topic sur le forum "modélisation". Je laisse bien sûr aux modérateurs le choix d'en décider

A bientôt

Jean-Yves
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 18h28   #11
Candidat au titre de Membre du Club
 
Inscription : juin 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 52
Points : 10
Points : 10
Hi Jean
Merci Beaucoup pour vos conseilles et avis qui m'ont aidé à surmonter les diffucltés que j'ai rencontré lors de la conception de ma base de données.
En effet, j'ai terminé ma BD et elle est fonctionnelle maintenant.
Bonnes Fêtes de fin d'année à tous les internautes et plus spécialement aux administrateurs de ce Forum professionnel.
Mounamidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h02.


 
 
 
 
Partenaires

Hébergement Web