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 :

Remplir Textbox en fonction de deux combobox


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Remplir Textbox en fonction de deux combobox
    Bonjour a tous !

    Je travaille actuellement sur une base de données de gestion de stock.
    La table (tbl_cable_drums) est constituée d'une colonne Item_code, d'une colonne description et d'une colonne par chantier (au nombre de 5).
    Ainsi sur chaque ligne on a le code de l'objet, sa description et la quantité présente sur chaque chantier.

    Je souhaite créer un formulaire d'ajout de matériel (pour représenter les livraisons).
    On choisi l'objet concerné dans la combo1 puis le site sur lequel la marchandise va être livrée dans la combo2 et on renseigne la quantité livrée dans la text1.
    Apres validation sur un bouton, la quantité livrée est ajoutée a la quantité initialement présente sur le chantier.

    Mon problème est que je souhaite créer un champ text2 qui affiche la quantité initialement présente sur le chantier (avant ajout) ce qui me permettrai de renseigner une text3 contenant la nouvelle quantité (text3 = text2 + text1). Ce champ text2 dépend donc des choix fait en combo1 et combo2.
    Malheureusement je n'arrive pas a écrire le code me permettant de remplir text2 ...

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Private Sub Combo2_Change()
      If IsError(Evaluate("INDEX(fonction,MATCH(""" & Combo1.Value & Combo2.Value & """,tbl_CABLE_DRUMS,0))")) Then
          msg = "Unknown"
          Beep
       Else
          msg = Evaluate("INDEX(fonction,MATCH(""" & Combo1.Value & Combo2.Value & """,tbl_CABLE_DRUMS,0))")
       End If
      Text2.Value = msg
      End Sub
    L'erreur renvoyée concerne EVALUATE : Compile error Sub or Fonction not defined

    J'ai cherche la syntaxe access de la fonction evaluate mais sans succès ...

    Merci d'avance pour votre aide !

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,

    Regarde plutôt du côté de EVAL...et non EVALUATE..
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Dieu que je suis bête

    Merci beaucoup

    J'ai corrigé comme suit (j'en ai également profite pour corriger "fonction" en 'function") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Combo4_Change()
      If IsError(EVAL("INDEX(function,MATCH(""" & Combo1.Value & Combo2.Value & """,tbl_CABLE_DRUMS,0))")) Then
          msg = "Unknown"
          Beep
       Else
          msg = EVAL("INDEX(function,MATCH(""" & Combo1.Value & Combo2.Value & """,tbl_CABLE_DRUMS,0))")
       End If
      Text2.Value = msg
      End Sub
    Mais ce n'est pas résolu pour autant ...
    J'ai maintenant droit a un magnifique :
    Run-Time error '2425'
    The expression you enterred has a function name that microsoft office access can't find


    Je penche pour le même genre d'erreur que précédemment.

  4. #4
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    msg = EVALl("INDEX(function,MATCH(""" & Combo1.Value & Combo4.Value & """,tbl_CABLE_DRUMS,0))")
    ..tu pourrais nous "traduire" ce que ton expression est censés faire
    C'est quoi MATCH.

    Sinon...
    ...Apres validation....la quantité livrée est ajoutée a la quantité initialement présente sur le chantier.
    Tu ne pense pense qu'une simple requête de mise à jour serait suffisante....

    [EDIT] Ton idée première allée dans le bon sens (ton post)
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Alors le but de ce code est d'aller chercher dans la table tbl_cable_drums la cellule correspondant a la ligne de l'objet ayant le code contenu dans combo1 et la colonne portant le nom du chantier sélectionné en combo2.

    Pour expliquer, voici la structure de la table :
    item_code | Description | chantier1 | chantier2 | chantier3 | chantier4 ...
    WE0056 | câble 20x5 | 90 | 67 | 134 | 126
    UZ656 | copper bar | 12 | 13 | 1 | 8


    Je souhaite donc si je sélectionne WE0056 dans ma combo1 et chantier2 dans ma combo2, que le champ text2 me retourne 67


    Pour ce qui est de faire l'update avec une requête, je n'ai pas reussi malgré pas mal de recherches et d'essais en tout genre, j'ai donc abandonné ...
    De toutes façons mon code fonctionne pour réaliser cette opération.

    EDIT: J'ai mis en ligne la base de données sur laquelle je travaille si cela peux aider ...
    http://www.cijoint.fr/cjlink.php?fil...cijgcBUMfm.zip

  6. #6
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Heu....oui.......on ne peut pas dire que la structure de ta base est la meilleur..

    Maintenant, pourquoi faire si compliqué alors que tu ne souhaite que mettre à jour une quantité d'objets répartie sur différents chantiers...

    - création d'un formulaire basé sur la table tbl_cable_drums.
    - tu dispose tous les champs sur ce formulaire.
    - dans la partie en-tête du formulaire, tu place une ZdL indépendante. L'assistant va alors ouvrir une fenêtre ou tu aura 3 choix.
    - Tu sélectionne "Rechercher un enregistrement dans mon formulaire basé sur la valeur que j'ai sélectionnée......."

    A partir de là, un choix effectué dans cette ZdL va t'afficher directement l'objet recherché....ainsi que la répartition sur les différents chantiers.

    Il ne te reste plus qu'à changer les quantités.....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    J'y ai bien pensé mais c'est pour éviter les erreurs ...

    Je crée un formulaire pour les livraisons, un formulaire pour les consommations et un dernier pour les échanges de matériel entre les chantiers.

    De toutes façons, la structure des tables et les formulaires a créer me sont imposés ...

  8. #8
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bon.....puisque cela est imposé....on va (essayer) de faire avec..

    ...aller chercher dans la table tbl_cable_drums la cellule correspondant a la ligne de l'objet ayant le code contenu dans combo1 et la colonne portant le nom du chantier sélectionné en combo2.
    Pour cela on va se servir de la fonction DLookup (voir aide ACCESS pour plus d'explication..)

    Sur l'événement "Sur changement" de la combo2: (tu remplace TOUT ton code par celui-ci...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Combo2_Change()
    'On recherche dans la table "tbl_cable_drums" la valeur du champ sélectionné dans Combo2...
    '..et dont le champ "ItemCode" est égale à la sélection effectuée dans Combo1.
    '..et on place cette valeur dans le champ Text2.
     
    Me.Text2.Value = DLookup(Me.Combo2.Value, "tbl_cable_drums", "[ItemCode]='" & Me.Combo1.Column(0) & "'")
     
    End Sub
    ....pour le reste je te laisse chercher un peu tout seul....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Alors la vraiment, un grand merci
    Je n'avais absolument pas pensé a DLookup : ca marche nickel


    Donc maintenant tout fonctionne !
    Je choisi mon objet et mon chantier, la text2 me donne la quantité présente actuellement puis je renseigne la quantité livrée et la text3 me donne la nouvelle quantité.

    Seul ombre au tableau, si je défini text3 dans le formulaire comme = [text1]+[text2], le calcul est bien effectuée mais le résultat ne s'affiche que si je clique avec la souris dans la text3 ...
    J'aurai bien aimée que la text3 s'actualise a chaque changement de la text1 ou de la text2

    J'ai donc fait un petit code pour essayer d'actualiser ça en temps reel mais, pour changer ... ça ne fonctionne pas

    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 text1_Change()
    'On calcule le contenu de la text3 a chaque changement de la text1
    Dim current_qty As Single
    Dim delivered_qty As Single
    Dim new_qty As Single
     
    current_qty = Nz(Text2.Value, 0)
    delivered_qty = Nz(Text1.Value, 0)
    new_qty = Nz(current_qty + delivered_qty, 0)
     
    Text3.Value = Nz(new_qty, 0)
     
    End Sub

    Je vais maintenant regarder comment mettre plusieurs conditions _change() tout en essayant de comprendre pourquoi le calcul ne s'effectue pas

    EDIT :
    J'ai mis ça comme code finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Text2_AfterUpdate()
    Text3.Value = Val(Text1.Value) + Val(Text2.Value)
     
    End Sub
     
    Private Sub Text1_AfterUpdate()
    Text3.Value = Val(Text1.Value) + Val(Text2.Value)
     
    End Sub
    Le calcul fonctionne bien mais il faut toujours presser 'enter' une fois la valeur rentrée dans text1 pour que cela s'affiche dans text3 ...

  10. #10
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bon, pour un calcul dynamique (en même temps que la frappe)....c'est pas tout à fait ça.
    Je pense que tu mélange allégrement le VBA de EXCEL et celui de ACCESS....

    Ceci dit, voici une façon de procéder:

    -en en-tête de module tu déclare une variable de type Boolean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Compare Database
    Option Explicit
    Dim RetourFin As Boolean
    - sur la propriété "Sur touche activée" du champ [Text1]..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeySpace Then
        RetourFin = False
    Else
        RetourFin = True
    End If
    End Sub
    - sur la propriété "Sur changement" du champ [Text1]..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Text1_Change()
    If RetourFin = True Then
        Refresh
        Me.Text3.Value = Nz(Me.Text1.Value) + Nz(Me.Text2.Value)
        Me.Text1.SelStart = Me.Text1.SelLength
    End If
    End Sub
    ....voilà, essaie d'en comprendre le principe et de poursuivre les ajustements nécessaires.....
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  11. #11
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par FreeAccess Voir le message
    Bon, pour un calcul dynamique (en même que la frappe)....c'est pas tout à fait ça.
    Je pense que tu mélange allégrement le VBA de EXCEL et celui de ACCESS....
    Me voila démasqué ...
    Effectivement, j'utilise beaucoup VBA sur Excel et très peu sur Access (sauf pour suivre le tuto dispo )

    Citation Envoyé par FreeAccess Voir le message
    ....voilà, essaie d'en comprendre le principe et de poursuivre les ajustements nécessaires.....
    Bon alors ton code fonctionne parfaitement encore une fois
    Je pense bien avoir compris la condition de refresh des calculs

    Par contre, j'ai crée un troisième type de formulaire pour réaliser les échanges de matériel entre 2 chantiers. Et j'ai été contraint de virer la condition
    En effet, si je la laisse, refus d'exécuter le code SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub proceed_Click()
     
        sqlp = "UPDATE tbl_CABLE_DRUMS SET " & Combo2.Value & "=" & Text3.Value & "," & Combo3.Value & "=" & Text5.Value & " WHERE ItemCode='" & Combo1.Value & "';"
        DoCmd.RunSQL sqlp
    'UPDATE table SET champ1='blabla'et champ2='blabla2' WHERE id = 25698;
    End Sub
    De toutes façons, c'esr programmé comme un cochon donc c'est normal


    En tout cas, un grand merci a toi
    Je pense que je vais passer pas mal de temps ici dans la FAQ et dans les tutos a l'avenir

    EDIT : voici le fichier si cela peut servir ICI

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

Discussions similaires

  1. [XL-2007] Filtrer deux listbox en fonction de deux combobox
    Par gaiaprof dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/07/2014, 13h36
  2. [VB.NET] Problème TextBox en fonction d'unE ComboBox
    Par nadong dans le forum Débuter
    Réponses: 2
    Dernier message: 04/04/2014, 16h35
  3. remplir textbox ou listbox d'après combobox
    Par babybell dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/12/2010, 20h59
  4. Remplir Textfield en fonction d'une comboBox
    Par BqiKo dans le forum Ext JS / Sencha
    Réponses: 5
    Dernier message: 06/05/2010, 11h25
  5. Associer résultat textbox en fonction de plusieurs combobox
    Par Albatros47 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2010, 23h11

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