Problème de TxtBox dans un UserForm

Bonjour le forum Excel, j'ai un formulaire de Recherche Produit dans un UserForm qui fonctionne très bien, j'y ai ajouter un formulaire de Recherche par Filtre avec un critères et une recherche et une txtbox qui compte le nombre de ligne dans la listbox. Le problème c'est que ce dernier me fait planter le formulaire de recherche produits car il me prend en compte les 2 TxtBox du formulaire de recherche par filtre. Quelqu'un aurait une solution à apporter à ce problème svp? merci par avance.

image image

Bonjour Minakahi, bonjour le forum,

Essaie de régler ton problème sur un forum PhotoChope ou envoie-nous le fichier qui va bien... (vanne naze qui ne fait rire que moi !)

Après 66 messages au compteur, il serait temps que tu comprennes que si tu as besoin d'aide il te faut nous donner les moyens de t'aider...

Bonjour ThauThème, merci pour ta réponse. Oui désolé j'envoie le fichier en fichier pièce joint, j'ai pas encore entrer mon code vba pour la recherche filtre car j'attends de régler le problème avec le formulaire de recherche produits. Merci.

36gestion-stock.zip (417.00 Ko)

Re, voila le nouveau fichier en pièce joint, j'ai programmer le formulaire de recherche par filtre. Il fonctionne bien mais par contre j'ai toujours le même problème avec le recherche produit. Quand je rentre une lettre la ComboBox "Code Produit" une erreur s'affiche.

image image
16gestion-v2.zip (397.25 Ko)

Merci.

Bonjour,

Appliquer cette modification :

Private Sub Cbx_produit_Change()
   Dim ctrl As Control
    Dim tb()
    Dim I As Integer: I = 2
    If Me.Cbx_produit.Value = "" Then Exit Sub
    '// récupération du tableau des infos article à  partir de la  valeur de la clé du dictionnaire
    If Not dic_articles.Exists(Me.Cbx_produit.Value) Then MsgBox "Aucun produit trouvé": Exit Sub
    tb = dic_articles(Me.Cbx_produit.Value)

    '// remplissage des contrôles TextBox du formulaire à partir du tableau des infos article
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Then
            If I > UBound(tb) Then Exit For
            ctrl.Value = tb(I)
            I = I + 1
        End If
    Next ctrl

End Sub

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié avec le code Full Comment .

J'ai utilisé la propriété Tag des contrôles édités pour pouvoir récupérer les données du tableau vers l'userForm ainsi que renvoyer les données de l'userform vers le tableau...

Quand tu sélectionnes un produit dans Cbx_produit, si le produit est unique, toutes les TextBoxes affichent les données du produit. S'il il y en a plusieurs, il te faudra d'abord cliquer dans la Listbox1 sur le produit que tu désires l'afficher et pouvoir le Modifier ou le Supprimer.

Je ne vois pas bien l'intérêt de deux boutons Annuler et Fermer. Pour moi il y en a un en trop...

J'ai supprimé la recherche par critère. Désormais quand tu tapes dans la TextBox1 la recherche se fait dans tout le tableau. Si le texte tapé est contenu dans une cellule du tableau, la ligne est ajoutée. Clique dans la ListBox1 pour afficher toutes les données du produit sélectionné.

J'ai aussi modifié FrmDeSaisie avec, là aussi, la propriété Tag sur les contrôles à éditer...

Le fichier :

29minakashi-ep-v01.zip (402.49 Ko)

Bonsoir a tous,

Merci infiniment a vous deux, ThauThème merci pour votre programme je vais essayer de comprendre comment vous avez fais merci encore. Il y a juste un petit couac dans le formulaire de saisie, fin le formulaire en lui-même fonctionne bien mais quand j’appuie sur sauvegarder il me décale toutes les données de 1 case vers la gauche dans mon tableau. Normalement la colonne ID (Code Produit) correspond à la colonne référence + numéro. Ensuite il y a le code produit qui s’insère dans la colonne date ( du coup il devrais s'inséré dans la colonne ID), j'ai essayé d'arranger ça mais je ne comprends pas grand-chose à votre code .

Merci et bonne soirée ThauThème.

Re,

De bonne humeur après la victoire au rugby...

Je crois comprendre que tu n'auras jamais de doublons au niveau de l'ID. Cela va beaucoup simplifier le code. J'attends ta réponse pour t'envoyer la version 2.

[Édition]

La version 2 en considérant que l'ID n'a pas de doublons et avec ton problème résolu (un mauvais adressage dans la propriété Tag)

Pour tester j'ai quelque peu modifié certaines données...

22minakashi-ep-v02.zip (417.80 Ko)

Re bonjour,

A oui d'accord je vois, gros merci pour ces explications ThauThème franchement tu expliques vraiment très bien. En vrais ce n’est pas vraiment un problème les doublons, je peux le vérifier par moi-même si jamais il y en a grâce au bouton.

Merci encore et passe un bon week-end!

ThauThème, une petite dernière question svp, j'ai essayé d'ajouter une info bulle sur un bouton de ma feuil2 mais j'ai l'impression qu'il ne fonctionne pas. J'ai en fait inséré une forme de type bulles avec comme nom "BulleAjout", et ensuite j'ai inséré 2 étiquettes( contrôle ActiveX) dernier le bouton en question pour que quand je survole les 2 labelles l’info bulle apparais et disparue. Pourriez-vous y jeter un œil svp? j'envoie le nouveau fichier en pièce joint .

Merci d’avance.

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

   Feuil2.Shapes("BulleAjout").Visible = msoTrue

End Sub

Private Sub Label2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

   Feuil2.Shapes("BulleAjout").Visible = msoFalse

End Sub
14minakashi-ep-v03.zip (403.40 Ko)

Re,

Désolé Minakashi je ne sais pas faire. Dans mes fichiers, je considère que si l'utilisateur n'est pas foutu de différencier deux boutons c'est qu'il faut qu'il fasse autre chose que de l'informatique...

Re,

HaHa oui je vous comprend , merci quand même du coup.

ThauThème,

J'allais oublier, mais pouvez-vous juste ajouter l'entête du tableau BDD dans la listebox de « Recherche produit par filtre » s'il vous plait. J'ai essayé de modifier votre programme mais j'ai une erreur à chaque fois ?

23minakashi-ep-v02.zip (389.11 Ko)

Merci encore ThauThème.

Re,

J'ai toujours galéré avec la propriété ColumnHeads d'une ListBox. Alors je ne m'emm***e plus, j'utilise une seconde ListBox quand il n'y a pas de déplacement latéral à faire pour voir la suite de la Listbox...

22minakashi-ep-v03.zip (420.34 Ko)

Re,

A mais c'est pas grave, ça me va très bien ce que vous avez fait, merci !

Bonjour ThauThème! j'espère que vous allez bien en ce week-end ensoleillé.

Alors voilà depuis la dernière fois, j'ai ajouté dans le UserForm FrmRecherche 2 autres UserForm ( frmBonLivraison et frmBonCommande ), j'y ai ajouté du code bien sur qui fonctionne bien en plus, premier long code que j'arrive à faire solo haha je suis content. Mais malheureusement, je bloque maintenant sur mon frmBonLivraison. J'aimerais juste que quand j'appuie sur le bouton "Créer Bon de Livraison" et bien qu'il décrémente automatiquement dans mon tableau BDD la quantité que j’ai choisi dans la TxtBox « TextQuantite ». Pouvez-vous y jeter un œil svp? j'ai cherché sur internet/YouTube mais je ne trouve pas grand-chose en rapport avec ce que je veux faire. Jute pour information, il faut d’abord choisir un produit dans le UserForm « FrmRecherche » avant d’ouvrir le UserForm « frmBonLivraison », j’espère que je me suis bien expliqué . Merci d'avance ThauThème, vous êtes formidable.

18stockprojet2022.zip (560.38 Ko)

Cordialement.

image image

Bonsoir Minakashi, bonsoir le forum,

Pour pouvoir modifier le stock il faut savoir sur quelle ligne agir. J'ai donc rajouté une textbox (TextBox1) dans frmBonLivraison qui stocke le Code produit de FrmRecherche.

Ensuite j'ai modifié l'initialisation de frmBonLivraison, en rajoutant ça :

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 Sub UserForm_Initialize()
Set OB = Worksheets("BaseDeDonnées") 'définit l'onglet OB
Set TS = OB.ListObjects("TStock2022") 'définit le tableau structuré TS
TV = TS.DataBodyRange 'définit le tableau des valeurs TV (les données du tableau structuré sans les en-têtes)

Puis j'ai modifié btnCreerLivraison_Click en rajoutant ça au début :

Dim LI As Integer

LI = TS.ListColumns(1).Range.Find(Me.TextBox1.Value, , xlValues, xlWhole).Row

Puis ça à la fin :

TS.DataBodyRange(LI - TS.HeaderRowRange.Row, 8) = TS.DataBodyRange(LI - TS.HeaderRowRange.Row, 8) - CInt(TextQuantite.Value)

Le fichier modifié :

Wow merci ! petite question, je comprend pas trop comment fonctionne cette partie du code :

TS.DataBodyRange(LI - TS.HeaderRowRange.Row, 8) = TS.DataBodyRange(LI - TS.HeaderRowRange.Row, 8) - CInt(TextQuantite.Value)

Que veut dire CInt? et quel est la différence entre DataBodyRange et HeaderRowRange. Merci ThauThème.

Re,

Un tableau structuré TS se compose de deux parties bien distinctes : les en-têtes = TS.HeaderRowRange et les données = TS.DataBodyRange.
Quand je récupère LI, c'est la ligne dans l'onglet Excel (par exemple 11) mais dans le tableau structuré, comme il ne commence pas à la ligne 1 il faut décaler. Alors je me sert de la ligne des en-têtes du tableau structuré (LI - TS.HeaderRowRange.Row) pour avoir le bon numéro de ligne dans le tableau structuré.

C'est vrai que j'aurais pu aussi écrire :

OB.Cells(LI, 8).Value = OB.Cells(LI, 8).Value - CInt(TextQuantite.Value)

Cint permet de transformer un texte en entier (il génère un erreur si le texte n'est pas un chiffre). Comme une textbox renvoie toujours une valeur de type String (texte), il est toujours mieux de la convertir en entier pour faire un calcul même si çapeut fonctionner sans la conversion...

A ok je comprend beaucoup mieux merci. Passe une bonne soirée !

Cordialement

Rechercher des sujets similaires à "probleme txtbox userform"