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 :

Insertion automatique de dates comprises entre deux [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Insertion automatique de dates comprises entre deux
    Bonjour !

    Je souhaite que vous m'aidiez sur un de mes projets access.

    Voilà j'ai un formulaire où je dois saisir une date de fin et une date de début, sur ce même formulaire il y a un sous-form qui détail chaque date, ainsi je voudrais que toutes les dates comprises entre la date de début et la date de fin s'enregistrent dans ce sous formulaire (dépendant de la table détail_date).

    J'ai essayé un code vba avec une incrémentation mais sa marche pas :/, quelqu'un aurait-il une solution ?

    Merci beaucoup !

  2. #2
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    chuis pas sur d'avoir bien compris mais tu peu essayer un recordsource du sous formulaire du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    form.recordsource = "select * from détail_date where " & _
    "MesDates >=  Forms!MonFormPrincipal!DateMini and " & _
    "MesDates <=  Forms!MonFormPrincipal!DateMaxi and " & _
    "Order by.....;"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Merci @rkane, mais ca ne peut pas fonctionner

    tu as par exemple:
    date mini = 1/04/2011
    date maxi = 4/04/2011

    et je veux que dans le champ date de ma table détail_date s'inscrive :

    1/04/2011
    2/04/2011
    3/04/2011
    4/04/2011

    j'ai essayer de faire une boucle du style For i = date_mini to date_maxi

    mais ca foire :-/

  4. #4
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    pas compris le problème alors , désolé

    mais si tu nous mettais un fichier en test ce serait plus facile....

    Excuses aux modos pour les 2 messages plus haut, inutiles car mal rédigés et enregistrés par mauvaise manip

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

    Voici un petit exemple

    Une table (LaTable) et un champ (dteDate)

    Dans cet exemple j'utilise un recordset Création et manipulation des données avec DAO (ne pas oublier la référence DAO 3.6) et j'affecte les dates moi même.

    J'aurais donc dans la table :

    01/04/2011
    02/04/2011
    03/04/2011
    04/04/2011

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Public Sub AjoutDate()
     
        ' déclaration
        Dim dteDebut As Date
        Dim dteFin As Date
        Dim rst As DAO.Recordset
        Dim strSql As String
        Dim intNbrJour As Integer
        Dim i As Integer
     
        ' affectation
        strSql = "SELECT dteDate FROM LaTable;"
        dteDebut = "01/04/2011"
        dteFin = "04/04/2011"
     
        ' calcul du nombre de jour entre les deux dates
        intNbrJour = DateDiff("d", dteDebut, dteFin)
     
     
        ' incrémentation
        For i = 0 To intNbrJour
            Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
            rst.AddNew
            rst("dteDate").Value = DateAdd("d", i, dteDebut)
            rst.Update
        Next i
     
        rst.Close
        Set rst = Nothing
     
    End Sub
    Bien sûr le tout est adapter à ton cas, c'est le principe (un des principe, car il y en a d'autres).

    Philippe

  6. #6
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Il faut créer une fonction qui sur les evenements Change des 2 zônes de saisie remplissent une table qui est la source du sous-formulaire. Cette table sera vidée puis remplie des valeurs de Date mini à Date Maxi puis le sous-formulaire sera rafraichi.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Bonjour !

    Merci à tous pour votre aide, mais ca ne marche toujours pas.

    Philippe j'ai essayé votre code et ca bug au niveau de l'instruction sql...

    Voici mon fichier test que vous pouvez télécharger sur l'adresse suivante :
    http://www.2shared.com/file/UXSttHIu/TEST.html

    J'ai lié le code sur le bouton qui est sur le formulaire.

    Merci !

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

    Citation Envoyé par rere02 Voir le message
    Philippe j'ai essayé votre code et ca bug au niveau de l'instruction sql...
    Ce code fonctionne correctement, mais qu'est-ce qui bug ? Message d'erreur ?

    As-tu adapté ce code à ta situation, est-ce que l'on peut le voir ?

    Philippe

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Bonjour !

    Voici le code que j'ai adapté Philippe :

    La table : detail_date(N°, Date, Heures_travaillees)

    Les zones de texte du formulaire : dteDebut, dteFin, Heures (+ le bouton qui ordonne l'exécution du script)

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub Commande0_Click()
     
        ' déclaration
        Dim dteDebut As Date
        Dim dteFin As Date
        Dim rst As DAO.Recordset
        Dim strSql As String
        Dim intNbrJour As Integer
        Dim i As Integer
     
        ' affectation
        strSql = "SELECT Date FROM detail_date;"
        dteDebut = Me.date_debut
        dteFin = Me.date_fin
     
        ' calcul du nombre de jour entre les deux dates
        intNbrJour = DateDiff("d", dteDebut, dteFin)
     
     
        ' incrémentation
        For i = 0 To intNbrJour
            Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
            rst.AddNew
            rst("Date").Value = DateAdd("d", i, dteDebut)
            rst.Update
        Next i
     
        rst.Close
        Set rst = Nothing
     
    End Sub
    Et donc, quand je mets en route le script j'ai un message d'erreur d'exécution 94 - Utilisation incorrecte de Null

    Merci !

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

    Dans un premier temps change le nom de champ Date, c'est une fonction VB et cela passe très mal, c'est un mot réservé.

    Sur quel ligne ce code se produit ?
    Le champ N° est-il un numéro auto ?


    Philippe

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    Re !

    Dans un premier temps change le nom de champ Date
    Waaaaaaah ! C'était ca ! J'ai changé le nom du champ date et magie ca marche ! Mille mercis Philiipe !!

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

Discussions similaires

  1. [XL-2013] Calcul de dates comprises entre deux dates
    Par Goemanne dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2015, 13h10
  2. Date comprise entre deux autres dates
    Par Jean_guy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/05/2008, 14h00
  3. [PL/SQL] Date comprise entre deux mois
    Par geos25 dans le forum SQL
    Réponses: 1
    Dernier message: 15/01/2008, 11h19
  4. afficher les dates comprisent entre deux dates
    Par hugobob dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/10/2006, 11h53
  5. chercher toutes les entrées comprise entre deux dates
    Par kabool dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/03/2006, 10h12

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