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

VBA Access Discussion :

Gérer une année automatiquement pour déduire une date [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut Gérer une année automatiquement pour déduire une date
    Bonjour,

    Je dois gérer des dates de livraisons lors d'une saisie.

    J'ai une table de ce style :
    ARTICLE, JANV, FEV, MARS..., DEC

    Cela permet à l'utilisateur de saisir rapidement 1 article, et des qtés par mois.
    Exemple :
    ART, JANV, FEV, MARS, AVRIL ...
    VELO, 100, 0 , 200, 150

    Je fais un select pour récupérer ma ligne d'enregistrement et je stocke chaque champs dans une variable :
    ARTICLE,
    QTEJANV
    QTEFEV
    QTEMARS
    QTEAVRIL ....

    Mon idée était de dire, par exemple ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF QTEJANV <>0 Then DATEMOIS="01/01/????"
    (la date doit toujours être le premier du mois)

    Mais comment est-ce que je peux calculer l'année ?

    J'avais penser à la date système. Mais se pose le pb de l'année écoulée.
    Exemple : je suis en Juin, je saisie une qté 10 sur JANVIER et une qté de 20 sur Décembre.
    Je voudrais obtenir :
    01/12/2010 - 20
    01/01/2011 - 10

    Je ne sais pas si je suis clair mais je ne sais pas comment je pourrais "déduire" une année par rapport à la date du jour ?

    Si vous avez une idée, je suis preneur.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Cela est dut à une mauvaise conception, on saisi toujours une date en entier (jj/mm/aaaa), ensuite avec des fonctions VB on peut en faire ce que l'on veut.

    Ta table est très mal conçue.

    Philippe

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci Philippe pour ta réponse.

    Je ne comprends pas en quoi ma table est mal conçue ? Peux-tu m'en dire +, je suis curieux de savoir pour apprendre.

    La demande du projet est de pouvoir saisir 1 article et d'affecter sur des mois de son choix des qtés. (pour éviter de saisir 12 lignes pour 12 dates différentes)

    Il faut, par exemple, si on saisit qté 30 dans le mois de MARS, cela donne comme date 01/03/année (toujours le 1er du mois et jamais un autre jour) en cours ou suivante si le mois est déjà passé.
    Merci pour tes renseignements
    A+
    Thibault

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 285
    Points : 19 484
    Points
    19 484
    Billets dans le blog
    64
    Par défaut
    Bonjour,

    Précisément il te faut suivre les conseils de Philippe et remodéliser ta base.

    Par exemple, pour commencer, une table du style :

    TblLivraison
    Article
    Qté
    DateLiv
    ...

    Ferait mieux l'affaire, comme le dit Philippe un champ de type Date (DateLiv) est bien plus souple à manier...

    Bonne continuation..
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Je ne veux pas faire le tétu mais je ne comprends pas :

    La demande du projet est : de ne pas saisir de date (pour gagner du temps de saisie) alors pourquoi il faudrait que j'en mette 1 dans cette table ?


    J'en dis peut-être pas assez (et je me demande si finalement, je ne vous ai pas fait imaginé autre chose) alors je vais détailler :
    J'ai un Bon de commande (saisie classique sur chaque ligne : article, qté, prix, remise, prix net, date de livraison)
    Je veux faire une saisie annexe (table temporaire) par laquelle, je ne saisi que le cod- article et les qtés par mois(de livraison).
    Puis je veux cliquer sur un bouton pour transférer cette table temporaire vers ma table des lignes du BC ( et lors de ce transfert, je dois "transformer" par déduction une saisie de qté dans un mois par la date du 01/mois/année)
    Enfin, cette table temporaire sera vidée.

    Merci pour votre intérêt

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Comme le dit User , ta conception est très mauvaise car :

    La demande du projet est : de ne pas saisir de date (pour gagner du temps de saisie) alors pourquoi il faudrait que j'en mette 1 dans cette table ?
    Tu peux tout à fait créer des enregistrements sans avoir à saisir des dates, il faut mettre un champ date dans ta table, et en valeur par défaut des propriétés de ce champ écrire :

    pour extraire des années il existe des fonctions VBA, un tuto à lire : Les Fonctions Date/Heure

    De plus, pourquoi faire une saisie annexe si ta table est bien conçu (comme l'exemple de User), tu auras toutes les données pour pouvoir les exploiter, et ce que tu veux au finale est une requête croisée dynamique.

    De plus ta table telle que tu la présente n'est pas évolutive, car il te faut une table par année, donc si tu veux une extraction sur plusieurs années, il faudra mixer les tables, et là galère galère.

    En résumant, ta conception de base est à revoir, il y a une partie Modélisation pour cela dans le forum Access.

    Philippe

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    En premier lieu, je tiens à vous remercier d'avoir lu et répondu.

    J'avoue rester sans comprendre (par rapport à mon besoin) mais je ne veux pas vous monopoliser sur mon sujet. Si je mets un champ DateLiv= date(), : si je saisi 1 fois l'article(c'est ce que je veux) - je dois saisir 3 qté (dans cet exemple: 10 pour juin, 20 pour décembre et 30 pour janvier),
    je ne comprends pas comment Access va traduire en :
    là il faut livrer le 1er juin/Année en cours et là il faut livrer le 1/12/année en cours et puis là, il faut livrer le 1er janvier de l'année suivante.
    ... Sauf si l'utilisateur tape la date (ce que je ne veux pas)
    Voici une idée du formulaire de saisie qui est attendu :


    J'ai lu et relu vos réponses mais mon cerveau "bloque".

    Merci tout de même !

    P.S. : pour les admins, je laisse ouvert le post ce jour au cas où mais je le clos ce soir si je ne décoince pas

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 638
    Points : 56 962
    Points
    56 962
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Je suis un peu étonné aussi de la réaction de mes camarades. Pourtant, au niveau modélisation je suis plutôt ch#@¤...

    Citation Envoyé par Philippe JOCHMANS
    …Cela est dut à une mauvaise conception
    Oui, mais…
    Citation Envoyé par tibofo
    Je veux faire une saisie annexe (table temporaire) par laquelle, je ne saisi que le cod- article et les qtés par mois(de livraison).
    Cette table cracra au niveau de la normalisation n’est que temporaire, uniquement là pour la saisie.

    Citation Envoyé par User
    Par exemple, pour commencer, une table du style :

    TblLivraison
    Article
    Qté
    DateLiv
    ...

    Ferait mieux l'affaire…,
    Oui mais…

    Citation Envoyé par tibofo
    J'ai un Bon de commande (saisie classique sur chaque ligne : article, qté, prix, remise, prix net, date de livraison)
    C’est bien ce que Tibofo a, une belle table bien propre…

    Citation Envoyé par tibofo
    Puis je veux cliquer sur un bouton pour transférer cette table temporaire vers ma table des lignes du BC ( et lors de ce transfert, je dois "transformer" par déduction une saisie de qté dans un mois par la date du 01/mois/année).
    Transférer les données saisies dans sa table cracra mais temporaire, dans son modèle normalisé avec une date de livraison de type Date/heure.

    Qu’y voyez-vous de répréhensible dans ce que souhaite faire Tibofo ?


    Pour tenter de répondre, il faut sans doute passer par la fonction DateSerial qui permet de reconstruire une date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(Year(Date()), Month(Date()),1)
    donnera à ce jour la date du 01/07/2010

    Par comparaison avec la date du jour (fonction Date()), tu devrais pouvoir attribuer l’année :
    Par exemple pour le mois de MARS :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(Year(Date()), 3 ,1)
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(Year(Date())+1, 3 ,1)

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci le dateserial m'a permis de faire d'autres recherches.

    J'ai récupéré la date système : extraction de l'année. Avec le dateserial, j'ai calculé la date de fin du mois (trouvé dans la FAQ)
    et avec le tout j'ai ajouté 1 an en cas de dépassement de la date du jour.

    Le tout se fait automatiquement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    datefindemois = DateSerial(Year(Date), Month(Date) + 1, 0) 'calcul de la date dudernir jour du mois
            If JANVIER <> 0 Then
                JOURMOIS = "01/01"
                DATELIVCADENCIER = JOURMOIS & "/" & ANNEEENCOURS
                ' si la date est inférieure au mois en cours, je force sur l'année suivante
                If DATELIVCADENCIER < datefindemois Then DATELIVCADENCIER = DateAdd("yyyy", 1, DATELIVCADENCIER)

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

Discussions similaires

  1. [Galerie] Script pour faire une galerie automatiquement
    Par gantec dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 27/01/2008, 02h05
  2. Réponses: 4
    Dernier message: 12/06/2007, 22h54
  3. Réponses: 1
    Dernier message: 13/12/2006, 09h04
  4. Réponses: 5
    Dernier message: 31/08/2006, 20h39
  5. Réponses: 9
    Dernier message: 07/08/2006, 17h06

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