Microsoft 365 Filtre listview comboBox en cascades avec tableau structuré

Piment

XLDnaute Occasionnel
Bonjour à tous,
Une fois encore je me retourne vers vous afin de m'aider.
J'ai un problème avec le filtre de ma listView.
Les ComboBox 1 et 2 fonctionnent à priori sans problème, par contre la comboBox 3 ne filtre pas par rapport à la comboBox 2: donc forcément le tri de la comboBox 4 est faussé.
Si quelqu'un a la bonté de jeter un coup d'œil sur le fichier joint et trouver l'erreur, je lui en serais reconnaissant.
Merci à vous.
 

Pièces jointes

  • Test Magasin.xlsm
    77.4 KB · Affichages: 6

Piment

XLDnaute Occasionnel
Fanch55, Jean-Marie, TooFatBoy, Dranreb, le Forum, bonjour à tous.
Me revoilà.
J'ai besoin, à nouveau d'un coup de main.
Je travaille toujours sur mon fichier. J'y ai apporté quelques changements.
Le problème que je rencontre est le suivant:
Dans l'Usf "Alimenter Catalogue": j'ai modifié la sub Cmb_Enregistrer() afin d'intégrer un nouveau TextBox (Txt_PrixVenteU").
J'ai rajouté la Sub PrixVenteU_Change. Apparemment tout fonctionne dans les ComboBox et le TextBox de la Frame1. Par contre, lors de l'enregistrement, il beug: message affiché: Erreur d'exécution [Microsoft][Pilote ODBC Excel] Erreur de syntaxe dans l'expression "'0.50 € ` PVUnit/TTC`='2,00 €.
J'ai aussi, sur ce même Usf , une anomalie: lors de son ouverture, apparaît dans le coin gauche le contenu de la Combox "Catégorie". Il faut que je click 2 fois sur le comboBox pour accéder à son contenu.
Par avance, grand merci.
Bonne après-midi à vous.
 

Pièces jointes

  • Test Magasin Essaie 1 (1) Tableau.xlsm
    205.4 KB · Affichages: 6

fanch55

XLDnaute Barbatruc
Par contre, lors de l'enregistrement, il beug: message affiché: Erreur d'exécution [Microsoft][Pilote ODBC Excel] Erreur de syntaxe dans l'expression "'0.50 € ` PVUnit/TTC`='2,00 €.
Salut, il manque une virgule dans le select :
1708685985789.png

Le bon code :
VB:
           Update_Fields _
               " Update " & Get_Table([Tbl_Liste_Fleurs]) & _
               " Set    `Fournisseurs`='" & Me.Cbx_Fournisseurs & "', " & _
               "          `Prix/Botte`='" & Me.Tbx_PrixBotte & "', " & _
               "           `Catalogue`='" & Me.Cbx_Catalogue & "', " & _
               "                 `Nom`='" & Me.Cbx_Noms & "', " & _
               "             `Couleur`='" & Me.Cbx_Couleurs & "', " & _
               "         `Type Bouton`='" & Me.Cbx_TypBouton & "', " & _
               "     `Nbre Tige/Botte`='" & Me.Tbx_NbrTigeBot & "', " & _
               "             `PU/Tige`='" & Me.Tbx_PrixTige & "', " & _
               "         `PV Unit/TTC`='" & Me.Txt_PrixVenteU & "' " & _
               " where " & Sqleq("Catégorie", Me.Cbx_Catégorie) & _
               "   and " & Sqleq("Catalogue", Me.Cbx_Catalogue) & _
               "   and " & Sqleq("Nom", Me.Cbx_Noms)
J'ai aussi, sur ce même Usf , une anomalie: lors de son ouverture, apparaît dans le coin gauche le contenu de la Combox "Catégorie"
Changer l'initialize :
Enrichi (BBcode):
Private Sub UserForm_Initialize()
    Cmd_Enregistrer.Visible = False
    Me.Cbx_Catégorie.SetFocus
    Me.Cdb_Ferme_EnregistFoutnisseur.SetFocus
End Sub
 

Piment

XLDnaute Occasionnel
Salut Fanch55,
Merci de m'avoir répondu si vite. Je me doutais fortement que ce la devait être une conn.... de ma part. Changement effectué : ça fonctionne, hormis changement dans l'initialise. Je suis obligé de clicker 2 fois sur le combobox pour l'activer. Ça finit par être pénible à force. Manque de fluidité du coup. J'ai contourné le problème par le biais de la Frame:
VB:
Private Sub Frame1_Click()
Me.Cbx_Catégorie.SetFocus
End Sub
En cliquant sur la Frame le focus est direct dans le ComboBox "Catégorie".
Merci encore à toi pour tout.
Je vous tient au courant au fur et à mesure.
 

fanch55

XLDnaute Barbatruc
Je viens de refaire les tests sur le dernier classeur que tu as envoyé et si tu as bien mis :
VB:
Private Sub UserForm_Initialize()
    Cmd_Enregistrer.Visible = False
    Me.Cdb_Ferme_EnregistFoutnisseur.SetFocus
End Sub
l'userform ouvre systématiquement le Cbx_Catégorie à son lancement !!!!!

piment.gif

🤔
 
Dernière édition:

Piment

XLDnaute Occasionnel
Fanch55, Jean-Marie, TooFatBoy, Dranreb, le Forum, bonjour à tous.
Fanch55: j'ai bien mis la "sub Initialize" comme toi, mais chez moi, il ne réagit pas comme démontré.
Il me faut cliquer dans la comboBox, puis sur la pointe de flèche du comboBox pour avoir accès au contenu de la liste déroulante de cette dernière. C'est pourquoi, j'ai trouvé la solution de la Frame.
J'ai une question sur la listview de l'usf "Commande: comment je peux réduire ou augmenter la largeur de l'une des colonnes de la listview ? Comment ne faire apparaître que certaines colonnes de la ListView ?
Merci de ton retour.
Bon Après-midi.
 

Piment

XLDnaute Occasionnel
Fanch55, j'aimerais apporter un petite amélioration à l'Usf "Alimenter_Catalogue" : lors de la saisie dans le ComboBox "Cbx_Nom", si la fleur n'existe pas dans le catalogue, avoir un message qui le lui dit, vide le "cbx_Noms", et met le focus sur le "cbx_CXatalogue pour modifier le choix. Si la fleur n'existe toujours pas: message "modifier la Catégorie".
J'ai essayé avec tes codes de la sub "Cmd_Enregistrer", mais sans succès.
Avec mes remerciements.
 

fanch55

XLDnaute Barbatruc
J'ai une question sur la listview de l'usf "Commande: comment je peux réduire ou augmenter la largeur de l'une des colonnes de la listview ? Comment ne faire apparaître que certaines colonnes de la ListView ?

C'est la sub Userform_Initialize qui définit l'apparence de la listview :
VB:
Private Sub UserForm_Initialize()
Dim Target As Range, Cel As Range, Lvh As ColumnHeader, Ncom

    Txt_Dates = Date
    Get_Fields ComboBox1, "Select Distinct Catégorie from " & Get_Table([Tbl_Liste_Fleurs]) & " order by Catégorie"
  
   '**************Récupère les données du tableau "Tbl_Fournisseurs" dans la ComboBox "Cbx_Fournisseur"****************************
    Get_Fields Cbx_Fournisseur, "Select Distinct `Nom Fournisseurs` from " & Get_Table([Tbl_Fournisseurs]) & " order by `Nom Fournisseurs`"
    Cbx_Fournisseur.AddItem Empty, 0: Cbx_Fournisseur.ListIndex = 0

  
   '************** préparation de la listvew avec les nom de colonnes
    With Me.ListView_List_Fleurs
        .Gridlines = True:         .View = lvwReport
        .FullRowSelect = True:     .Font.Size = 10
        .Sorted = True
        With .ColumnHeaders
            .Clear
            For Each Cel In [Tbl_Liste_Fleurs[#Headers]].Cells
              ' on nomme la colonne de la listview comme l'entête de la table
                Set Lvh = .Add(Text:=Cel.Text, Width:=Cel.Width)
              ' on définit l'alignement de la colonne comme celle de la colonne de la table
                Select Case Cel.Offset(1).HorizontalAlignment
                    Case xlHAlignCenter:    Lvh.Alignment = lvwColumnCenter
                    Case xlHAlignLeft:      Lvh.Alignment = lvwColumnLeft
                    Case xlHAlignRight:     Lvh.Alignment = lvwColumnRight
                End Select
              ' on a défini la largeur des colonnes comme celles des colonnes de la table
              ' on va spécifier des largeurs particulières
                Select Case Lvh.Text
                    Case "Type Bouton":     Lvh.Width = Lvh.Width / 2 ' Colonne réduite de moitié
                    Case "Catalogue":       Lvh.Width = 0             ' Colonne masquée
                End Select
            Next
        End With
    End With

   '*****************************Attribue un nouveau N° de commande automatiquement****************************
'   Je suppose que la règle de ce N° est encore en gestation
'   faire référence au nombre de lignes existantes n'est pas judicieux
'   ( si une commande est annulée et de ce fait détruite, la dernière ligne est partie dans les choux )
'
    ' On va chercher si une commande existe pour l'année en cours
    Set Target = Range("Tbl_Detail_Commande[N°" & vbLf & " Commande]")
    Set Cel = Target.Find("C-" & Year(Date), Target(1), xlValues, xlPart, , xlPrevious)
    If Cel Is Nothing Then Ncom = 1 Else Ncom = Split(Cel, "- ")(1) + 1
    Me.Txt_NumCommande = "C-" & Year(Date) & "- " & Format(Ncom, "# 000")

End Sub
 

fanch55

XLDnaute Barbatruc
Fanch55, j'aimerais apporter un petite amélioration à l'Usf "Alimenter_Catalogue" : lors de la saisie dans le ComboBox "Cbx_Nom", si la fleur n'existe pas dans le catalogue, avoir un message qui le lui dit, vide le "cbx_Noms", et met le focus sur le "cbx_CXatalogue pour modifier le choix. Si la fleur n'existe toujours pas: message "modifier la Catégorie".
J'ai essayé avec tes codes de la sub "Cmd_Enregistrer", mais sans succès.
Avec mes remerciements.
Ce n'est pas une bonne idée : tu t'interdis d'ajouter une fleur si elle ne fait pas partie d'un catalogue or il n'y a pas de table Catalogue qui définit les fleurs dépendantes
 

Piment

XLDnaute Occasionnel
Désolé de te faire bosser un samedi. Vba quand je suis dedans, difficile de me faire décrocher.
Je regarde tes codes pour la ListView et je te fais un retour.
Pour le comboBox "Cbx_Noms", j'entends bien ta remarque, mais il n'est pas possible que si le cas se présente, on procède comme je le souhaitais et si il ne trouve pas la fleur, alors le process continue: on l'ajoute:
msgbox cette fleur n'existe pas! voulez-vous l'ajouter? Oui : on ajoute, Non on sort. Si c'est une erreur : elle se trompe de catalogue ou de catégorie, elle rectifie sa saisie dans le combox, sinon on ajoute.
J'ai rencontré le problème dans mes tests, et j'ai dû aller dans le tableau et chercher, chercher, chercher, avant de me rendre compte que je m'étais trompé dans la saisie du catalogue. Une autre fois ça a été dans la catégorie.
Vue le nombre de fleurs déjà recencé!
Gros merci à toi.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour une évolution tout à fait possible en partant de mon classeur, ouvrez en encore une autre, si vous voulez.
Il n'a pour l'instant que la mise à jour articles fleurs (Ajout, modification et suppression) mais il serait possible d'ajouter deux manips, une pour pour verser les articles ayant une quantité commandée dans des feuilles bon de commande par fournisseurs, l'autre pour transférer les quantités commandées vers le stock.
 

Discussions similaires

Réponses
69
Affichages
5 K
Réponses
12
Affichages
658

Statistiques des forums

Discussions
315 093
Messages
2 116 137
Membres
112 668
dernier inscrit
foyoman