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 :

incrémenter une date par une période de temps


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut incrémenter une date par une période de temps
    bonjour et merci à tous pour vos précieux conseils,

    je vous explique mon probleme.

    j'ai une table "qualification" avec les champs :date-de_qualification (date initiale), frequence (en mois), date_de_fin. j'ai récupéré un code sur ce forum qui permet d'incrémenter la date de début en ajoutant la fréquence en mois jusqu'a la date de fin. le code ci-dessous est utilisé dans une requete "requete qualification date" qui fait appel à une table "lignes" qui comporte 50 lignes avec les valeurs suivantes: 1,2,3,4,....,50

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT qualification.id_qualification, qualification.date_qualification, qualification.frequence, qualification.commentaire, lignes.lignes, stpmp([lignes]) AS Date_de_relecture
    FROM lignes, equipement INNER JOIN qualification ON equipement.id_equipement = qualification.id_equipement
    ORDER BY lignes.lignes;
    code du module:

    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
    Function stpmp(lign As Long) As Date
    Dim base As DAO.Database
    Dim mesvaleurs As DAO.Recordset
    Dim sql As String
    Dim annif As Date
    Dim com As Date
    ' Initialisation de la date
    Dim cpte As Boolean
    cpte = True
    ' Requete
    Set base = CurrentDb
    sql = "SELECT id_qualification, date_qualification, frequence, lignes FROM [requete qualification date]" & _
    "WHERE (lignes <= " & lign & ")  ORDER BY lignes;"
    Set mesvaleurs = base.OpenRecordset(sql)
    While Not mesvaleurs.EOF
    ' prends Date de depart
    If cpte = True Then
    annif = mesvaleurs![date_qualification]
    cpte = False
    ' Sinon Ajoute fréquence
    Else
    annif = DateAdd("m", mesvaleurs![frequence], annif)
    End If
     
    com = DateAdd("m", mesvaleurs![frequence], annif)
     
    mesvaleurs.MoveNext
     
    Wend
    stpmp = com
    End Function
    si je met un seul enregistrement dans la table "qualification" le résultat de la requete est parfait. par contre si je met deux enregistrements, la requete me sort des abérations. j'aimerai savoir comment résoudre ce problème soit en changeant le code ou soit en envoyant le résultat de la requete dans ma table puis passer à un nouvelle enregistrement.
    cela fait deux jours que je trime et je suis à bout.
    merci à tous pour vos conseils

    PS le code vient de hugo 69, merci à lui

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Je n'ai pas compris

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    je vous explique, j'ai une table avec:

    id_qualification/date_qualifiquation/frequence/date_de_fin
    num auto / date /num /date

    si je met date_qualification = 01/02/2000
    frequence= 3 (mois)
    date_de_fin 01/01/2001
    je veux obtenir: 01/05/2000, 01/08/2000, 01/11/2000 comme résultat dans ma requete.
    il faut que le résultat soit visible et exploitable dans un formulaire qualification (sous formulaire repris sur la requete).

    l'objet du code est de donner les résultat suivant id_qualification.

    mon prob est que quand je génère un nouvelle enregistrement, il me donne des résultats abérant alors qu'avec un seul enregistrement j'obtients les bon.

    a+

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Ce ne serait pas plus facile de donner la fréquence et le nombre d'occurrences.

    Et ensuite faire un test pour être certains que les deux dates finales sont égales.

    Ce serait plus facile.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    si c'est plus facile je suis preneur, n'étant pas un programmteur mais plutot juste au niveau pour comprendre un code pré-écrit et le retranscrire pour mon application, si tu as un bout de code je me met à genoux car cela fait 2 jours que mon cerveau commence à réduire comme peau de chagrin.

    merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    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
     
    dim IntOcc as integer  'déclaration du nombre d'occurrence comme entier
    dim intFreq as integer
    dim strDates as string 'déclaration d'un variable qui contiendra les dates 
    'dans une chaîne
    dim dtQualif as date
    dtQualif = [date_qualification]
    strDates = ""   'attribution d'une valeur vide
    intFreq = [frequence] 'attribution de la valeur du contrôle fréquence
    intOcc = [occurences] 'attribution de la valeur occurences
     
    Do until intOcc = 0
    intOcc = intOcc -1
    dtQualif = Dateserial(year(dtQualif);Month(dtQualif)+intFreq;Day(dtQualif)
    strDates = strDates & "|" & Format(dtQualif;"dd/mm/yyyy")
    Loop
    La première partie concerne les déclarations de variables.
    La seconde, le passage de valeurs aux variables
    La dernière, le traitement.
    Le traitement se déroule comme suit :
    je diminue mon occurrence de 1 chaque fois qu'elle est traitée
    A chaque traitement, j'ajoute la fréquence au mois de l'année et je convertis en texte pour n'avoir qu'une seule chaîne "strDates" contenant toutes les dates.
    Si mon occurrence devient 0, la boucle s'arrête et le code continue.

    J'ai choisis de transformer les dates en texte, parce que je ne sais pas au départ combien d'occurrence je vais avoir.
    Mais avec une fonction split on peut les séparer.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Invité de passage
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2021
    Messages : 1
    Par défaut
    Bonjour j’ai testé le code
    Et j’ai une observation … lorsque la date_qualification est une date à plus de 29 jours…le mois de février ne s’affiche pas dans l’incrémentation..

    Quelqu’un a t-il une solution??

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

Discussions similaires

  1. [AC-2007] Comparer une date d'une table et une date saisie
    Par minooo dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/03/2019, 21h40
  2. Remplacer une date par une valeur
    Par sniper75 dans le forum SAS Base
    Réponses: 4
    Dernier message: 04/12/2012, 21h30
  3. incrémenter une date par une variable minute
    Par pchartier dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2012, 15h41
  4. [SQL]trier un sous formulaire par une date (par toujours connue)
    Par blin07 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/04/2007, 09h45
  5. Réponses: 7
    Dernier message: 22/11/2006, 09h14

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