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

IHM Discussion :

Actualisation progressive d'un champ d'une table basé sur un formulaire [AC-2010]


Sujet :

IHM

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur agronome
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Actualisation progressive d'un champ d'une table basé sur un formulaire
    Bonjour à tous,

    Je m'adresse à vous car je débute sur Access et je bloque fortement sur un dernier point de mon application.

    L'objectif est de mener une enquête auprès d'un panel d'individus (Table = ListeIndividus). J'ai pour cela fait un formulaire (Questionnaire) permettant de répertorier les réponses dans une table (Réponses) qui fera office de tableau de sortie.

    J'ai ajouté à ListeIndividus une colonne indiquant pour chaque individu s'il a accepté de répondre au questionnaire (Accepte de répondre : Oui, Non, Non contacté), la valeur de base étant "Non contacté". J'explique ma démarche actuelle :
    - Remplissage du questionnaire pour un individu
    - Enregistrement dans la table Réponses contenant un champ "Accepte de répondre"
    - Actualisation du champ "Accepte de répondre" de la table ListeIndividus à partir de la valeur associée à cet individu dans la table Réponses

    J'ai essayé plusieurs options (peut-être pas correctement) :
    - Imposer une valeur conditionnelle au champ directement dans la table ListeIndividus
    - Créer une requête (en passant par l'Assistant...)
    - Lier la liste déroulante aux deux tables
    - Tâtonner en vain dans le VBA (ExecuterCode sur clic quand modification d'un enregistrement)

    Si vous n'avez ne serait-ce qu'une piste je suis preneuse car je sèche complètement !

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    En mettant sur l'évènement AprèsMise à Jour de ton champ Accepte de répondre de ton formulaire "Réponses" le code suivant :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub ARepondu_AfterUpdate()
    Dim strsql As String
    If ARepondu Then
        strsql = "UPDATE listeindividu SET listeindividu.REPONSE = 'Accepte de répondre'" _
                & " WHERE IDIndividu =" & Me.idIndividu_FK
        CurrentDb.Execute strsql, dbFailOnError
    Else
        strsql = "UPDATE listeindividu SET listeindividu.REPONSE = 'Non'" _
                & " WHERE IDIndividu =" & Me.idIndividu_FK
        CurrentDb.Execute strsql, dbFailOnError
    End If
    End Sub

    Cela devrait le faire. Je suppose ici que ton champ est un booléen.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur agronome
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour ton aide. Mon champ n'étant pas booléen, j'ai arrangé le code de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Enregistrer_Click()
     
        If AccepteRépondre <> 0 Then
            strsql = "UPDATE [Liste agriculteurs] SET [Liste agriculteurs].[Accepte de répondre] =" & Me.AccepteRépondre _
                & " WHERE [Liste agriculteurs].[Account_ID] =" & Me.Account_ID
            DoCmd.RunSQL strsql, dbFailOnError
        End If
     
    End Sub
    Cependant, lorsque je clique sur Enregistrer, Access me demande d'entrer les valeurs de "Oui" (correspondant à la valeur de Me.AccepteRépondre) et de "ID000" (= Me.Account_ID). Je lui répète donc Oui et ID000 et il met bien à jour la liste, mais d'où vient mon erreur ?

    -----------------------------------------------------------------------------------------------------------

    J'aimerais aussi incorporer au code la macro d'ajout d'enregistrement :

    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
    Function Macro1()
    On Error GoTo Macro1_Err
     
        With CodeContextObject
            On Error Resume Next
            DoCmd.RunCommand acCmdSaveRecord
            If (.MacroError <> 0) Then
                Beep
                MsgBox "[MacroError].[Description]", vbOKOnly, ""
            End If
        End With
     
     
    Macro1_Exit:
        Exit Function
     
    Macro1_Err:
        MsgBox Error$
        Resume Macro1_Exit
     
    End Function
    Je ne comprends pas comment l'appeler dans la procédure car je n'ai pas de variable de sortie ; je crois savoir qu'il en faut une lorsque c'est une fonction ?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,


    1-D'après ce que je vois, tu n'as un numéro d'ID que lorsque tu as lancé ta macro1 ?
    Et c'est après cette macro que tu peux mettre à jour la valeur d'AccepteRepondre dans la table individus ?
    La solution serait de lancer la macro1 avant de lancer l'enregistrement (tu auras de ce fait un ID)

    2- Pour ton premier souci sur le fait qu'il te demande une valeur pour Me.AccepteRépondre, tu fais une comparaison de AccepteRépondre à 0 ? Qu'est ce que tu as comme type du champ AccepteRépondre dans ton formulaire. Si c'est du texte, il faut le comparer à Null et "" je pense.

    Comme modification, je verrai :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Enregistrer_Click()
    call macro1
        If Not IsNull(Me.AccepteRépondre) And Me.AccepteRépondre<>"" Then
            strsql = "UPDATE [Liste agriculteurs] SET [Liste agriculteurs].[Accepte de répondre] =" & Me.AccepteRépondre _
                & " WHERE [Liste agriculteurs].[Account_ID] =" & Me.Account_ID
            DoCmd.RunSQL strsql, dbFailOnError
        End If
     
    End Sub

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur agronome
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    1. Non, le numéro d'ID enregistré par la Macro1 est destiné à la table Réponses (clé étrangère liée à la clé primaire Account_ID de la table Liste). La procédure pioche l'ID dans le formulaire donc je ne pense pas que ce soit un soucis ; j'y tiens car je veux que dès l'utilisateur modifie un enregistrement l'info soit reportée (sauvegarde et suppression notamment)

    2. Effectivement, je pensais naïvement que 0 correspondait à Null
    Cependant, j'ai toujours le même soucis de message. Voilà ce qu'Access me demande :

    Nom : Capture.PNG
Affichages : 182
Taille : 8,5 Ko

    Je pense que le soucis vient de l'expression :
    SET [Liste agriculteurs].[Accepte de répondre] =" & Me.AccepteRépondre
    De même pour Account_ID mais je n'ai pas suffisamment de "vocabulaire" VBA pour savoir d'où exactement...

    Edit : A moins que "Me." corresponde à l'enregistrement situé dans la table à laquelle le formulaire est lié (Réponses) ? A ce moment-là il faut effectivement placer la Macro avant et j'ai le message [MacroError].[Description] qui s'affiche. Je l'ai créée à partir de la macro automatique du bouton car je n'avais pas le code en tête

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Je vois.
    En fait tu envoies le Oui dans Me.AccepteRépondre comme valeur de mise à jour. Vu que c'est du texte, il faut le mettre entre ''
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            strsql = "UPDATE [Liste agriculteurs] SET [Liste agriculteurs].[Accepte de répondre] ='" & Me.AccepteRépondre & "'" _
                & " WHERE [Liste agriculteurs].[Account_ID] =" & Me.Account_ID
    Cordialement,

    EDIT :
    Pour
    1. Non, le numéro d'ID enregistré par la Macro1 est destiné à la table Réponses (clé étrangère liée à la clé primaire Account_ID de la table Liste). La procédure pioche l'ID dans le formulaire donc je ne pense pas que ce soit un soucis ; j'y tiens car je veux que dès l'utilisateur modifie un enregistrement l'info soit reportée (sauvegarde et suppression notamment)
    Comment veux tu faire référence à l'ID de la table listeindividus pour la mise à jour si tu n'as pas encore l'ID dans la table de réponse ??
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Candidat au Club
    Femme Profil pro
    Ingénieur agronome
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai testé avec les quote et ça fonctionne sans même avoir ajouté l'enregistrement à la table Résultats donc je suppose que le code va directement cherche l'info dans l'étiquette de réponse du formulaire ?

    Pour la macro, je cherchais à générer en plus de la MAJ la sauvegarde de mon enregistrement. En fouillant un peu mieux sur le net je suis tombée sur :
    DoCmd.RunCommand acCmdSaveRecord
    Mais aucun résultat (et aucun message d'erreur)

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Donc, ça marche OU il y a encore un problème ?

    Le code que tu as trouvé sur le net se trouve à la ligne 6 de ta macro1.

    Il me faudrait plus d'informations (si possible ta base) pour donner des conseils à ce niveau si t'as un problème parce que j'ai un peu perdu le nord dans ce que tu dis.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  9. #9
    Candidat au Club
    Femme Profil pro
    Ingénieur agronome
    Inscrit en
    Mai 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je n'arrivais pas a intégrer la sauvegarde de l'enregistrement au code mais le problème initial est réglé.

    Merci pour ton aide ! L'appli est nickel

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Coches le bouton "RESOLU" en bas à gauche à la fin de messages pour mettre le sujet en RESOLU.

    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/08/2010, 09h32
  2. Réponses: 2
    Dernier message: 11/06/2010, 14h16
  3. [AC-2007] Remplir champs d'une table à partir d'un formulaire
    Par Zaza91280 dans le forum IHM
    Réponses: 9
    Dernier message: 07/05/2010, 13h52
  4. Ajouter des champs d'une table différente dans un formulaire
    Par Bouom771 dans le forum Modélisation
    Réponses: 5
    Dernier message: 10/01/2008, 20h03
  5. Réponses: 11
    Dernier message: 17/03/2006, 13h20

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