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

VBA Access Discussion :

[A97] : Calcul en cascade dans des contrôles bloqué par une zone de liste


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut [A97] : Calcul en cascade dans des contrôles bloqué par une zone de liste
    Bonjour à tous,

    Je me tourne une nouvelle fois vers vous pour une question à laquelle je n'apporte pas de réponse !
    Le contexte :
    Un formulaire contenant 1 zone de liste modifiable, 1 zone de liste, 2 zones de textes.
    On choisit un élément dans la zone de liste modifiable qui met à jour la zone de liste (donc le contenu est une requête), et enfin le contenu de la zone de liste devrait mettre à jour la zone de texte ! C'est simple mon truc !

    Là ou ça "bloque" c'est que la dernière zone de texte ne se met pas à jour, le seul cas dans lequel j'arrive à la mettre à jour c'est lorsque je clique dans la zone de liste alors la zone de texte se met à jour !

    Finalement il faudrait que je sache comment se traduit (en VBA peut-être) l'action du "clique" dans la zone de liste afin que je mette cette action en "LostFocus" de la zone de liste modifiable.

    Par avance merci,
    @+

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Pour se comprendre, on va commencer par donner des noms à tes petits contrôles:
    ctlComboBox = 1 zone de liste modifiable,
    ctlListBox= 1 zone de liste,
    ctlTextBox = 1 zones de textes.

    Citation Envoyé par boulap Voir le message
    Finalement il faudrait que je sache comment se traduit (en VBA peut-être) l'action du "clique" dans la zone de liste
    Il y a plus simple !
    La solution consiste à appeler directement la procédure événementielle du contrôle zone de liste, lors de la mise à jour du contrôle zone de liste modifiable.

    Voilà le principe général à adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ctlComboBox_Change()
        ' 1. actualiser ctlListBox
        ....
        ' 2. propager vers ctlTextBox
        ctlListBox_Click
    End Sub
     
    Private Sub ctlListBox_Click()
        ' actualiser ctlTextBox
        ....
    End Sub

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Salut =JBO=, salut à tous !

    Pas de soucis pour les noms de ctrl ;-)

    Donc finalement j'ai :
    - ctlComboBox qui est un champ de tblEtude et qui a pour contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT tblTransportTarif.Dpt FROM tblTransportTarif ORDER BY tblTransportTarif.Dpt
    Sur Lost_focus de ctlComboBox j'ai - ctlListBox a pour contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT qryTransporteurChoix.PrixMoyen FROM qryTransporteurChoix GROUP BY qryTransporteurChoix.PrixMoyen;
    Pas d'évènements associés à ce contrôle.

    - ctlTextBox qui a pour Source contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =[ctlListBox]*(Ent[Formulaires]![frmEtude]![txtPoidsLivraison])
    en version simplifée ;-)
    Pas d'évènements associés à ce contrôle.

    Est-ce que j'ai réussi à mieux exprimer mon besoin ?

    Par avance merci,
    @+

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Bonjour à tous !

    Permettez-moi de relancer le fil car je bloque toujours et je ne sais pas comment m'en dépatouiller ! Alors qu'avec vous je sais que ça sera faisable ;-)

    Par avance merci,
    @+

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Alors encore un petit coup de pouce...

    Pour rester dans ta logique et puisque ctlListBox n'a pas de procédure événementielle que l'on puisse appeler, tu peux directement mettre à jour ctlTextBox.
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' 2. propager vers ctlTextBox
        Me.ctlTextBox.Requery
    End Sub

    A bientôt !
    _

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Salut =JBO=, Salut à tous !

    Ben justement c'est ce que j'ai fait mais ctlTextBox ne se met pas à jour même avec tout les requery ! Seul un "clic" avec la souris dans ctlListBox met à jour ctlTextBox !
    C'est quand même fou !

    Merci de votre aide !
    @+

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par boulap Voir le message
    Ben justement c'est ce que j'ai fait mais ctlTextBox ne se met pas à jour même avec tout les requery ! Seul un "clic" avec la souris dans ctlListBox met à jour ctlTextBox !
    C'est quand même fou !
    Bon, alors on va mettre un petit "coup sur la tête" de ctlListBox et le forcer à "sélectionner" sa première ligne:
    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' --> le coup sur la tête: sélectionner la première ligne de ctlListBox
        Me.ctlListBox.ListIndex = 0
        ' 2. propager vers ctlTextBox
        Me.ctlTextBox.Requery
    End Sub

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    euh on est pas loin je pense !
    Erreur d'exécution '7777' : Utilisation incorrecte de la propriété ListIndex

    J'ai essayé avec -1 c'est pareil !

    Merci

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par boulap Voir le message
    euh on est pas loin je pense !
    Erreur d'exécution '7777' : Utilisation incorrecte de la propriété ListIndex

    J'ai essayé avec -1 c'est pareil !
    Drôlement bizarre !
    Je t'assure que dans la fenêtre de débogage, il est possible d'affecter une valeur à la propriété ListIndex.
    En revanche, je constate comme toi que dans une procédure événementielle ça déclenche cette erreur !

    Mais bon, apparemment il est d'usage d'employer la propriété Selected avec le n° de la ligne. Donc, je corrige (et j'ai testé ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' --> le coup sur la tête: sélectionner la première ligne de ctlListBox
        Me.ctlListBox.Selected(0) = True
        ' 2. propager vers ctlTextBox
        Me.ctlTextBox.Requery
    End Sub

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Merci =JBO= la sélection de la ligne se fait bien cette fois-ci !!! :-)

    Par contre cette ... de ctlTextBox ne se met pas à jour même avec le Me.ctlTextBox.Requery !!!

    La valeur se met à jour que quand je "clique" dans ctlListBox alors que celle-ci est dejà "sélectionnée" ! C'est incompréhensible pour moi !!!

    Par avance merci !
    @+

    P.S Bon réveil ;-)

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par boulap Voir le message
    P.S Bon réveil ;-)
    Merci pour les croissants et le jus d'orange !

    Citation Envoyé par boulap Voir le message
    Par contre cette ... de ctlTextBox ne se met pas à jour même avec le Me.ctlTextBox.Requery !!!

    La valeur se met à jour que quand je "clique" dans ctlListBox alors que celle-ci est dejà "sélectionnée" ! C'est incompréhensible pour moi !!!
    La solution un peu extrême est de recaculer tous les contrôles calculés du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' --> le coup sur la tête: sélectionner la première ligne de ctlListBox
        Me.ctlListBox.Selected(0) = True
        ' 2. recalculer tous les contrôles calculés, donc ctlTextBox
        Me.Recalc
    End Sub
    Une explication possible ?

    Ici soit le fomulaire est indépendant (pas de source de données), soit il est dépendant mais les contrôles concernés sont indépendants de la source de données.
    Dans cette configuation le "mécanisme" d'Access en charge de l'actualisation des contrôles calculés ne fonctionnerait pas de façon optimale...

    Donc Recalc !
    _

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Salut =JBO=, salut à tous !

    Ben c'est à cette heure-ci que tu te lèves toi

    Qu'est-ce que tu me dis si je te dit que Recalc ne fonctionne pas mieux ! Je suis trop fort moi ;-)

    Pour résumé et compléter le message #3 de ce fil :
    - le formulaire est bien basé sur une table (ce formulaire compte de nombreux contrôles : contrôle onglet, zone de texte, zone de liste,...)
    - ctlComboBox est un champ de la table mais peut-être modifié selon les données d'un champ d'une autre table
    - ctlListBox est le résultat d'une requête qry...(1 seul résultat)
    - ctlTextBox est un champ calculé avec des éléments du formulaire courant, d'un sous-formulaire et de ctlListBox.

    J'espère que je suis clair ;-)

    Donc encore merci pour tout les essais réalisés mais cela ne fonctionne toujours pas lol !!!

    Merci
    @+ j'espère...

    P.S. et dire qu'un "pauvre click" dans ctlListBox me calcul ctlTextBox c'est dingue !

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par boulap Voir le message
    Ben c'est à cette heure-ci que tu te lèves toi

    Qu'est-ce que tu me dis si je te dit que Recalc ne fonctionne pas mieux ! Je suis trop fort moi ;-)
    Je dis que je retourne vite me coucher pour faire comme si je n'avais rien vu...

    Mais je crois que je tiens la solution: il faut agir sur la valeur du contrôle !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' 2. sélectionner la 1ère ligne de ctlListBox
        '     et calculer ctlTextBox (on y croit)
        Me.ctlListBox.Value = Me.ctlListBox.Column(0, 0)
    End Sub

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 310
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Je dis que je retourne vite me coucher pour faire comme si je n'avais rien vu...

    Mais je crois que je tiens la solution: il faut agir sur la valeur du contrôle !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ctlComboBox_LostFocus()
        ' 1. actualiser ctlListBox
        Me.ctlListBox.Requery
        ' 2. sélectionner la 1ère ligne de ctlListBox
        '     et calculer ctlTextBox (on y croit)
        Me.ctlListBox.Value = Me.ctlListBox.Column(0, 0)
    End Sub
    Je dis WAHOUUUUUUUUUUUUUUUUU CLAPCLAPCLAP

    On aura mis le temps mais finalement la solution était là ;-)

    Merci encore beaucoup =JBO= !

    Bonne journée à tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  2. Réponses: 2
    Dernier message: 14/07/2009, 08h45
  3. Réponses: 1
    Dernier message: 23/06/2009, 11h59
  4. [E-07] Valider des informations à partir d'une zone de liste.
    Par Blinis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2008, 13h26
  5. Réponses: 1
    Dernier message: 22/08/2008, 10h06

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