IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Max date from multiple date fields? [AC-2003]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    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.

  2. #2
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    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 ?
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    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?

    La seule solution alternative sera d'utiliser les fonction IIF()
    est-il possible de concevoir une fonction via VB pour calculer la date requise?

  4. #4
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    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

  6. #6
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    dim date_choix() as date
    )
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    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).

  8. #8
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    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.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    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.

  10. #10
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    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
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 25
    Points
    25
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] couleur cellule date differente si date passee, ou date du jour
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/03/2011, 08h24
  2. Réponses: 4
    Dernier message: 28/01/2011, 17h03
  3. Réponses: 4
    Dernier message: 20/02/2010, 02h40
  4. la fonction Max/Min sur des dates
    Par chabagrou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/12/2007, 18h38
  5. [Oracle] selection du max en groupand par date
    Par pelo68 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 05/05/2006, 22h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo