XL 2016 Vba- listbox-format champs userform

OtsoHW

XLDnaute Nouveau
Bonjour à tous.
S'il vous plait, J'ai quelques petits soucis avec mon code vba ci joint.

1. J'aimerais qu'en cliquant sur mon bouton : "Ajouter une nouvelle ligne de facture", ma listbox soit alimentée par les éléments renseignés.
Mais lorsque je valide, il n'y que la Col1 qui est renseignée.

2. J'aimerais qu'aucune saisie ne soient autorisée au niveau de mes combobox, un peu comme lorsqu'on crée des listes déroulantes avec validation des données.

3. J'aimerais que les formats (date, quantité et prix unitaire) soient également figés, pour n'autoriser que des valeurs correspondant au format spécifié.

Vous trouverez ci joint mon fichier.
Merci d'avance pour votre aide.
 

Pièces jointes

  • final report.xlsm
    36.7 KB · Affichages: 14

patricktoulon

XLDnaute Barbatruc
Bonjour
mis a part les recommandations de mes camarades de jeu ( que je salut de bon mardi matin)
ta feuille de report contient un tableau structuré
  1. tu le fait commencer en "B" alors qu'il commence en "A" --->WRONG WAY!!"
  2. tu travaille avec un range alors que c'est un tableau structuré--->WRONG WAY!!"
  3. tu confond l'indexation de ligne colonne listbox et range ou tableau structuré base 0 et 1 -->WRONG WAY!!"
  4. (plus grave !!)tu "essaie!!"d'envoyé les données de la listbox vers la table1 directement alors qu'il y a une date et des numérique -->WRONG WAY!!"
pour info les valeurs quelqu'elles soient dans les controls d'un userform sont de type string(texte)
si tu dois faire des calcul ou des totaux ben tu es chocolat ;)

5. je m’abstiendrais de parler de la structure du code, tu es peut être un débutant

conclusion;
on vire le code complet du userform on reprends tout à zero

je te bloque la saisie a la main dans les combobox (demandé me semble t il )
je t'ajoute l'impossibilité de saisir autre chose que des numerique dans les textbox Qté /prix
je paramètre ta listbox avec un columncount et columnwidths requis
je la met en style option pour le multi select

je re code le userform dans son entièreté

voilà je n'aurais pas fait comme ca mais si c'est ta conception ....
bonne journée ;)
 

Pièces jointes

  • final report V° patricktoulon.xlsm
    38.8 KB · Affichages: 20

ChTi160

XLDnaute Barbatruc
Bonjour OtsoHW
Bonjour Patrick
j'ai remarqué qu'il y a une Ligne de Code qui n'a pas était placée à la Bonne Place (il est tôt ! Lol)
VB:
Private Sub BtnValider_Click()
    Dim Table As ListObject, I&
    If liste.ListCount = 0 Then MsgBox "pas de ligne à transférer sur ""table1""": Exit Sub
    Set Table = Range("table1").ListObject
    With liste
        For I = 0 To .ListCount - 1
            Dim Arr
            Arr = Array(.List(I, 0), CDate(.List(I, 1)), .List(I, 2), .List(I, 3), CDbl(.List(I, 4)), CDbl(.List(I, 5)), "", "", "")
            Select Case .List(I, 0)
            Case "CREDIT": Arr(6) = CDbl(.List(I, 6))
            Case "COMPTANT": Arr(7) = CDbl(.List(I, 6))
            Case "PDG": Arr(8) = CDbl(.List(I, 6))
            End Select            
              Table.ListRows.Add.Range.Value = Arr 'mis Ici dans la Boucle
        Next
        End With
       ' Table.ListRows.Add.Range.Value = Arr 'apostrophé Ici'
     MsgBox "Votre facture a bien été enrégistrée", vbOKOnly + vbInformation, "CONFIRMATION"
End Sub
Bonne Journée
Jean marie
 

ChTi160

XLDnaute Barbatruc
Re
Patrick !
je viens de me rendre compte qu'a l'origine les Calculs sont fait via des formules dans
les Colonnes "G,H,I" tu n'en tiens pas compte pourquoi ?
est ce préférable ?
car dans un tableau structuré les formules incrémentent , je crois !
Bonne Journée
jean marie
 

patricktoulon

XLDnaute Barbatruc
parlons conception
si je comprends bien chaque ligne ajouté est une facture étant donné que la facturation n'est pas indexée
le message devrait donc dire "l'enregistrement de la/les facture(s) a bien été effectué"

problème demain du veux voir les factures que tu a fait pour une certaine personne ou dans certaines conditions ben tu est chocolat car il n'y a pas d'indexation si ce n'est que la date qui ne t'apporte rien
puisque tu peux très bien faire x facture par jour pour x ou y raison

supposition que tu fasse x ou y factures avec x lignes et que tu index la facturation
demain tu cherche la facture x tu retrouve toute tes données
pour cela il faut ajouter une colonne a ton TS et t listbox
bref plein de petite choses comme ca qui pourraient apporter un plus niveau ergonomique
 

patricktoulon

XLDnaute Barbatruc
oui ben on peut laissé si tu veux les formule
MAIS DANS CE CAS c'est
VB:
Private Sub BtnValider_Click()
    Dim Table As ListObject, I&
    If liste.ListCount = 0 Then MsgBox "pas de ligne à transférer sur ""table1""": Exit Sub
    Set Table = Range("table1").ListObject
    With liste
        For I = 0 To .ListCount - 1
            Dim Arr
            Arr = Array(.List(I, 0), CDate(.List(I, 1)), .List(I, 2), .List(I, 3), CDbl(.List(I, 4)), CDbl(.List(I, 5)))
            Table.ListRows.Add.Range.Resize(, 6) = Arr
      Next
        End With
       MsgBox "Votre facture a bien été enrégistrée", vbOKOnly + vbInformation, "CONFIRMATION"
End Sub
 

OtsoHW

XLDnaute Nouveau
Bonjour JM.
Et merci pour ton aide. Mon problème 1 est résolu.
Mais je suis encore buté sur les points 2 et 3.
Bonsoir
Dans un premier temps il te faut modifier le titre de ton Fil (minuscules)
Sinon pour ton problème mettre le ColumnCount de ta ListBox à 7
ainsi que le
'Affectation des variables
nbControles = 7 'Ici
il faut aussi éviter d'utiliser des Noms qui appartiennent au Vocabulaire de l'application( Ex : Listitem)
Jean Marie
 

Discussions similaires

G
  • Question
Réponses
1
Affichages
430