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 :

Mise à jour sous formulaire par changt zone liste


Sujet :

IHM

  1. #1
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut Mise à jour sous formulaire par changt zone liste
    Bonjour,


    J'ai un formulaire, contenant un sous formulaire.

    Je veux mettre à jour mon sous formulaire avec une zone de liste.

    J'ai un code sql qui me permet de créé la requète en fonction du code sur ma zone de liste.
    Cela fonctionne :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub SélectionClientCode_AfterUpdate()
     
                    Me.NomParCode = DLookup("NomEntreprise", "Clients", "[Code Client]=" & Me.SélectionClientCode)
              'zone de texte        champ requête    nom requête            nom champ requête comparé     nom champ liste
     
     Dim SQL As String
     SQL = "SELECT DISTINCTROW [Observations client].[Code Client], Clients.NomEntreprise, [Observations client].[Date observation], [Observations client].Observation, [Observations client].N° "
    SQL = SQL & "FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client] "
    SQL = SQL & "WHERE ((([Observations client].[Code Client])=" & Me.SélectionClientCode & ")) "               '& Me.Liste0 & ")) "
    SQL = SQL & "ORDER BY [Observations client].[Code Client], [Observations client].[Date observation]; "
    DoCmd.DeleteObject acQuery, "Requête Modif observations"
    CurrentDb.CreateQueryDef "Requête Modif observations", SQL

    Le problème est que je n'arrive pas à actualiser mon formulaire.

    Lorsque je le lance il m'affiche dans le sous formulaire les infos du dernier code choisi avant la fermeture précédente du formulaire.
    Par contre si je change de code il ne me l'actualise pas (ma requête est bien modifiée).

    Quelqu'un a une solution ?

    Merci d'avance

    Marcopololo

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,


    Tu as essayé d'ajouter un requery de ton sous formulaire?


    Y a sans doute plus simple mais ton code devrait marcher en y ajoutant quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me!NomDuControleSousFormulaire.Form.requery
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Modif observations]![Requête modif client sous-formulaire].Form.Requery
    sur modification de la zone de liste. Mais cela ne fonctionne pas.
    Je crois que ma difficulté est de trouvé l'événement à utiliser.


    Je viens de tester ce code aussi mais pareil.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me[Requête modif client sous-formulaire].form.requery


    Marcopololo

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Tu as mis le requery à la suite de ta recréation de requête?
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Vu que tu recrée la requête servant de source à ton SF, cela ne m'étonne pas trop qu'un requery ne résolve pas le problème....

    Tu pourrais peut être résoudre ton problème en redéclarant explicitement la sour ce du SF.

    QQ chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Me![Requête modif client sous-formulaire].form
       .RecordSource ="Requête Modif observations"
       .requery
    End With

    Plus simplement, tu pourrais sans doute simplifier ta structure en faisant référence à ta liste déroulante directement dans la requête "Requête Modif observations". Il ne te restera alors qu'à faire un requery.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCTROW [Observations client].[Code Client], Clients.NomEntreprise, [Observations client].[Date observation], [Observations client].Observation, [Observations client].N° 
    FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client] 
    WHERE ((([Observations client].[Code Client])=Forms![Modif observations].SélectionClientCode))
    ORDER BY [Observations client].[Code Client], [Observations client].[Date observation];
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  6. #6
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Voici le code mis sur after_update de la zone de liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim SQL As String
     SQL = "SELECT DISTINCTROW [Observations client].[Code Client], Clients.NomEntreprise, [Observations client].[Date observation], [Observations client].Observation, [Observations client].N° "
    SQL = SQL & "FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client] "
    SQL = SQL & "WHERE ((([Observations client].[Code Client])=" & Me.SélectionClientCode & ")) "               '& Me.Liste0 & ")) "
    SQL = SQL & "ORDER BY [Observations client].[Code Client], [Observations client].[Date observation]; "
    DoCmd.DeleteObject acQuery, "Requête Modif observations"
    CurrentDb.CreateQueryDef "Requête Modif observations", SQL
        
        Me.Requête_Modif_Clients_sous_formulaire.Form.Requery
    Marcopololo

  7. #7
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Marcopololo
    ...
    Forms![Modif observations]![Requête modif client sous-formulaire].Form.Requery
    Citation Envoyé par Marcopololo Voir le message
    ...

    Me.Requête_Modif_Clients_sous_formulaire.Form.Requery[/CODE]

    Marcopololo

    Quel est le nom exact du controle contenant le sous formulaire?
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  8. #8
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Le nom exact est : Requête Modif Clients sous-formulaire

    Marcopololo

  9. #9
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Marcopololo Voir le message
    Le nom exact est : Requête Modif Clients sous-formulaire

    Marcopololo
    Dans ce cas je crois que tu devrais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me![Requête Modif Clients sous-formulaire].Form.Requery
    En passant, tu comprends pourquoi, comme beaucoup d'autres, je ne mets pas d'espace dans les noms d'objets et j'évite les noms à rallonge....
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  10. #10
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    Merci MOUT34,

    Le code fonctionne pour la mise à jour, mais mon code étant plus complexe avec des défilements de mon sous formulaire dans le sous formulaire, je vais m'y prendre autrement.
    J'ai actuellement un formulaire qui fonctionne sur le même schéma avec 2 onglets.
    Je vais y rajouter un onglet et modifier mon code SQL.

    Code SQL : 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 SQL As String
     
     SQL = "SELECT DISTINCTROW Clients.[Code Client], Clients.NomEntreprise, Clients.Adresse, Clients.Ville, Clients.Département, Clients.CodePostal, Clients.Contact, Clients.N°Tél, Clients.N°Fax, Clients.Catégorie, Clients.Fonction, Clients.[Règle R4], Clients.[Date dernière visite], Clients.[Vacation fixe], Clients.[Prime pour extincteur], Clients.[Prime pour extincteur Auxiliaire], Clients.[Prime pour extincteur roues], Clients.[Prime pour RIA], Clients.[Nouveau Client], Clients.[Perte client], Clients.[Cessation client], Clients.[Date perte], Clients.Email, Clients.[Correctif euro], [Liste extincteurs].[Référence Extincteur], [Liste extincteurs].nombre, [Liste extincteurs].Localisation, [Liste extincteurs].Année, Clients.Commercial, Clients.N°Portable, [Liste extincteurs].N°,[Observations client].N°, [Observations client].Date, [Observations client].observation "
        
        'Code pour l'onglet extincreurs du client   SQL1?
    SQL = SQL & "FROM Clients LEFT JOIN [Liste extincteurs] ON Clients.[Code Client] = [Liste extincteurs].[Code Client]"
    SQL = SQL & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "               '& Me.Liste0 & ")) "
    SQL = SQL & "ORDER BY Clients.[Code Client], [Liste extincteurs].[Référence Extincteur]; "
        
        'Code pour l'onglet observations du client SQL2?
    SQL = SQL & "FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client]"
    SQL = SQL & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "
    SQL = SQL & "ORDER BY Clients.[Code Client], [Observations client].[Date]; "
    
    DoCmd.DeleteObject acQuery, "Requête Modif Clients"
    CurrentDb.CreateQueryDef "Requête Modif Clients", SQL

    Alors j'ai une question.
    Est ce que j'ai le droit de l'écrire de cette manière en le répétant pour chaque onglet ou alors il me faut créer 2 variables SQL1 et SQL2 pour que chaque onglet soit traité séparément ?

    Merci d'avance

    Marcopololo

  11. #11
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    J'ai avancé quelque peu dans ma requête SQL.
    Il me reste pas mal de choses à régler mais je bute sur le code pour l'effacement de ma requête. Sachant que je débute dans ce genre de codage.

    Code SQL : 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
     Dim SQL As String          'Gestion de l'onglet liste extincteurs
     Dim SQL2 As String         'Gestion de l'onglet liste observations
     
     SQL = "SELECT DISTINCTROW Clients.[Code Client], Clients.NomEntreprise, Clients.Adresse, Clients.Ville, Clients.Département, Clients.CodePostal, Clients.Contact, Clients.N°Tél, Clients.N°Fax, Clients.N°Portable, Clients.Catégorie, Clients.Fonction, Clients.Commercial, Clients.[Règle R4], Clients.[Date dernière visite], Clients.[Vacation fixe], Clients.[Prime pour extincteur], Clients.[Prime pour extincteur Auxiliaire], Clients.[Prime pour extincteur roues], Clients.[Prime pour RIA], Clients.[Nouveau Client], Clients.[Perte client], Clients.[Cessation client], Clients.[Date perte], Clients.Email, Clients.[Correctif euro], [Liste extincteurs].[Référence Extincteur], [Liste extincteurs].nombre, [Liste extincteurs].Localisation, [Liste extincteurs].Année, [Liste extincteurs].N° "
     SQL2 = "SELECT DISTINCTROW Clients.[Code Client], Clients.NomEntreprise, [Observations client].N°, [Observations client].[Date observation], [Observations client].Observation "
        
        'Code pour l'onglet extincreurs du client
    SQL = SQL & "FROM Clients LEFT JOIN [Liste extincteurs] ON Clients.[Code Client] = [Liste extincteurs].[Code Client]" 'ON Clients.[Code Client] = [Observations client].[Code Client]
    SQL = SQL & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "               '& Me.Liste0 & ")) "
    SQL = SQL & "ORDER BY Clients.[Code Client], [Liste extincteurs].[Référence Extincteur]; "
        
        'Code pour l'onglet observations du client
    SQL2 = SQL2 & "FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client]"
    SQL2 = SQL2 & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "
    SQL2 = SQL2 & "ORDER BY Clients.[Code Client], [Observations client].[Date]; "
    
    DoCmd.DeleteObject acQuery, "Requête Modif Clients"
    CurrentDb.CreateQueryDef "Requête Modif Clients", SQL
    
    
    DoCmd.DeleteObject acQuery, "Requête Modif Observations"
    CurrentDb.CreateQueryDef "Requête Modif Observations", SQL2

    Tout d'abord ai je le droit d'utiliser SQL (Requête Modif CLients) et SQL2 (Requête Modif Observations) comme nom de variable ?
    Mon code semble bien se passer, ma requête dite SQL se créé sans problème mais la SQL2 ne se créé jamais. J'ai une erreur après son effacement !!
    Erreur de syntaxe. J'avoue être bloqué.

    Je viens de voir que SQL est une propriété et pas une variable.

    Alors comment faire si je veux créer 2 requêtes différentes dans un même événement ??
    Merci d'avance

    Marcopololo

  12. #12
    Membre régulier Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 288
    Points : 84
    Points
    84
    Par défaut
    J'ai enfin trouvé.

    Il faut que chaque requête soit totalement définie et ensuite passer à la suivante.
    Si cela peut servir à quelqu'un :

    Code SQL : 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
    Dim SQL As String
     
                'Code pour création requête de l'onglet extincreurs du client
        SQL = "SELECT DISTINCTROW Clients.[Code Client], Clients.NomEntreprise, Clients.Adresse, Clients.Ville, Clients.Département, Clients.CodePostal, Clients.Contact, Clients.N°Tél, Clients.N°Fax, Clients.N°Portable, Clients.Catégorie, Clients.Fonction, Clients.Commercial, Clients.[Règle R4], Clients.[Date dernière visite], Clients.[Vacation fixe], Clients.[Prime pour extincteur], Clients.[Prime pour extincteur Auxiliaire], Clients.[Prime pour extincteur roues], Clients.[Prime pour RIA], Clients.[Nouveau Client], Clients.[Perte client], Clients.[Cessation client], Clients.[Date perte], Clients.Email, Clients.[Correctif euro], [Liste extincteurs].[Référence Extincteur], [Liste extincteurs].nombre, [Liste extincteurs].Localisation, [Liste extincteurs].Année, [Liste extincteurs].N° "
     
     
    SQL = SQL & "FROM Clients LEFT JOIN [Liste extincteurs] ON Clients.[Code Client] = [Liste extincteurs].[Code Client]" 'ON Clients.[Code Client] = [Observations client].[Code Client]
    SQL = SQL & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "               '& Me.Liste0 & ")) "
    SQL = SQL & "ORDER BY Clients.[Code Client], [Liste extincteurs].[Référence Extincteur]; "
     
            DoCmd.DeleteObject acQuery, "Requête Modif Clients"
            CurrentDb.CreateQueryDef "Requête Modif Clients", SQL
     
     
                'Code pour création requête de l'onglet observations du client
        SQL = "SELECT DISTINCTROW Clients.[Code Client], [Observations client].N°Obs, [Observations client].[Date observation], [Observations client].Observation "
     
    SQL = SQL & "FROM Clients LEFT JOIN [Observations client] ON Clients.[Code Client] = [Observations client].[Code Client] "
    SQL = SQL & "WHERE (((Clients.[Code Client])=" & Me.SélectionClientCode & ")) "
    SQL = SQL & "ORDER BY Clients.[Code Client], [Observations client].Observation DESC; "
     
            DoCmd.DeleteObject acQuery, "Requête Modif Observations"
            CurrentDb.CreateQueryDef "Requête Modif Observations", SQL

    On passe à la suite...
    Et encore merci à MOUT1234

    Marcopololo

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

Discussions similaires

  1. [AC-2007] comment afficher 3 sous formulaire par une zone de liste
    Par mbo2 dans le forum IHM
    Réponses: 3
    Dernier message: 27/04/2013, 19h43
  2. [AC-2007] filtrer un sous-formulaire par une zone de liste
    Par HoudaElm dans le forum IHM
    Réponses: 2
    Dernier message: 13/08/2011, 14h14
  3. Réponses: 1
    Dernier message: 15/10/2009, 10h11
  4. Réponses: 8
    Dernier message: 04/11/2008, 11h05
  5. maj d'un sous formulaire par une zone de liste
    Par mnssylvain dans le forum IHM
    Réponses: 3
    Dernier message: 31/08/2006, 22h46

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