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

Macros et VBA Excel Discussion :

Afficher dans un TextBox un item se référant à 2 index d'un ComboBox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut Afficher dans un TextBox un item se référant à 2 index d'un ComboBox
    Bonjour.

    Je reviens dans ce forum pour vous demander de m'aider pour un petit problème que je n'arrive pas à résoudre.

    Mon tableau dans la feuille BD Produits contient :

    Réf Type de produits Producteurs ID PV HT
    001.001 Compote de pomme ACKREMANN 001 4.00 €
    001.002 Confiture d'abricots ACKREMANN 001 3.80 €
    001.003 Confiture de fraises ACKREMANN 001 3.70 €
    002.001 Compote de pomme BERGER 002 3.90 €
    002.002 Confiture d'abricots BERGER 002 3.70 €
    002.003 Confiture de fraises BERGER 002 3.60 €

    La feuille BD Producteurs contient un tableau avec les données des producteurs.

    Mon formulaire contient :
    - une ListBox1 des Producteurs
    - un ComboBox1 des Type de produits triés sans doublons
    - un TextBox1 pour afficher le prix de vente HT d'un produit

    Voilà de quoi il s'agit :
    - un clic sur un producteur dans la ListBox1 affiche dans le ComboBox1 la liste Type de produits triés sans doublons
    - sur clic d'un Type de produits triés sans doublons dans la ComboBox1, comment afficher le prix de vente HT d'un produit se référant au type de produit et à l'ID producteur dans le Textbox1.

    C'est certainement tout simple mais je fais un blocage sur la syntaxe pour obtenir ce résultat.

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Vous pourriez peut-être déjà poster votre code actuel ?

    Je suppose que votre "tableau" est bien un tableau Structuré (listObject) ?

    Bav,
    MFoxy

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour.
    Citation Envoyé par modus57 Voir le message
    comment afficher le prix de vente HT d'un produit se référant au type de produit et à l'ID producteur dans le Textbox1
    L'on ne sait pas comment tu renseignes ton combobox produit mais une façon simple d'avoir le prix pour la textbox c'est de le mettre dans la colonne 2 du combobox sans l'afficher mais prêt à récupérer pour le mettre dans la textbox au moment du clic de choix.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour mfoxy

    Voici mon tableau structuré et le code :

    Nom : 2020-06-04_103629.jpg
Affichages : 224
Taille : 44,4 Ko

    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
    Private Sub UserForm_Initialize()
        nomtableau = "BDProducteurs"
        NBCol = Range(nomtableau).Columns.Count
        TblBD = Range(nomtableau).Resize(, NBCol + 1).Value              
        For i = 1 To UBound(TblBD): TblBD(i, NBCol + 1) = i: Next i ' No enregistrement
        If Range(nomtableau).Item(1, 1) <> "" Then n = Range(nomtableau).Rows.Count + 1 Else n = 1
     
        Me.ListBox1.ColumnCount = [BDProducteurs].Columns.Count
        Me.ListBox1.ColumnWidths = "30;85;50;0;0;0;0;0;0;0;0;0;0"
        Me.ListBox1.List = [BDProducteurs].Value
     
        Set f = Sheets("Producteurs")
        ligne = 2
        NBCol = f.[A1].CurrentRegion.Columns.Count
     
        For i = 0 To ListBox1.ListCount - 1
            ListBox1.List(i, 0) = Format(ListBox1.List(i, 0), "000") 'Format de la 1ère colonne
        Next i
     
        Me.ComboBox1.List = SansDoublonsTrié(Application.Transpose(Range("B2:B" & [B65000].End(xlUp).Row)))
        Me.ComboBox1.ListIndex = 0
    End Sub
     
    Private Sub ComboBox1_Change()
        'Ici on affiche la Réf en fonction du Type de produits et du nom du Producteur et son ID
        'Ici on affiche le PVHT en fonction du Type de produits et du nom du Producteur et son ID
    End Sub
     
    Function SansDoublonsTrié(a)
        Set d = CreateObject("Scripting.Dictionary")
        For Each c In a
           d(c) = ""
        Next c
        b = d.keys
        Call Tri(b, LBound(b), UBound(b))
        SansDoublonsTrié = Application.Transpose(b)
    End Function
    une façon simple d'avoir le prix pour la textbox c'est de le mettre dans la colonne 2 du combobox sans l'afficher mais prêt à récupérer pour le mettre dans la textbox au moment du clic de choix
    Cela me parait difficile puisque la Combobox1 est triée sans doublons.

    Si ça peut vous aider j'ai préparé un fichier dépouillé de mon projet.

    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour à tous,

    Oups pas le moindre soupçon infinitésimal d'une réponse !

    Je vais abandonner la piste d'un formulaire VBA et créer un faux formulaire sur une feuille du classeur avec des listes de validation de données, ...

    J'espère que ce cas ce sera plus simple d'appliquer l'idée d'anasecu :
    - une façon simple d'avoir le prix c'est concaténer type de produit et à l'ID producteur dans une colonne du tableau sans l'afficher mais prêt à récupérer pour le mettre dans une cellule du faux formulaire.

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par modus57 Voir le message
    Je vais abandonner la piste d'un formulaire VBA
    Désolé pour le retard mais je n'étais pas disponible plus tôt et ce n'est pas efficient d'abandonner aussi vite.

    Pour remplir ton prix, étant donné que tu utilises 'Dictionary', je te propose de continuer.

    D'abord tu déclares un dico en tête de ton module formulaire.
    Ensuite dans 'UserForm_Initialize' tu rajoutes ce code pour documenter ton dico :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim c As Range
        Set pri = CreateObject("Scripting.Dictionary")
        For Each c In Range("=BDProducteurs[Type de produits]").Cells
           pri(c.Value & "|" & c.Offset(0, 1).Value) = c.Offset(0, 3).Value
        Next c
    ensuite il ne te reste plus qu'à alimenter la textbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Change()
        'Ici on affiche le prix
        textbox1.Value = pri(ListBox1 & "|" & ComboBox1)
    End Sub
    Private Sub ListBox1_Click()
        'Ici on affiche le prix
        textbox1.Value = pri(ListBox1 & "|" & ComboBox1)
    End Sub

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonjour anasecu

    Merci pour votre réponse et ne soyez pas désolé chacun à ses contraintes.

    J'avais compris que la solution était dans la concaténation, maintenant c'est plus limpide pour moi grâce à votre aide.

    Cependant :
    ensuite il ne te reste plus qu'à alimenter la textbox :
    Là j'ai un petit souci rien ne s’affiche dans la TextBox ?

    Si c'est nécessaire je peux vous joindre mon petit fichier dépouille.

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

Discussions similaires

  1. connaître les lignes affichées dans un textbox
    Par TERRIBLE dans le forum Framework .NET
    Réponses: 1
    Dernier message: 15/01/2009, 00h07
  2. Réponses: 13
    Dernier message: 07/07/2008, 14h29
  3. Réponses: 7
    Dernier message: 04/07/2008, 17h25
  4. Afficher dans une textbox pendant l'exécution
    Par cedric.synix dans le forum VB.NET
    Réponses: 9
    Dernier message: 24/09/2007, 12h30
  5. [c#]Gros text à afficher dans une textbox
    Par famemaur dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/05/2005, 10h12

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