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 :

Mise à jour table à partir sous-formulaire


Sujet :

Access

  1. #1
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut Mise à jour table à partir sous-formulaire
    Bonjour à tous,

    Je manque d'inspiration !!!

    Voilà depuis plusieurs jours déjà, je suis confronté à un problème que je n'arrive pas à solutionner.

    J'espère en envoyant ce post que vous allez pouvoir m'aider car j'avoue que je désespère.

    J'ai un formulaire principal nommé "Frm_PROSPECT" à partir duquel je met à jour une table nommée "Tbl_RegrOutlook".

    Ensuite dans un sous formulaire nommée "Sfrm_RegrOutlook" dont le recordsource (code ci-dessous) je filtre les lignes de ma table "Tbl_RegrOutook".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Form_Open(Cancel As Integer)
    Dim oRst As DAO.Recordset
    Dim strSQL As String
    'Crée la chaine SQL correspondant à la recherche du client
    strSQL = "SELECT Tbl_RegrOutlook.Nom_Client, Tbl_RegrOutlook.CodeClient, Tbl_RegrOutlook.Commercial, "
    strSQL = strSQL & " Tbl_RegrOutlook.Date , Tbl_RegrOutlook.Message, Tbl_RegrOutlook.Sujet, Tbl_RegrOutlook.DateMAJ, "
    strSQL = strSQL & "  Tbl_RegrOutlook.Maj_CpteRendu FROM Tbl_RegrOutlook "
    strSQL = strSQL & " WHERE (((Tbl_RegrOutlook.Maj_CpteRendu)=False));"
    'Ouvre le recordset
    Set oRst = CurrentDb.OpenRecordset(strSQL)
    Me.Form.RecordSource = strSQL
    End Sub
    ainsi dans mon formulaire principal "Frm_Prospects" je visualise les éléments filtrés de sous-formulaire "SFrm_RegrOutlook".

    Ensuite je souhaiterai mettre à jour une table nommée "Tbl_CpteRendu" en cochant une partie de éléments de ce sous formulaire.

    Le code fonctionne, sauf qu'il met à jour systématiquement toutes les lignes cochées (déjà cochées dans ma table et celle nouvellement cochées dans mon sous_formulaire) et moi je ne veux mettre à jour que les lignes nouvellement cochées dans mon sous-formulaire.

    Si vous avez une idée sur le problème je suis preneur, et si toutefois je ne suis pas assez clair dites le moi.

    Merci d'avance

    Daniel

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    Le code fonctionne, sauf qu'il met à jour systématiquement toutes les lignes cochées (déjà cochées dans ma table et celle nouvellement cochées dans mon sous_formulaire) et moi je ne veux mettre à jour que les lignes nouvellement cochées dans mon sous-formulaire.
    juste pour savoir comment tu as différencié les lignes nouvellement cochés des anciennes car toutes ont pour origine le même champs. donc si tu as pas un moyen de les différencier quand tu fait une mise à jours access le fait pour toutes les valeurs cochées

  3. #3
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    bonjour herendel,

    en fait j'utilise un champ type "Champ coché" nom Maj_CpteRendu.

    Merci d'avoir répondu.

    Daniel.

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    je sais pas si sa va vraiment t'aider mais pourquoi ne pas faire une table ou un recordset qui ne contient que les valeurs nouvellement cochés du sous formulaire et l'utilier pour la mise à jour...

    bon courage

  5. #5
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Merci Herendel,

    C'est justement ce que j'essaie de faire, mais je suis confronté à un nouveau problème.

    J'ai créé une table temporaire dans laquelle je stocke tous les lignes non afféctées (non cochées) et j'utilise cette table comme recordsource de mon sous formulaire.

    Malheureusement comme mes connaissances sont encore limitées en VB, lorsque je lance ma mise à jour, je met à jour toutes les lignes et non celles que je coche.

    Voici le code :

    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
    Private Sub MàJ_CpteRendu_Click()
    Dim Mabase As Database
    Dim frm As Form
    Dim Qrt As QueryDef
    Dim SqlUpdate As String, SqlUpdate1 As String
    Dim Msg, Style, Title, Reponse, MyString
    Dim Maj As String, Client As String
    Set Mabase = CurrentDb
    Set Qrt = Mabase.CreateQueryDef("", SqlUpdate)
    Set frm = Me.Sfrm_RegrOutlook.Form
    'A conserver (syntaxe qui permet d'atteindre le controle d'un sous formulaire)
    Maj = Forms![Frm_Prospects]![Sfrm_RegrOutlook].Form![Maj_CpteRendu]
    Client = Forms![Frm_Prospects]![Sfrm_RegrOutlook].Form![CodeClient]
    Msg = "Souhaitez-vous continuer?"    ' Définit le message.
    Style = vbYesNo + vbCritical + vbDefaultButton2    ' Définit les boutons.
    Title = "Mise à jour de la Table TBL_RegrOutlook "    ' Définit le titre.
    Reponse = MsgBox(Msg, Style, Title) ' Affiche le message.
        If Reponse = vbNo Then    ' L'utilisateur a choisi Non.
            MyString = "Non"    ' Effectue une action.
        Exit Sub
        Else
            MyString = "Oui"    ' L'utilisateur a choisi Oui. Effectue une action.'Date() AS [Date]
    SqlUpdate = "INSERT INTO Tbl_CpteRendu ( Code_Client, Commercial, [Date], CpteRendu )"
    SqlUpdate = SqlUpdate & "SELECT Tbl_TempRegrOutlook.CodeClient, Tbl_TempRegrOutlook.Commercial, "
    SqlUpdate = SqlUpdate & " Tbl_TempRegrOutlook.Date, Tbl_TempRegrOutlook.Message "
    SqlUpdate = SqlUpdate & " FROM Tbl_TempRegrOutlook WHERE ((Tbl_TempRegrOutlook.CodeClient) Is Not Null)"
     
     
    SqlUpdate1 = " UPDATE Tbl_RegrOutlook SET Tbl_RegrOutlook.CodeClient = " & "'" & Client & "'" & ","
    SqlUpdate1 = SqlUpdate1 & "Tbl_RegrOutlook.Maj_CpteRendu = " & "'" & Maj & "'" & ";"
     
    Debug.Print SqlUpdate1
            Mabase.Execute SqlUpdate, dbFailOnError
            Mabase.Execute SqlUpdate1, dbFailOnError
            MsgBox "Vous avez ajouté " & Mabase.RecordsAffected & " nouveaux Compte-Rendu."
     
    End If
    End Sub
    je ne sais pas comment faire pour "Balayer les lignes de mon sous-formulaire et ainsi mettre à jour avec le bon code client les lignes qui sont cochées.

    Merci encore

    Daniel

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 63
    Points
    63
    Par défaut
    re salut
    bon j'avoue là je suis naze donc j'ai pas tout suivit du code mais pense que tu te compliques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlUpdate = "INSERT INTO Tbl_CpteRendu ( Code_Client, Commercial, [Date], CpteRendu )"
    SqlUpdate = SqlUpdate & "SELECT Tbl_TempRegrOutlook.CodeClient, Tbl_TempRegrOutlook.Commercial, "
    SqlUpdate = SqlUpdate & " Tbl_TempRegrOutlook.Date, Tbl_TempRegrOutlook.Message "
    SqlUpdate = SqlUpdate & " FROM Tbl_TempRegrOutlook WHERE ((Tbl_TempRegrOutlook.CodeClient) Is Not Null)"
    là tu affectes les valeurs a ta table temporaire c'est ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     SqlUpdate1 = " UPDATE Tbl_RegrOutlook SET Tbl_RegrOutlook.CodeClient = " & "'" & Client & "'" & ","
    SqlUpdate1 = SqlUpdate1 & "Tbl_RegrOutlook.Maj_CpteRendu = " & "'" & Maj & "'" & ";"
    içi te faire la mise à jour de la table principale c'est sa


    donc pour quoi pas faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SqlUpdate1 = " UPDATE Tbl_RegrOutlook SET Tbl_RegrOutlook.CodeClient = " & "'" & Client & "'" & ","
    SqlUpdate1 = SqlUpdate1 & "Tbl_RegrOutlook.Maj_CpteRendu = " & "'" & Maj & "'"
    SqlUpdate1 = SqlUpdate1 & "WHERE Tbl_RegrOutlook.CodeClient IN (SELECT Tbl_TempRegrOutlook.CodeClient " 
    SqlUpdate1 = SqlUpdate1 & " FROM Tbl_CpteRendu)"
    ben en fait quand je dis que j'ai pas tout suivit c'est ça :Tbl_TempRegrOutlook.CodeClient = le code des client qui apparaissent dans le sous formulaire?
    Tbl_RegrOutlook.CodeClient = le code des clients qui apparaissent dans le formulaire?

  7. #7
    Membre habitué Avatar de Daniel MOREAU
    Inscrit en
    Décembre 2004
    Messages
    372
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 372
    Points : 142
    Points
    142
    Par défaut
    Merci Herendel pour ton aide,

    J'ai fini par régler mon problème.

    J'ai finalement opté pour la création d'un table temporaire et j'ai modifié le SQL de mise à jour de ma table principale.

    OUF !!!! je ne pensais ne pas y arriver.

    J'ai encore du mal a tout bien comprendre mais je fais des efforts.

    @+

    Daniel

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

Discussions similaires

  1. [AC-2007] Mise à jour d'un sous-formulaire à partir d'un sous-sous formulaire
    Par Daniel-Gérald dans le forum IHM
    Réponses: 3
    Dernier message: 19/05/2010, 18h27
  2. [AC-2003] Mise à jour d'un sous-formulaire à partir d'une zone de liste
    Par SIENWEST dans le forum IHM
    Réponses: 3
    Dernier message: 10/03/2010, 18h10
  3. annuler mise à jour table à partir formulaire
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/07/2007, 07h57
  4. Mise à jour table liée à à sous formulaire
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 15/04/2006, 17h26
  5. [formulaire] Mise à jour d'un sous formulaire
    Par virginie2 dans le forum IHM
    Réponses: 15
    Dernier message: 22/12/2005, 14h30

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