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 :

[Formulaire]Insertion d'une liste de dates calculées dont le nombre est variable


Sujet :

IHM

  1. #1
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut [Formulaire]Insertion d'une liste de dates calculées dont le nombre est variable
    Bonjour !

    je suis stagiaire ingénieur environnement mais on m'a également attribué la casquette de développeur d'outils informatiques.

    Je dois réaliser une base de données Access permettant de lister les dates des analyses à venir pour chaque client.

    J'ai réussi à sortir sur un formulaire (Répartition des analyses) le nombre d'analyses prévus (nb_analyse) ainsi que l'intervalle en semaine entre chaque analyse(nb_semaine_analyse).

    Mon problème est le suivant :
    comment générer automatiquement dans le formulaire [Répartition des analyses] les dates d'analyse prévues en fonction du nombre d'analyses et de l'intervalle entre chaque analyse.

    Le but étant d'avoir une liste des nb_analyse dates d'analyses en sachant que la première aura lieu à la semaine nb_semaine_analyse/2 et que les suivantes seront espacées de la précédente de la valeur nb_semaine_analyse.

    Voila voila !

    J'attends vos conseils parce que je commence à avoir mal à la tête à force de prendre des coups !!!
    Sigue soñando

  2. #2
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut et bienvenue sur dvp.

    Crée une requête ajout qui va créer les nouvelles dates en fonction des dernières connues. Pour cela utilise DateAdd.

  3. #3
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Salut et merci d'avoir répondu !

    juste une petite précision,

    j'utilise access 2003 et il me semble que DateAdd ne s'applique qu'à access 2007. Mais je me trompe peut-être !

    D'autre part, j'ai du mal à saisir comment dans un même champ d'une requête, je peux donner 2 formules différentes (1 pour la première date, 1 pour toutes les autres)
    Sigue soñando

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par ancel17
    j'utilise access 2003 et il me semble que DateAdd ne s'applique qu'à access 2007. Mais je me trompe peut-être !
    J'utilise principalement Access97

    D'autre part, j'ai du mal à saisir comment dans un même champ d'une requête, je peux donner 2 formules différentes (1 pour la première date, 1 pour toutes les autres)
    ??
    J'ai du mal à suivre.
    Tu as des dates d'analyses avec un nombre de semaines (intervalle entre 2 analyses).
    la première aura lieu à la semaine nb_semaine_analyse/2 et que les suivantes seront espacées de la précédente de la valeur nb_semaine_analyse
    Je pense que là on a un soucis. Tu calcules ta 1ère date (semaine : nb_semaine_analyse/2) à partir de quelle date ?
    Pour les suivantes c'est assez simple. Mais il faut le point de départ.

    Si j'ai compris : il te faut utiliser DAO
    Tu parcours la table qui recence nb_analyse et nb_semaine_analyse.
    Pour chaque enregistrement, tu crées n enregistrements (où n = nb_analyse) dont le champ date du 1er aura pour valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd("ee", nb_semaine_analyse, DateDépart)
    et les suivants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd("ee", nb_semaine_analyse, ValeurPrécédente)

  5. #5
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    le fait est que je n'ai pas de date !
    le champ nb_semaine_analyse est calculé sur le champ nb_analyse qui est un champ numérique : nb_semaine_analyse = Ent(52/nb_analyse) ce qui nous donne un intervalle correspondant à des semaines.

    pour avoir une répartition centrée sur l'année (soit 52 semaines) il faut que la première date d'analyse corresponde à la semaine nb_semaine_analyse/2.
    je pense qu'il doit y avoir une fonction qui permet de convertir un nombre en date.

    une fois que cette première date est calculée, on pourra calculer les dates suivantes avec DateAdd.
    Sigue soñando

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    dans chaque base je conseillerais de mettre une table index contenant les valeurs de 1 à 365 par exemple
    ici on va nomlmer ce champ semaine

    dés lors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [periode] Short;
    SELECT Int([periode]/2)+(([semaine]-1)*[periode]) AS analsemaine
    FROM [index]
    WHERE Int([periode]/2)+(([semaine]-1)*[periode])<=52;
    devrait régler ton pb
    si on veut transformer en date on fera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [periode] Short, [quel an] Short;
    SELECT (Int([periode]/2)+(([semaine]-1)*[periode])*7)+(DateSerial([quel an],1,1)) AS analsemaine
    FROM [index]
    WHERE ((((Int([periode]/2)+(([semaine]-1)*[periode])*7)+(DateSerial([quel an],1,1)))<=DateSerial([quel an],12,31)));
    Elle est pas belle la vie ?

  7. #7
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Citation Envoyé par random
    dans chaque base je conseillerais de mettre une table index contenant les valeurs de 1 à 365 par exemple
    ici on va nomlmer ce champ semaine

    dés lors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [periode] Short;
    SELECT Int([periode]/2)+(([semaine]-1)*[periode]) AS analsemaine
    FROM [index]
    WHERE Int([periode]/2)+(([semaine]-1)*[periode])<=52;
    devrait régler ton pb
    ???
    peux-tu détailler ce que tu me proposes, parce que là je ne comprends pas vraiment (je débute !)
    Sigue soñando

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    c'est po grave de débuter
    cela n'est que transitoire
    crée une table que tu nommes index avec un champ nommé semaine
    (si tu ne sais pas voir un tutoriel)
    dans le champ semaine saisis 1,2,3...52
    ensuite fais requête nouveau ajouter une table index
    affichage mode sql
    efface select;
    recopie le code et éxécute
    Elle est pas belle la vie ?

  9. #9
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Merci !!!
    ça fonctionne du feu de dieu !!!

    est-il possible que les paramètres soient liés à la valeur d'un champ d'un formulaire ?

    Je m'explique :
    j'ai un formulaire avec un champ calculé qui me donne la valeur correspondant au paramètre [période] (nb_semaine_analyse). Si j'insère la requête magique que tu m'as donné en tant que sous-formulaire, puis-je faire correspondre nb_semaine_analyse au paramètre [période de la requète] ?
    Sigue soñando

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    meme pas dur remplace
    [periode] par forms("nomdemonformulaire").nomdemoncontrole
    Elle est pas belle la vie ?

  11. #11
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    j'ai remplacé [période] par la formule que tu m'as donné et oté [période] de la déclaration des paramètres.
    Ce qui me donne le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PARAMETERS [quel an] Short;
    SELECT (Int(forms("F_repartition_analyse_annee1").texte18/2)+(([semaine]-1)*forms("F_repartition_analyse_annee1").texte18)*7)+(DateSerial([quel an],1,1)) AS analsemaine
    FROM [index]
    WHERE ((((Int(forms("F_repartition_analyse_annee1").texte18/2)+(([semaine]-1)*forms("F_repartition_analyse_annee1").texte18)*7)+(DateSerial([quel an],1,1)))<=DateSerial([quel an],12,31)));
    qd j'execute la requete, j'ai l'erreur suivante :
    Utilisation non valide de '.', '!', ou '()' dans l'expression
    '(Int(forms("F_repartition_analyse_annee1").texte18/2)+(([semaine]-1)*forms("F_repartition_analyse_annee1").texte18)*7)+(DateSerial([quel an],1,1))'
    Sigue soñando

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    hum c'est
    [forms].[nomformulaire]![nomchamp]

    pardon
    Elle est pas belle la vie ?

  13. #13
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    merci, c'est ça !

    j'avais essayé nomformulaire.forms!nomchamp mais en vain...

    dernière petite question et je pense que mon problème sera résolu !

    le paramètre [quel an] correspond à l'année en cours, comment faire pour automatiser cette valeur (2007 pour cette année, 2008 pour une utilisation l'année prochaine), et ne pas avoir à la rentrer manuellement ?
    Sigue soñando

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le remplacer par year(date())
    Elle est pas belle la vie ?

  15. #15
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    C'est bon j'ai trouvé la solution : je remplace [quel an] par Year(Date()) et ça fonctionne !

    Voici le résultat final !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (Int([forms].[F_repartition_analyse_annee1]![texte18]/2)+(([semaine]-1)*[forms].[F_repartition_analyse_annee1]![texte18])*7)+(DateSerial(Year(Date()),1,1)) AS analsemaine
    FROM [index]
    WHERE ((((Int([forms].[F_repartition_analyse_annee1]![texte18]/2)+(([semaine]-1)*[forms].[F_repartition_analyse_annee1]![texte18])*7)+(DateSerial(Year(Date()),1,1)))<=DateSerial(Year(Date()),12,31)));
    Merci beaucoup à random et Kikof !
    Sigue soñando

  16. #16
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Citation Envoyé par random
    le remplacer par year(date())
    tu m'as devancé de 2 minutes sur la rédaction !!!
    Sigue soñando

  17. #17
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    ok j'ai parlé un peu trop vite !

    la requete fonctionne parfaitement.

    je l'ai inséré en tant que sous-fomulaire dans mon formulaire qui va bien, mais j'aimerai qu'elle soit mise à jour automatiquement lorsque la valeur nb_analyse du formulaire change.
    Est-ce possible ?
    Sigue soñando

  18. #18
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Sur l'évènement "Sur activation" du sous formulaire:
    Je pense que ça devrait fonctionner.

  19. #19
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Citation Envoyé par Kikof
    Sur l'évènement "Sur activation" du sous formulaire:
    Je pense que ça devrait fonctionner.
    j'ai un souci, cela me donne l'erreur : module introuvable.
    Sigue soñando

  20. #20
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    j'ai un souci, cela me donne l'erreur : module introuvable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Form_Current()
    Sinon à la place de essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!NomFormulaire!NomSousFormulaire.Requery

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] calculer le nombre de mois dans une liste de date
    Par zaza45 dans le forum Excel
    Réponses: 2
    Dernier message: 23/06/2010, 08h49
  2. activer/désactiver une liste déroulante + date calendrier
    Par toome dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/01/2006, 15h56
  3. Réponses: 7
    Dernier message: 06/12/2005, 19h32
  4. Réponses: 32
    Dernier message: 22/09/2005, 10h40
  5. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34

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