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 :

[Access2003] Afficher une date incrémentée d'une durée variable


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut [Access2003] Afficher une date incrémentée d'une durée variable
    Bonjour,

    Depuis quelques jours, j'essaye d'intégrer "une formule" à certains champs de ma base de données. J'ai cherché sur de nombreux forums mais aucune réponse que j'ai pu trouver ne convient à ce que je souhaite obtenir.
    Je viens donc m'adresser à vous, emplie d'espérance

    Dans ma base de données, j'ai trois champs : "Date d'édition", "Délai" et "Date butoir". J'ai défini le champ "Délai" avec différentes valeurs (8 jours, 15 jours, 30 jours...).
    Après avoir saisi la date d'édition et selectionné le délai, je souhaiterai que le champ "date butoir" affiche la date d'édition incrémenté du délai selectionné.

    J'ai vu que la fonction DateAdd pourrait m'être utile mais comme la valeur à incrémenter n'est pas unique, je ne trouve pas comment lier la valeur de délai avec la date.

    Est-ce que quelqu'un aurait une idée pour résoudre mon problème, s'il vous plaît ?

    En espérant avoir été claire dans mes explications . Merci de votre attention.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    bonjour,
    tu peux avoir une requête du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Matable set [Date butoir] = ADDDATE([Date d'édition],INTERVAL [Délai] DAY)
    à tester bien sûr, selon les types de champs.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Merci pour ton aide jpcheck !
    N'arrivant pas à mettre en oeuvre ce que tu m'as proposé, jpcheck, j'ai bidouillé autre chose et je viens de découvrir une partie de la réponse à mon interrogation...
    En fait, sur mon formulaire de saisie en mode création, j'ai mis une formule toute simple dans la cellule Date butoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[Date d'édition]+[Délai]
    Cela affiche le résultat attendu dans la cellule "Date butoir" et corrige mon problème sur le formulaire mais pas dans les tables.
    Je ne comprends pas pourquoi cette donnée obtenue sur le formulaire ne s'insère pas automatiquement dans ma table

    Une idée ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    pour la requête, ca donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Matable set [Date butoir] = =[Date d'édition]+[Délai]
    autre chose : évite tant que possible les caractères qui peuvent poser problème dans les noms : pas d'accent, ni de cédille, et pas d'apostrophe dans les noms...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    J'ai supprimé les caractères spéciaux des noms de champ, mais je n'arrive toujours pas à intégrer le code.

    Je ne comprends pas le système d'insertion par requête
    N'y a-t-il pas un moyen plus simple d'intégrer cette simple formule dans la table ?
    >_<

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    calmos
    quel est ton code actuel ? quelle erreur t'empeche de réussir ta requte ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Quand je tape la formule que tu m'avais donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_Compta set DateButoir = ADDDATE([DateEdition],INTERVAL [Delai] DAY)
    dans la requête, il me dit :
    "La syntaxe de l'expression entrée n'est pas correct. Vous avez peut-être entré un opérande sans opérateur"
    Et idem avec la suivante :/

    En revanche, j'obtiens un résultat en ajoutant le basic : [DateEdition]+[Delai]
    Mais ensuite, je ne sais pas comment insérer ce résultat automatiquement dans ma table (et mon formulaire)

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Matable set [Datebutoir] = [DateEdition]+[Delai]
    ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Même chose

    Je dois oublier quelque chose ou mettre au mauvais endroit, c'est pas possible autrement ! XD

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

    Au lieu de ADDDATE, utilises la fonction DateAdd (regardes dans l'aide pour les paramètres)

    Et il faut l'intégrer par concaténation, voici un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Matable set [Datebutoir]=#" & DateAdd(".....
    Starec

  11. #11
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    J'avais déjà essayé avec DateAdd mais il ne veut pas reconnaître mon indication de champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd ("d", [Delai], [DateEdition])
    Et là, il me dit que la première virgule n'est pas valide.

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

    Je viens de faire un test.

    1 - Création d'une table :
    LaTable
    dteEdition (au format date)
    intDelai (au format numérique)
    dteButoir (au format date)

    2 - J'ai crée une requête avec le QBE, le code SQL me donne la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE latable SET latable.dteButoir = DateAdd("d",latable!intDelai,latable!dteEdition);
    et cela fonctionne.

    Starec

  13. #13
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Bonjour !

    Bon, jusqu'à présent, j'avais bouletté grave !
    Je n'avais pas mis la formule dans une requête SQL
    J'ai réparé mon erreur et testé les différents codes que vous m'avez proposés, ils fonctionnent bien.
    Pour le moment, j'utilise ton code, Starec.

    Pour continuer à faire ma chieuse, je souhaiterai éviter d'avoir à utiliser la requête pour que la date butoir s'affiche. (Ce n'est pas moi qui utiliserai cette base à long terme et je voudrai simplifier au maximum la saisie des données). C'est-à-dire que la requête s'exécute au moment ou le délai est selectionné dans le menu déroulant, générant automatiquement la date butoir et sans qu'il me réécrivent tous les enregistrements précédent de la table.
    Est-ce que c'est possible ou vis-je dans un doux rêve ?

    Merci pour votre aide précieuse à vous deux ^^

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 286
    Points
    34 286
    Par défaut
    bonjour,
    dans la requête d'insertion, tu peux directement mettre le calcul il me semble.
    si on part de l'exemple de starec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO latable (dteEdition,intDelai,dteButoir) VALUES ('#' & FORMAT(Formulaire.dteEdition,'MM/dd/yyyy') & '#', Formulaire.intDelai, DateAdd("d",Formulaire.intDelai,Formulaire.dteEdition);
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  15. #15
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 155
    Points : 196
    Points
    196
    Par défaut
    Bonjour,

    Tout ceci se passe dans un formulaire de saisie basé sur la table en question, n'est-ce pas ? Et ce formulaire comprend notamment 3 champs DateEdition, Delai et DateButoire ? Alors fi des requêtes. Utilise plutôt l'événement Après Mise à Jour (AfterUpdate) du champ Delai. Le code associé à cet événement peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsNull(Me.Delai) then
       Me.DateButoire = Me.DateEdition
    Else
       Me.DateButoire = Me.DateEdition + Me.Delai
    End If
    Naturellement, il faut remplacer mes noms de champs en italique par les tiens.

  16. #16
    Membre régulier Avatar de Nephyline
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Points : 96
    Points
    96
    Par défaut
    Merci jpcheck, j'ai testé le code dans la requête mais il me trouvait encore une erreur de syntaxe dans l'expression DateAdd
    Je te remercie grandement pour le temps que tu as passé sur mon problème et pour ta patience !

    Merci Alain36, tu m'enlèves une fière chandelle du pied
    En effet, c'était exactement ce que je souhaitais et le code fonctionne aux petits oignons ! La solution était effectivement simple ^^"

    Merci à tous pour votre aide !

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

Discussions similaires

  1. [MySQL] Remplacer une date incrémentée dans une base de donnée [mysql]
    Par Mousshaker dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 16/12/2014, 14h27
  2. [XL-2007] Afficher des dates MAXI suivant une date butoir ?
    Par Philippe608 dans le forum Excel
    Réponses: 0
    Dernier message: 16/06/2011, 16h56
  3. [SQL] Ajouter une durée à une date et obtenir une date valide
    Par bigltnt dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/06/2007, 14h55
  4. [Débutant] Calcul d'une date à partir d'une date de départ et d'une durée
    Par Marmotton76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2007, 10h39
  5. Réponses: 2
    Dernier message: 21/03/2007, 16h06

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