[Access] Zone de liste dans un fomulaire

popof60 Messages postés 14 Statut Membre -  
blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai créé dans un formulaire une zone de liste qui m'affiche l'ensemble de mes numéro de contrat avec dans la propièté contenu

Select Contrats from [n° de contrat]

Lorsque le fomulaire n'est pas filtré tout mes contrats s'affichent mais lorsque je le filtre je veux voir apparaitre dans la zone de liste uniquement les numéros de contrats répondant au filtre.

J'ai essayé toujours dans la proprièté contenu de mettre

Select contrats form [N° de contrat] where "[N° de contrat] = '" & form!contrats_sous_formulaire.[Liste433] & "'"

maiis j'ai toujours tous mes enregistrement qui s'affaiche et pas juste ceux filtrés.

une idée ?
Configuration: Windows XP
Internet Explorer 6.0

15 réponses

  1. ruzakruzak Messages postés 466 Date d'inscription   Statut Membre 247
     
    Perso, je ferais en plusieurs phases, pour que la détection de l'erreur soit plus facile, comme ça :

    mavar = forms.liste433.Value
    
    monsql  = "SELECT contrats FROM ma_table_avec_les_contrats WHERE [N° de contrat] = '" & mavar & "'" 
    
    docmd.runsql monsql

    1
  2. popof60 Messages postés 14 Statut Membre
     
    c'est pas faux.

    Autre question, comment récupérer le filtre actif d'un formulaire ?

    dim valcritere as string
    Valcritere = Me.filterON

    je suis pas sur du code ...
    1
  3. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Je ne sais pas, mais si tu utilises une zone de liste, tu peux en récupérer la valeur avec zone_de_liste.value... et en plus, tu dis adieu aux filtres...
    1
  4. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    salut,

    et si N° contrat est numérique, alors pas de
    "'"
    ...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. popof60 Messages postés 14 Statut Membre
     
    ok, j'ai du alpha numérique dans mon n° de client donc le ' est utile en revanche, juste pour être sur, le code donné doit être rentré en VBA, je ne mets plus rien dans les propiété de la zone de liste.

    je suppose aussi qu'il faut déclaré les avriable avec

    Dim monsql as ...
    dim mavar as ...

    non ?
    0
    1. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      String et String...
      0
    2. fl0 Messages postés 365 Statut Membre 209
       
      salut les gars
      moi aussi g un probleme avec les liste dans access
      quelqu'un peut me dire comment ouvrir une dicussion
      merci
      0
      1. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > fl0 Messages postés 365 Statut Membre
         
        Tu vas dans le forum approprié, et tu remplis les champs en fin de page : écrire un nouveau message...
        0
  7. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    C'est normal, runsql veut une requête de type action (mise à jour, suppression...), j'avais mal lu le début de ton problème...

    Si tu veux limiter ta zone de liste, alors il faut utiliser la propriété rowsource :
    zone_de_liste.rowsource = monsql
    --
    A+ Blux
     "Les cons, ça ose tout.
    C'est même à ça qu'on les reconnait"
    0
  8. popof60 Messages postés 14 Statut Membre
     
    ok donc sa fonctionne .... en partie ... merci

    voici le code complet:
    Private Sub Liste433_AfterUpdate()
    'affichage des enregistrement disponible
    Dim Mavar As String
    Dim Monsql As String
    Mavar = Me!Liste433.Value
    Monsql = "SELECT [N° de contrat] FROM contrats WHERE [N° de contrat] = '" & Mavar & "'"
    Liste433.RowSource = Monsql

    ' Rechercher l'enregistrement correspondant au contrôle.
    Dim listeform As Object
    Set listeform = Me.Recordset.Clone
    listeform.FindFirst "[N° de contrat] = '" & Me![Liste433] & "'"
    If Not listeform.EOF Then Me.Bookmark = listeform.Bookmark
    End Sub

    Dans la théorie ma zone de liste doit afficher les n° de contrat des enregistrements dipos puis après (2ème code) je navigue sur mes enregistrements par le biais de la zone de liste

    Là je clique sur un enregistrement et les autres dispo ne sa'affiche plus ... si après filtrage de mon formulaire j'ai 3 enregistrements, les 3 n° de contrat devront resté dans la zone de liste pour pouvoir "naviguer" dans mes enregistrement.
    0
  9. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Monsql = "SELECT [N° de contrat] FROM contrats WHERE [N° de contrat] = '" & Mavar & "'"
    Liste433.RowSource = Monsql


    y'a comme un souci... Tu choisis une valeur dans une liste et ensuite tu modifies cette même liste !

    Je pense que le rowsource doit s'appliquer à ta zone d'afichage et non à ta zone de choix...
    0
  10. popof60 Messages postés 14 Statut Membre
     
    oui je suis d'accord mais comment faire ???
    0
  11. popof60 Messages postés 14 Statut Membre
     
    En fait il faut que ma liste soit le résultat du champs [n° de client] du filtrage de mon formulaire.
    0
  12. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Dans ton formulaire, tu as une zone de liste déroulante et une zone de liste ?

    Ta zone de liste déroulante te sert à faire ton choix, et ta zone de liste te sert à afficher les informations après choix...
    0
  13. popof60 Messages postés 14 Statut Membre
     
    Dans mon formulaire je n'ais qu'une zone de liste, je fais mon choix par la commande filtrer par formulaire ...
    0
  14. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    c'est là que ça va coincer, il serait plus 'opportun' de créer une zone de liste déroulante avec en source un SELECT DISTINCT [N° contrat] FROM...
    puis une zone de liste avec n colonnes dont tu remplirais le rowsource après avoir fait ton choix dans la liste déroulante...
    0
    1. popof
       
      je vais donc tenter avec une liste déroulante.

      Juste une chose, peut on créer une table tampon.
      Je m'explique en fait dès que j'ai un filtre actif sur mon formulaire je copie tous les enregistrement dans une table tampon ... si le filtre change, j'efface les enregistrement et je copie les nouveaux.

      C'est une deuxième solutions mais je ne suis pas sur que cela soit réalisable. le but est ainsi de faire pointer ma zone de liste sur cette table tampon ...

      En attendant je test avec la liste déroulante.

      Merci
      0
      1. blux Messages postés 2055 Date d'inscription   Statut Modérateur Dernière intervention   3 455 > popof
         
        Quel est l'intérêt de créer une table temporaire ? A part perdre du temps dans sa gestion...
        0
  15. fl0 Messages postés 365 Statut Membre 209
     
    tu fait tout sous access ou tu a aussi visual basic?
    moi je fait tou sous access et dans les proprietés tu met juste select["le nom de ta requete"]et en dessous
    nbre colonnes tu met 2
    par contre il faut que ta requete selctionne les deux informations que tu veu
    -1
  16. popof60 Messages postés 14 Statut Membre
     
    Donc voici mon code au complet

    Private Sub Liste433_AfterUpdate()
    Dim Mavar As String
    Dim Monsql As String
    Mavar = Form.Liste433.Value
    Monsql = "SELECT [N° de contrat] FROM contrats WHERE [N° de contrat] = '" & Mavar & "'"
    DoCmd.RunSQL Monsql

    j'ai une erreur exécution 2342
    "une action Executer sql necessite un argument concistant en une onstruction sql"
    -1