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

Access Discussion :

Comparaison de deux champs dates comme critères DAvg [AC-2016]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Comparaison de deux champs dates comme critères DAvg
    Bonjour le forum,

    Je reviens vers vous car je suis (encore) coincé entre le VBA Access et les champs dates...

    Pour expliquer rapidement, je calcul dans un champ une moyenne de poids provenant d'une seconde table, cette moyenne dépendant de la table et du numéro d'animal,

    J'ai donc aboutit à cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        DoCmd.RunSQL "UPDATE Poids SET Poids_bascule = DAvg('[Event.Poids]', '[Event]', '[Event.Date_ev] = [Poids.Date_poids]') ;"
    Qui ne donne rien... Même en essayant d'ajouter des # ou en bougent les ' ...

    Notez que ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        DoCmd.RunSQL "UPDATE Poids SET Poids_bascule = DAvg('[Event.Poids]', '[Event]', '[Event.Date_ev] = #14/04/2017#') ;"
    Fonctionne, le problème vient de ma déclaration de champ je pense..

    Merci d'avance à ceux qui passeront du temps sur mon problème...

    Johan

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    je tenterai de mettre la date de la table à mettre à jour en dehors des quotes du critère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE Poids SET Poids_bascule = DAvg('[Event.Poids]', '[Event]', '[Event.Date_ev] = ' & [Poids.Date_poids]) ;"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour tee_grandbois,

    Tout d'abord merci de t'intéresser à mon problème,

    Je ne sais pas si j'avais essayé ta solution auparavant, mais la elle ne fonctionne pas...

    Les champs Poids_bascule restent vides, j'ai bien vérifier les noms des champs "Date_ev" et "Date_poids" et si il y avait des valeurs dans "Poids" de la Table "Event", malheureusement rien...

    Cdlt

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    En fait, je te conseille de passer par une table temporaire ou par VBA pour mettre à jour un champ à partir de plusieurs enregistrements car les fonctions de domaine ne sont pas la meilleure solution pour ce genre de mise à jour
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

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

    et comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.RunSQL "UPDATE Poids SET Poids_bascule = DAvg('Poids', 'Event', 'Date_ev =' &  FORMAT(Date_poids,'\#yyyy/m/d\#'))"

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    j'ai un doute sur la possibilité de mettre à jour à partir de variables dates, de plus, il faut quand même sélectionner l'enregistrement à mettre à jour : avec cette instruction toute la table sera mise à jour.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Après réflexion (et l'aide de galoir) je pense qu'une instruction comme celle-ci pourrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "UPDATE Poids SET Poids_bascule = DAvg('Poids', 'Event', 'Date_ev =' &  FORMAT(Date_poids,'\#yyyy/m/d\#')) where Date_poids in (select distinct Date_ev from Event);"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous les deux et un grand merci

    J'ai directement testé ta dernière proposition tee_grandbois, celle-ci fonctionne parfaitement !

    Cependant (je pensais y arriver seul ) je ne parviens pas à rajouter des critères.
    Il faudrait en fait comparer deux numéros à 6 chiffres (identifiant) et en plus (je ne le savais pas hier...) exclure de la moyenne les dates qui sont à +/- 10% de la moyenne de la date précédente

    Je me demande si il ne faut pas passer par du vba comme tu le disais tee_grandbois, je vais me pencher la dessus

    En tout cas merci pour votre aide !

    Johan

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Re bonjour,

    J'ai trouvé une solution, si ca intéresse quelqu'un la voici:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Set Db = CurrentDb
    Set rst = Db.OpenRecordset("Poids_inter", dbOpenTable)
    rst.MoveFirst
     
    While Not rst.EOF
     
        date_min = Format(DMin("Date_poids", "Poids_inter", "ID_Bande = " & numP), "dd/mm/yyyy")
        rstdate = Format(rst!Date_poids, "mm/dd/yyyy")
     
    'Recupère le poids manuel si c'est la 1ere date    
        If rst!Date_poids = date_min Then
            rst.Edit                                                                        'Passe en mode modification
            rst.Fields("Poids_traité").Value = rst!Poids_manuel
            rst.Update                                                                      'Met à Jour
     
    'cherche les valeurs 15% dessus et deoous la moyenne 
        Else:
            rst.MovePrevious
                poidsV = rst!Poids_traité
                poidslim_sup = poidsV * 1.15
                poidslim_inf = poidsV * 0.85
            rst.MoveNext
     
    'si pas de poids la veille on attribue un poids par defaut       
            If IsNull(poidslim_sup) Or IsNull(poidslim_inf) Then
     
                rst.Edit                                                                        'Passe en mode modification
                rst.Fields("Poids_traité").Value = poidsV + 0.4
                rst.Update
     
    'on remplace les virgules pa des points (pour le SQL)            
            Else:
                poidslim_sup = Replace(poidslim_sup, ",", ".")
                poidslim_inf = Replace(poidslim_inf, ",", ".")
     
    'requete SQL        
                moypoids = DAvg("[Poids_brut]", "Event", "[ID_Porc] = " & rst!ID_Porc _
                            & " AND [Date_ev] = #" & rstdate & "#" _
                            & " AND [Poids_brut] BETWEEN " & poidslim_sup & " AND " & poidslim_inf)
     
    'on calcul le poids                 
                    rst.Edit                                                                        'Passe en mode modification
                    rst.Fields("Poids_traité").Value = moypoids
                    rst.Update                                                                      'Met à Jour
                End If
            End If
        End If
     
    rst.MoveNext                                                                          'Passe au suivant
     
    Wend
     
    rst.Close                                                                           'Libération des objets
    Db.Close
    Set rst = Nothing
    Set Db = Nothing
    Voila si ca peut aider quelqu'un

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

Discussions similaires

  1. Comparaison de deux champs de Date
    Par ALTHON dans le forum Développement
    Réponses: 5
    Dernier message: 23/10/2016, 21h14
  2. [VB6] Date comme critère dans un datareport
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/04/2006, 13h45
  3. comparaison de 2 champs dates
    Par PAYASS59 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/03/2006, 17h27
  4. [SQL] un champ Timestamp ou deux champs Date et Heure?
    Par davmaster62 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/02/2006, 23h04
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

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