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 :

Mise à jour formulaire à partir d'une requête


Sujet :

VBA Access

  1. #1
    Membre du Club Avatar de Pwouaro
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut Mise à jour formulaire à partir d'une requête
    Bonjour,

    Essayons d'être clair ^^'

    J'ai un formulaire sur lequel figure une zone de liste (simple), contenant un ensemble de nom. Lorsque que l'on double click sur un nom, plusieurs autres champs du formulaire se mettent à jour et affichent différentes informations correspondant à la sélection.

    Jusque là tout marche très bien...
    Je coince sur un champ bien précis, j'aimerai que ce champ aille cherche sa valeur dans une requête existante, malheuresement cela ne fonctionne pas.

    Voilà où j'en suis :

    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
     
    Private Sub lstDroite_DblClick(Cancel As Integer)
        Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
        Dim sSQL As String
     
        Me.TXT_ID.Value = Me.lstDroite.Column(0)
        Me.TXT_NOM.Value = Me.lstDroite.Column(1)
        Me.TXT_PRENOM.Value = Me.lstDroite.Column(2)
        Me.TXT_COM.Value = Null
     
    ' c'est là que ça coince.
     
        sSQL = "SELECT EMP_ID, SommeDePOINT_HEURE, POINT_DATE From HEURES_POINTAGES WHERE EMP_ID = " & Me.TXT_ID & " AND POINT_DATE = " & Me.TXT_DATE & ";"
        DoCmd.RunSQL sSQL
     
    ' je suppose que je dois récupérer la valeur dans une variable, mais je ne vois ' pas comment faire.
     
    End Sub
    J'aimerai que le champ : Me.TXT_HEURESP affiche la somme des heures correspondant à la sélection. Auriez-vous des suggestions?

    Merci d'avance
    Poireau est un terme qui désigne plusieurs plantes du genre Allium dont Allium polyanthum, le poireau de vigne. Cependant, la plupart du temps, c'est du poireau cultivé, Allium porrum, dont il est question.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 172
    Points : 100
    Points
    100
    Par défaut
    essaie ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sSQL = "SELECT EMP_ID, SommeDePOINT_HEURE, POINT_DATE From HEURES_POINTAGES WHERE EMP_ID = '" & Me.TXT_ID & "'"
    sSQL= sSQL &" AND POINT_DATE = '" & Me.TXT_DATE & "'"
    normalement ça devrait marcher

  3. #3
    Membre du Club Avatar de Pwouaro
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta réponse.

    En fait, ce que je voudrais c'est récupérer le résultat dans une variable pour attribuer la valeur de la variable au champ texte qui va bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sSQL = "SELECT EMP_ID, SommeDePOINT_HEURE, POINT_DATE From HEURES_POINTAGES WHERE EMP_ID = '" & Me.TXT_ID & "'"
    sSQL = sSQL & " AND POINT_DATE = '" & Me.TXT_DATE & "'"
     
        res = DoCmd.Execute(sSQL)
        Me.TXT_HEURESP.Value = res
    Voilà ce que j'ai modifié, mais ça m'en dit pas plus.
    Auriez-vous une idée?
    Poireau est un terme qui désigne plusieurs plantes du genre Allium dont Allium polyanthum, le poireau de vigne. Cependant, la plupart du temps, c'est du poireau cultivé, Allium porrum, dont il est question.

  4. #4
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    il faut passé par un RecordSet

    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
    dim RS_Som_Heure As ADODB.RecordSet 'permet d'exécuter des requetes de type SELECT
    Dim sSQL As String 'Contient les requetes SQL
    Dim CON_Connex as ADODB.Connection 'Permet d'établr une liason avec la BD
     
    'on ouvre la connection à la base de données
    Set CON_Connex = CurrentProject.Connection
    'on initialise le RS
    Set RS_Som_Heure = new ADODB.RecordSet
    'on initialise la requette sql
    sSQL = "SELECT SommeDePOINT_HEURE From HEURES_POINTAGES WHERE EMP_ID = '" & Me.TXT_ID & "'"
    sSQL = sSQL & " AND POINT_DATE = '" & Me.TXT_DATE & "'"
     
    'on ouvre le RS et on execute la requette
    RS_Som_Heure.Open sSQL, CON_Connex, adOpenStatic,adLockOptimistic 
     
    'on vérifie qu'il y ai des enregistrements
    if(RS_Som_Heure.RecordCount > 0 ) then
      'on ce déplace sur le premier enregistrement
      RS_Som_Heure.MoveFirst
      'on affect le résultat au champ
      Me.TXT_HEURESP.Value = RS_Som_Heure("SommeDePOINT")
    else
       msgbox"Aucun somme trouvé pour cette date et cet ID"
    endif
     
    'on ferme le RS
    RS_Som_Heure.close
    Set RS_Som_Heure = nothing
    'on ferme la connection à la BD
    Set CON_Connex = nothing
    C'est un truc du genre qu'il faut faire je pense...en éspérant(???) t'aider!!
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  5. #5
    Membre du Club Avatar de Pwouaro
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Merci tribaleur, c'est exactement ce que je recherche.

    J'ai tout de même un probleme avec le format de date (à mon avis). Access me renvoit une erreur d'exécution :

    "Type de données incompatible dans l'expression du critère"

    Le deboggeur m'affiche cette ligne en jaune:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'on ouvre le RS et on execute la requette
    RS_Som_Heure.Open sSQL, CON_Connex, adOpenStatic, adLockOptimistic
    Poireau est un terme qui désigne plusieurs plantes du genre Allium dont Allium polyanthum, le poireau de vigne. Cependant, la plupart du temps, c'est du poireau cultivé, Allium porrum, dont il est question.

  6. #6
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Si ton champ "Point_Date" est de type Date/heure il faut entouré ta valeur par des # :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POINT_DATE = #" & Me.TXT_DATE & "#"
    Tu peu même éventuellement formater ta valeur
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    POINT_DATE = #" & Format(Me.TXT_DATE, "mm/dd/yyyy") & "#"
    =>/!\ J'ai mis au format mois/jour/année car dans les requetes SQL il inverse les mois et les jours sinon. Cependant ça te renverra bien les date en format français. Ex Si tu à TXT_Date = "01/10/2008", ça prendra les dates "01/10/2008" dans la BD. Si tu met au format "dd/mm/yyyy" avec la même valeur pour TXT_date ça prendra les date "10/01/2008" dans la BD.
    J'ai pas bien compris pourquoi ça fait ça donc je pourrai pas t'expliquer.

    P.S : la ligne jaune est celle du RS car c'est un problème d'éxécution de la requete donc comme c'est le RS qui éxécute les instruction SQL c'est lui qui génère une erreur (enfin je l'ai toujours interprété comme ça )
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  7. #7
    Membre du Club Avatar de Pwouaro
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Le message d'erreur à changé :

    Aucune valeur donnée pour un ou plusieurs paramètre requis.

    J'ai ajouté deux msgbox pour voir si le code renvoie les bonnes valeurs et c'est le cas.

    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
        'on ouvre la connection à la base de données
            Set CON_Connex = CurrentProject.Connection
        'on initialise le RS
            Set RS_Som_Heure = New ADODB.Recordset
        'on initialise la requette sql
            sSQL = "SELECT EMP_ID.HEURES_POINTAGES, SommeDePOINT_HEURE.HEURES_POINTAGES, POINT_DATE.HEURES_POINTAGES From HEURES_POINTAGES WHERE EMP_ID.HEURES_POINTAGES = '" & Me.TXT_ID & "'"
            sSQL = sSQL & " AND POINT_DATE.HEURES_POINTAGES = #" & Me.TXT_DATE & "#;"
        MsgBox Me.TXT_DATE.Value
        MsgBox Me.TXT_ID.Value
        'on ouvre le RS et on execute la requette
            RS_Som_Heure.Open sSQL, CON_Connex, adOpenStatic, adLockOptimistic
     
        'on vérifie qu'il y ai des enregistrements
            If (RS_Som_Heure.RecordCount > 0) Then
        'on ce déplace sur le premier enregistrement
             RS_Som_Heure.MoveFirst
        'on affect le résultat au champ
                Me.TXT_HEURESP.Value = RS_Som_Heure("SommeDePOINT_HEURE")
            Else
                Me.TXT_HEURESP.Value = "0"
            End If
    Poireau est un terme qui désigne plusieurs plantes du genre Allium dont Allium polyanthum, le poireau de vigne. Cependant, la plupart du temps, c'est du poireau cultivé, Allium porrum, dont il est question.

  8. #8
    Membre actif Avatar de tribaleur
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 401
    Points : 237
    Points
    237
    Par défaut
    Essaie d'afficher ta requete pour vérifier si la syntaxe final est bonne.

    Au pire tu essaie une requette en mettant manuellement des valeur à la place de tes champs texte pour voir où ça bug.

    P.S : pour mettre au format 23h59 le masque de saisi est "Hh:Nn".
    Rien n'est rien!!! ... Tout est quelque chose!!!

    Petits liens utiles :
    -Chaine de connexion : http://www.connectionstrings.com/
    -ADO et ADO.net : Tuto ADO et ADO.net

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Bonjour,

    je ne sais pas si tu as copié collé le code, mais je serais toi je mettrait un .Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    sSQL = "SELECT EMP_ID.HEURES_POINTAGES, SommeDePOINT_HEURE.HEURES_POINTAGES, POINT_DATE.HEURES_POINTAGES From HEURES_POINTAGES WHERE EMP_ID.HEURES_POINTAGES = '" & Me.TXT_ID & "'"
            sSQL = sSQL & " AND POINT_DATE.HEURES_POINTAGES = #" & Me.TXT_DATE & "#;"
        MsgBox Me.TXT_DATE.Value
        MsgBox Me.TXT_ID.Value
    Ensuite, je metrait un CDate(Format(TextBox.Value), "DD/MM/YYYY"))

    A+

  10. #10
    Membre du Club Avatar de Pwouaro
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Points : 57
    Points
    57
    Par défaut
    Youpi ça marche

    Essaie d'afficher ta requete pour vérifier si la syntaxe final est bonne.

    Au pire tu essaie une requette en mettant manuellement des valeur à la place de tes champs texte pour voir où ça bug.

    P.S : pour mettre au format 23h59 le masque de saisi est "Hh:Nn".
    J'ai changé de requête, je l'ai créé avec l'assistant, puis copié/collé dans l'éditeur de code. Ca tourne bien maintenant.

    Je vous met le code final quand même, ainsi qu'un petit tag résolu.

    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
    Private Sub lstDroite_DblClick(Cancel As Integer)
        Dim RS_Som_Heure As ADODB.Recordset 'permet d'exécuter des requetes de type SELECT
        Dim sSQL As String 'Contient les requetes SQL
        Dim CON_Connex As ADODB.Connection 'Permet d'établr une liason avec la BD
     
        Me.TXT_ID.Value = Me.lstDroite.Column(0)
        Me.TXT_NOM.Value = Me.lstDroite.Column(1)
        Me.TXT_PRENOM.Value = Me.lstDroite.Column(2)
        Me.TXT_COM.Value = Null
     
     
        'on ouvre la connection à la base de données
            Set CON_Connex = CurrentProject.Connection
        'on initialise le RS
            Set RS_Som_Heure = New ADODB.Recordset
        'on initialise la requette sql
            sSQL = "SELECT EMPLOYE.EMP_ID, Sum(POINTAGE.POINT_HEURE) AS SommeDePOINT_HEURE, POINTAGE.POINT_DATE FROM EMPLOYE INNER JOIN POINTAGE ON EMPLOYE.EMP_ID = POINTAGE.EMP_ID GROUP BY EMPLOYE.EMP_ID, POINTAGE.POINT_DATE HAVING (((EMPLOYE.EMP_ID)= " & Me.TXT_ID & ") AND ((POINTAGE.POINT_DATE)=#" & Me.TXT_DATE & "#));"
     
        MsgBox Me.TXT_DATE.Value
        MsgBox Me.TXT_ID.Value
        'on ouvre le RS et on execute la requette
        RS_Som_Heure.Open sSQL, CON_Connex, adOpenStatic, adLockOptimistic
     
        'on vérifie qu'il y ai des enregistrements
            If (RS_Som_Heure.RecordCount > 0) Then
        'on ce déplace sur le premier enregistrement
             RS_Som_Heure.MoveFirst
        'on affect le résultat au champ
                Me.TXT_HEURESP.Value = RS_Som_Heure("SommeDePOINT_HEURE")
            Else
                Me.TXT_HEURESP.Value = "0"
            End If
     
        'on ferme le RS
            RS_Som_Heure.Close
            Set RS_Som_Heure = Nothing
        'on ferme la connection à la BD
            Set CON_Connex = Nothing
     
    End Sub
    @mathieu

    En effet les msgbox fonctionnent mieux avec ".Value" ^^'

    Merci à tous!
    Poireau est un terme qui désigne plusieurs plantes du genre Allium dont Allium polyanthum, le poireau de vigne. Cependant, la plupart du temps, c'est du poireau cultivé, Allium porrum, dont il est question.

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

Discussions similaires

  1. mise à jour table à partir d'une autre table
    Par k_boy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 13/09/2010, 21h37
  2. [AC-2003] Filter un formulaire à partir d'une requête
    Par paidge dans le forum VBA Access
    Réponses: 9
    Dernier message: 23/08/2010, 19h11
  3. Ouvrir un formulaire à partir d'une requête
    Par curt dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 19/11/2007, 13h15
  4. ouverture de formulaire à partir d'une requéte
    Par gaetanef dans le forum Access
    Réponses: 5
    Dernier message: 21/11/2005, 15h51
  5. Réponses: 4
    Dernier message: 16/09/2005, 14h49

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