XL 2019 Création de VBA pour Userform pour formulaire

MaxXx39

XLDnaute Nouveau
Bonjour,
Je suis en train d'améliorer un tableur pour madame pour la gestion de son salon de coiffure,
J'ai déjà créé pas mal de chose dessus (planning, contact, compta...)
J'avais créé un onglet pour la gestion du stock et vente de produit, mais vraiment pas efficace.

Je voudrais le refaire, j'ai pour cela commandé une douchette pour scanner les codes barres (en attente de livraison)

Pour se qui est du fichier :
Ce que je ne sais pas faire c'est créer les code VBA (Vente de produits, Achat de produit et ajout d'un nouveau produit dans la BDD) qui sont des formulaires.
Créer les userform eux même pas de soucis, mais c'est pas le plus compliqué...

Je vous met un fichier épurer avec explications,

Merci
 

Pièces jointes

  • Stock.xlsm
    67.3 KB · Affichages: 58

MaxXx39

XLDnaute Nouveau
Bonjour,
J'ai réussi a faire le userform pour les nouveaux produits, il m'en reste 2 à faire.

J'ai 4 questions,

  1. Pour les 2 autres, comment intégré la fonction recherche?
    Si j'écris le code barre dans textbox 1, je souhaiterai qu'il recherche le code barre dans la feuille "produits" dans la colonne A, et que dans textbox 2 il m'affiche le résultat sur la même ligne de la colonne B, textbox 3 la colonne 3, etc...
  2. Pour la date, comment afficher la date du jour par défaut, mais quelle soit modifiable dans une textbox
  3. Comment faire pour que suivant la checkbox qui est coché, le résultat soit dans la colonne F, G ou H et également qu'il y ai 1 case de coché ni +ni - sinon impossibilité de valider la saisi.
  4. Comment mettre des unités dans les textbox? (€)
Un grand merci!
 

Pièces jointes

  • Stock.xlsm
    66.5 KB · Affichages: 22

Dranreb

XLDnaute Barbatruc
Nonjour.
Personnellement je ne fait jamais de recherche dans un UserForm, j'utilise des ComboBox ayant reçu une liste de textes, et s'il est MatchFound sa propriété ListIndex donne directement le décalage par rapport à la 1ère ligne de l'entrée choisie.
J'ai un calendrier perso qui s'utilise facilement. Il faudrait une TextBox ou même un Label
On prend plutôt des OptionButton pour des cas mutuellement exclusifs.
Utilisez un la fonction Format pour mettre en forme un texte, Puis pour le renvoyer à destination de valeurs de cellules, CDbl pour le reconvertir en nombre, CDate pour le reconvertir en date.
Cette ressource se charge de pas mal de choses.
Utilisez de préférence des plages mises sous forme de tableaux Excel
Je n'accède jamais au coup par coup aux cellules, toujours via un tableau dynamique d'une ligne que je charge et verse en une seule instruction dans toute la ligne.
 

Pièces jointes

  • MonCalendrier.xlsm
    83.5 KB · Affichages: 30

MaxXx39

XLDnaute Nouveau
Nonjour.
Personnellement je ne fait jamais de recherche dans un UserForm, j'utilise des ComboBox ayant reçu une liste de textes, et s'il est MatchFound sa propriété ListIndex donne directement le décalage par rapport à la 1ère ligne de l'entrée choisie.
J'ai un calendrier perso qui s'utilise facilement. Il faudrait une TextBox ou même un Label
On prend plutôt des OptionButton pour des cas mutuellement exclusifs.
Utilisez un la fonction Format pour mettre en forme un texte, Puis pour le renvoyer à destination de valeurs de cellules, CDbl pour le reconvertir en nombre, CDate pour le reconvertir en date.
Cette ressource se charge de pas mal de choses.
Utilisez de préférence des plages mises sous forme de tableaux Excel
Je n'accède jamais au coup par coup aux cellules, toujours via un tableau dynamique d'une ligne que je charge et verse en une seule instruction dans toute la ligne.
Merci du retour complet,

C'est trop abstrait pour moi, je ne comprend pas grand chose... trop de chose a ne pas oubier. J'ai essayé se matin toute la matinée, toujours en erreur...

Oui j'ai vu après mon post que OptionButton était bien approprié,

Pas de soucis pour mettre mes valeurs dans un tableau dynamique !

Si vous avez qulques pistes, je suis preneur,
Merci!
 

MaxXx39

XLDnaute Nouveau
VB:
Private Sub ComboBox1_Change()

End Sub

Private Sub CommandButton1_Click()

Dim L As Integer
If MsgBox("Confirmez-vous l'insertion de ce nouveau produit ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("Vente").Range("a65536").End(xlUp).Row + 1
     Range("B" & L).Value = TextBox6
     Range("C" & L).Value = TextBox1
     Range("E" & L).Value = TextBox2
          Range("I" & L).Value = TextBox2
       Range("I" & L).Value = Frame1
        End If
     
        For Each bouton_Farme1 In Farme1.Controls
            If bouton_Farme1.Value Then
                Farme1 = bouton_Farme1.Caption
            End If
        Next
End Sub
Private Sub CommandButton2_Click()
  Unload Me
End Sub

Private Sub Frame1_Click()

End Sub

Private Sub UserForm_Click()

End Sub

Voici pour VENTE,
Par contre, je ne sais pas du tout comment faire pour faire apparaitre la description du produit et le prix de vente qui correspond au code barre, ainsi que mettre par défaut la date du jour dans textbox6

Merci!
 

Dranreb

XLDnaute Barbatruc
Mettez des noms mnémoniques aux contrîoles pour mieux vous y retrouver. ComboBox1 ne veut rien dire, CBxCodeBar si. Dans la Private Sub UserForm_Initialize affectez à sa propriété List un tableau dynamique d'une colonne où vous aurez converti ces numéros en textes, sinon la frappe ne les reconnaitra pas, ni probablement la saisie par douchette. Au CBxCodeBar_Change sa propriété ListIndex donnera le numéro de ligne - 1 contenant le code et la désignation.
La date du jour c'est Date tout simplement.
Mettez votre plage sous forme de tableaux Excel. Elle sera représenté par un ListObject plus pratique (pas besoin notamment, pour ajouter une ligne de connaître d'abord le numéro de la dernière utilisée).
 
Dernière édition:

MaxXx39

XLDnaute Nouveau
Mettez des noms mnémoniques aux contrîoles pour mieux vous y retrouver. ComboBox1 ne veut rien dire, CBxCodeBar si.
;) c'est sur!
Dans la Private Sub UserForm_Initialize affectez à sa propriété List un tableau dynamique d'une colonne où vous aurez converti ces numéros en textes, sinon la frappe ne les reconnaitra pas, ni probablement la saisie par douchette. Au CBxCodeBar_Change sa propriété ListIndex donnera le numéro de ligne - 1 contenant le code et la désignation.
o_O Le je comprend plus...
Affecter une propriété comment? a quoi? avec quelle forme d'ecriture?

La date du jour c'est Date tout simplement.
Ok, mais est-ce que je peux la modifier quand même?
Mettez votre plage sous forme de tableaux Excel. Elle sera représenté par un ListObject plus pratique (pas besoin notamment, pour ajouter une ligne de connaître d'abord le numéro de la dernière utilisée).
C'est noté.

Dans mon code j'ai une erreur sur la ligne
L = Sheets("Vente").Range("a65536").End(xlUp).Row + 1
Il me l'affiche en jaune une fois que je clic sur OK

Est-ce qu'une âme charitable souhaiterais bien me faire une des 2 userform complète? Vente ou Achat? que je m'en inspire pour la 2ème? (Si possible Vente avec les Optionbutton)

Merci :)
 

Dranreb

XLDnaute Barbatruc
CBxCodeBar.List = TCodBar
Vous pouvez modifier une TextBox, bien sûr.
Avec un ListObject plus de souci, on se fiche de la ligne, c'est LOt.ListRows.Add.Range.Value2 = TVL
TVL étant le tableau dynamique d'une ligne où vous aurez versé les textes des contrôles convertis en valeurs (Tableau des Valeurs de la Ligne).
 

MaxXx39

XLDnaute Nouveau
Bonjour,

J'ai réussi a faire un truc qui me plait,

Mais j'ai 3 questions,

- les résultats de mon formulaire doit s'appliquer sur 3 feuilles différentes suivant le bouton cliqué, (click sur ACHAT, alors feuille ACHAT, Vente Feuille Vente etc...)
Or aujourd'hui le résultat d'affiche dans la page ouverte au moment du clic...

- Est-il possible de mettre la valeur d'une TextBox dans un label? Je souhaiterais mettre la valeur de ma textbox2 dans mon label12

- Comment faire quitter le formulaire après avoir appuié sur Nouveau, achat ou vente (CommandButton3-4-5)



Merci!
 

Pièces jointes

  • Produits.xlsm
    33.2 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Donnez des noms mnémoniques à vos contrôles bon sang !
Déclarez une variable globale Private LOtCible As ListObject et affectez lui le ListObject qui représente le 1er et seul tableau de la bonne feuille quand ce qui la détermine change. Les ListObject sont dans une collection ListObjects de l'objet Worksheet qui représente la feuille.
Pour un label c'est sa propriété Caption.
Me.Hide pour quitter le formulaire sans le décharger,
Unload Me pour le quitter et le décharger.
 

MaxXx39

XLDnaute Nouveau
Merci,
Non, je n'ai pas donné de nom, je suis parti d'un tuto donc c'était beaucoup plus simple avec les mêmes nom.

Vraiment merci de votre aide et du temps accordé, mais Bon sang, je ne comprend rien a votre aide depuis le début, c'est comme si je vous donnais les pièces d'un meuble Ikea sans image ni notice, vous allez le faire en 5h au lieu de 1h et encore pas dit qu'il soit fonctionnel.

Déclarez Comment on déclare quelque chose? une variable globale Private LOtCible As ListObject et affectez lui Comment affecter? le ListObject qui représente le 1er et seul tableau de la bonne feuille quand ce qui la détermine change. Les ListObject sont dans une collection ListObjects de l'objet Worksheet qui représente la feuille.??
Pour un label c'est sa propriété Caption.
Et? il faut ecrire quoi et ou pour que ca fonctionne?

Je ne demande pas un code complet, la preuve j'essai de le faire en parallèle, mais une proposition de code modifié du mien serrais beaucoup plus simple et rapide pour tout le monde, mes 3 questions doivent représenter quelques lignes.

Merci
 

cp4

XLDnaute Barbatruc
Bonjour MaxXx39 :), Dranreb;),

Un lien qui pourrait t'aider pour les tableaux structurés.

Pour la déclaration d'une variable en Globale. On le fait en début du module et en-dehors des procédures afin que cette variable puisse être utilisée dans toutes les procédures du module.

Tu l'as déjà fait dans le code de l'userform
VB:
Option Explicit

Dim Ws As Worksheet 'Ws est déclarée en global

'Pour le formulaire

Private Sub UserForm_Initialize()

Set Ws = Sheets("STOCK") 'Affectation de la feuille "STOCK" à la variable globale Ws
'suite code'
End Sub
edit: un essai pour vente ci-joint fichier, avec gestion saisie numérique textbox quantité et prix de vente.
 

Pièces jointes

  • Copie de Produits.xlsm
    32.2 KB · Affichages: 43
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 723
Messages
2 081 934
Membres
101 844
dernier inscrit
pktla