Ne rien afficher dans 1 txtbox

Bonjour le forum,

Alors voilà, j'ai ajouté 2 TxtBox (TextPU et TextPrixTotalHT) dans un formulaire, et je voudrais que quand je clic dans ma listbox1 pour rechercher un produit, mes 2 textbox n’affiche rien. Je voudrais entrer les valeurs manuellement dans ces 2 textbox .

Auriez-vous une idée a me proposé svp? Merci pour votre aide.

image
Option Explicit 'oblige à déclarer toutes les variables
Private OB As Worksheet 'déclare la variable OB (Onglet Base)
Private TS As ListObject 'déclare la variable TS (Tableau Structuré)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private TNI() As Variant 'déclare la variable TNI (Tableau de Numéros de Ligne)
Private LI As Integer 'déclare la variable LI (LIgne)
Private CTRL As Control 'déclare la variable CTRL (ConTRôLes)
Dim TEST As Boolean 'déclare la variable TEST

Private Sub ListBox1_Click() 'au clic dans la Listbox1
TEST = True 'définit la variable TEST
LI = TNI(Me.ListBox1.ListIndex + 1) 'récupère le numéro de la ligne LI de la sélection dans la Listbox1
Me.Cbx_produit.Value = TV(LI, 1) 'renvoie la valeur de la donnée ligne LI colonne 1 de TV dans Cbx_produit
For Each CTRL In Me.Controls 'boucle sur tous les controles CTRL de l'UserForm en cours
    'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du tableau dans le contrôle
    If CTRL.Tag <> "" Then CTRL.Value = TV(LI, CByte(CTRL.Tag))
Next CTRL 'prochain contrôle de la ligne
End Sub

Cordialement.

Bonjour Minakashi,

Est-ce que ajouter ces deux ligne au début du code Listbox1_click suffit ?

Me.TextPU.Value = ""
Me.TextPrixTotalHT.Value = ""

A+

Bonjour Gabin37,

Merci pour votre réponse, j'y avais pensé mais malheureusement non ça ne suffit pas… .

Cldt.

Bonjour minakashi, Gabin 37, le forum,

Il me semble reconnaitre le style de ThauThème ...

Un modeste essai...

For Each CTRL In Me.Controls 'boucle sur tous les controles CTRL de l'UserForm en cours
 'si le nom du CTRL est différent de TextPU où différent de TextPrixTotalHT
 If CTRL.Name <> "TextPU" Or CTRL.Name <> "TextPrixTotalHT" Then
 'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du tableau dans le contrôle
  If CTRL.Tag <> "" Then CTRL.Value = TV(LI, CByte(CTRL.Tag))
 End If
Next CTRL 'prochain contrôle de la ligne

Cordialement,

Re, Bonjour xorsankukai,

Dans ce cas je suppose que ce code doit également fonctionner.

Private Sub ListBox1_Click() 'au clic dans la Listbox1
TEST = True 'définit la variable TEST
LI = TNI(Me.ListBox1.ListIndex + 1) 'récupère le numéro de la ligne LI de la sélection dans la Listbox1
Me.Cbx_produit.Value = TV(LI, 1) 'renvoie la valeur de la donnée ligne LI colonne 1 de TV dans Cbx_produit
For Each CTRL In Me.Controls 'boucle sur tous les controles CTRL de l'UserForm en cours
    'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du tableau dans le contrôle
    If CTRL.Tag <> "" Then CTRL.Value = TV(LI, CByte(CTRL.Tag))
Next CTRL 'prochain contrôle de la ligne
Me.TextPU.Value = ""
Me.TextPrixTotalHT.Value = ""
End Sub

à la différence du code de Xorsankukai les textboxs sont RAZ. A voir ce qui correspond le mieux au besoin.

A+

Re,

A la relecture de la demande, je pense qu'effectivement le RAZ répond mieux à l'attente, j'ai encore répondu trop vite,

Cordialement,

Re,

Merci à vous deux pour votre aide, merci à toi Gabin ton code fonctionne bien il correspond le mieux à mes attentes merci encore. Bonne journée a vous deux.

Cldt.

Salut,
Je constate que tu utilise la propriété Tag de tes contrôles judicieux. Voilà une fonction que j'utilise pour Tous les contrôles sur le UserForm.
Elle est à mettre au chaud dans ton module Outils (J'éspère que tu as un module Outils ou Fonctions).

' // GetTheValue By Avinus le : 03/07/2019
' // Récupérer une valeur par rapport à une clé dans un Tag
Public Function GetTheValue(ByVal TagValue As String, ByVal Key As String) As String

    On Error Resume Next

    Dim workTb() As String
    Dim Ele() As String
    Dim myVariabs() As String
    Dim intCounter As Integer

    workTb = Split(TagValue, ";")

    ReDim myVariabs(LBound(workTb) To UBound(workTb), 0 To 1)
    For intCounter = LBound(workTb) To UBound(workTb)
        Ele = Split(workTb(intCounter), ":=")
        myVariabs(intCounter, 0) = Ele(0)
        If UBound(Ele) = 1 Then
            myVariabs(intCounter, 1) = Ele(1)
        End If
        'Debug.Print myVariabs(intCounter, 0) & "  " & myVariabs(intCounter, 1)
    Next
    For intCounter = LBound(myVariabs) To UBound(myVariabs)
        If Key = myVariabs(intCounter, 0) Then
            GetTheValue = myVariabs(intCounter, 1)
        End If
    Next
End Function

Elle n'est pas de moi mais de Avinus, elle est très pratique pour stocker tout un tas de truc dans la propriété Tag
Cette propriété doit être définie comme suit Value:=3;DefaultValue:=1
Pour l'appel tu lances

    For Each Ctrl In Me.Controls    'boucle sur tous les controles CTRL de l'UserForm en cours
        'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du tableau dans le contrôle
        If GetTheValue(Ctrl.Tag, "Value") <> "" Then
            Ctrl.Value = TV(LI, CByte(Ctrl.Tag))
        Else
            Ctrl.Value = vbNullString
    Next Ctrl    'prochain contrôle de la ligne

Tu l'auras compris pour retourner une chaine vide ne rien mettre après le = dans Value:=3;DefaultValue:=1 de la propriété Tag. Avec cette méthode tu peux gérer plusieurs propriétés dans le Tag de chaque contrôles

image

Bonjour Jean-Paul,

Je trouve cette fonction très intéressante, mais petite question, quand tu dit module Outils c'est module de classe ou dans un module normal? j'ai jamais utilisé de module de classe .

Cldt.

re,

Non un module normal ou tu stocke les fonctions utiles à tes applications

image

Et aussi un module pour la gestion des tableaux structurés c'est bien aussi

image

re,

A oui je vois, un peut compliqué mais franchement très utile, merci Jean-Paul. Excel n'a vraiment aucune limite? haha

Cldt.

Oui mais une fois les fonction entrées dans le module tu ne te soucis plus du fonctionnement, juste l'appel.
Par exemple pour ajouter une ligne à un tableau tu donnes le nom du tableau, et un Array de valeurs sans te soucier d'autres choses
ex: AddRow "t_Datas", Vba.Array("Nom", txtNomClient, "Prénom", txtPrenomClient,.........)

Pourquoi réinventer la roue à chaque fois....

image

re,

C'est donc simple en faite merci pour l'explication Jean-Paul, je vais essayé de l'utiliser une autre fonction.

Cldt

Rechercher des sujets similaires à "rien afficher txtbox"