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 d'un sous-formulaire en fonction de plusieurs critères


Sujet :

IHM

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Mise à jour d'un sous-formulaire en fonction de plusieurs critères
    Bonjour,

    Je sèche sur un petit problème...
    Je souhaite faire un formulaire de recherche, avec des choix par listes déroulantes.
    Pour faire mon choix, j'ai jusqu'à 3 critères, donc 3 listes déroulantes à remplir : Materials, Type et SousType

    En fonction de ce que je choisis pour chacun des critères, je souhaite qu'une liste dans un sous-formulaire se mette à jour automatiquement.
    Lorsque je sélectionne mon premier critère (Materials), pas de problème, ça fonctionne. Par contre, lorsque je sélectionne mon deuxième critère (Type), toutes les lignes qui on le type sélectionné apparaissent, et pas seulement celles du Material sélectionné... Idem, évidemment, lorsque je passe à mon troisième critère !

    Pour vous aider à m'aider, voilà le bout de code qui pose problème :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Private Sub ListeMaterial_AfterUpdate()
     
    ' ------------------------------------------------------------------------------------------------
    ' Filtrer la liste par le Material.
    ' ------------------------------------------------------------------------------------------------
    Dim CodeMaterials As Long
     
    CodeMaterials = DNull(Me.ListeMaterial.Value)
     
    If CodeMaterials = 0 Then
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE"
    Else
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE Where CODE_MATERIAL = " & CodeMaterials
    End If
     
    Me.LISTE_SF.Requery
     
    End Sub
    Private Sub ListeType_AfterUpdate()
     
    ' ------------------------------------------------------------------------------------------------
    ' Filtrer la liste par le Material puis par le type.
    ' ------------------------------------------------------------------------------------------------
    Dim CodeTypes As Long
     
    CodeTypes = DNull(Me.ListeType.Value)
     
    If CodeTypes = 0 Then
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE"
    Else
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE Where CODE_TYPE = " & CodeTypes
    End If
     
    Me.LISTE_SF.Requery
     
    End Sub
    Private Sub ListeSousType_AfterUpdate()
     
    ' ------------------------------------------------------------------------------------------------
    ' Filtrer la liste par le Material puis par le type puis par le sous-type.
    ' ------------------------------------------------------------------------------------------------
    Dim CodeSousTypes As Long
     
    CodeSousTypes = DNull(Me.ListeSousType.Value)
     
    If CodeSousTypes = 0 Then
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE"
    Else
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE Where CODE_SOUSTYPE = " & CodeSousTypes
    End If
     
    Me.LISTE_SF.Requery
     
    End Sub
    Je pense qu'il faudrait mettre un And sur l'update de ListeType, mais je ne sais pas où ni comment : j'ai essayé plusieurs solutions, mais sans succès...
    En espérant que quelqu'un sera en mesure de me donner un coup de main, car je n'y connais pas grand chose en VBA...

    D'avance merci

    MelaAllIn

  2. #2
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    Bonjour,

    le problème vient de l'insertion des données dans tes requêtes:
    il faut insérer des quotes :
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE Where CODE_MATERIAL = '" & CodeMaterials & "'"

    De même pour les autres requêtes

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta réponse, Merryvor.
    J'ai essayé ta solution, mais sans succès. De plus, je ne suis pas sûre que le pb vienne de là, car ma première requête sur le critère Material fonctionne bien, la liste se met bien à jour.
    Le problème, c'est que lorsque je veux récupérer une liste correspondant à mon second critère (Type), le premier critère n'est plus pris en compte, alors que je voudrais que ça soit le cas...
    J'espère que mon explication n'est pas trop compliquée... si besoin, je peux donner un exemple.
    Merci !

  4. #4
    Membre actif
    Inscrit en
    Juin 2010
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 150
    Points : 210
    Points
    210
    Par défaut
    ah oui, ta requête écrase la précédente à chaque fois.
    Comment procèdes-tu?
    D'abord un matériel, puis ou pas un type, puis ou pas un sous-type?
    Ou alors peut-tu choisir un type avant d'avoir choisi un matériel?

    Dans le premier cas, il suffit d'ajouter une condition à la clause Where:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Where CODE_MATERIAL = '" & CodeMaterials & '" AND 
    CODE_TYPE = '" & CodeTypes & "'"
    Dans le second cas, le code devient plus compliqué, il faut tester si chacun des critères a été selectionné ou pas, et associer à chaque cas la requête appropriée

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    un truc :

    1° Tu construis ta requête avec l'assistant (mode design)
    2° Tu visionnes le sql (mode sql)
    3° Tu copies ce sql dans la fenêtre d'exécution (ou par exemple dans un traitement de texte),
    4° Tu mets tout sur une ligne. Avec comme précaution que les mots-clés (From, where ...) soient tjs précédés d'un caractère espace.
    (tu te places sur la 1ere ligne et <end> ensuite espace ensuite <delete> et tu recommences jusqu'à avoir tout sur une ligne)
    5° tu neutralises la "francisation", c'est à dire Formulaire ---> Form et Etat ---> Report (sigulier et pluriel)
    6° si le code contient des quotes, tu les dédoubles.
    7° tu encadres tout le contenu de la ligne entre quotes
    C'est le sql qui convient pour ton instruction VBA
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Merci à tous les 2.
    Pour répondre à ta question, Merryvor, il s'agit bien du premier cas, c'est à dire que l'on doit choisir d'abord le Material puis le Type, ou seulement le Material. En effet, j'ai un filtre (qui fonctionne, lui), afin de ne faire apparaitre dans le menu déroulant que les Types disponibles pour le Material sélectionné. Je vais donc essayé ta solution dès demain matin (j'avais déjà essayé un truc dans le genre, mais effectivement, ma synthaxe devait etre mauvaise...)
    Merci ClaudeLELOUP pour ton astuce : je vais également m'empresser de l'essayer demain matin, afin de comprendre comment ça fonctionne. Je pense que je vais l'utiliser souvent !
    Je vous tiens au courant.
    MelaAllIn

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous !
    Voilà, mon problème est résolu, grâce à Merryvor et ClaudeLELOUP : Merci à tous les 2 !
    Par contre, je sais pas pourquoi, il ne fallait pas mettre les ' (peut-être parce que je suis sous access 2000 ?)
    Voilà le code complet, pour ceux que ça intéresse (il fallait évidemment réatribuer la bonne valeur à CodeMaterials).

    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
    Private Sub ListeType_AfterUpdate()
     
    ' ------------------------------------------------------------------------------------------------
    ' Filtrer la liste par le Material puis par le type.
    ' ------------------------------------------------------------------------------------------------
    Dim CodeTypes As Long
     
    CodeMaterials = DNull(Me.ListeMaterial.Value)
    CodeTypes = DNull(Me.ListeType.Value)
     
    If CodeTypes = 0 Then
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE"
    Else
        Me.LISTE_SF.Form.RecordSource = "Select * From CHOIX_LISTE_SOURCE Where CODE_MATERIAL = " & CodeMaterials & " AND CODE_TYPE = " & CodeTypes & ""
    End If
     
    Me.LISTE_SF.Requery
     
    End Sub
    A bientôt

    MelaAllIn

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Par contre, je sais pas pourquoi, il ne fallait pas mettre les '
    Cela dépend du type de la donnée que tu compares

    pour du texte, tu dois encadrer de simples ou de doubles quotes ,
    pour du numérique : rien,
    pour une date, tu dois encadrer de dièses (#).

    Pour le "voir", crée une requête en mode design et passe ensuite en mode sql.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2007, 16h04
  2. Mise à jour table à partir sous-formulaire
    Par Daniel MOREAU dans le forum Access
    Réponses: 6
    Dernier message: 19/05/2006, 09h26
  3. Mise à jour table liée à à sous formulaire
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 15/04/2006, 16h26
  4. Mise à jour d'un sous formulaire
    Par tsyfar dans le forum Access
    Réponses: 4
    Dernier message: 31/01/2006, 11h41
  5. [formulaire] Mise à jour d'un sous formulaire
    Par virginie2 dans le forum IHM
    Réponses: 15
    Dernier message: 22/12/2005, 13h30

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