Liste déroulante en cascade

1°) Concernant le point 2, vous appelez ça comme vous voulez. Ce n'est pas un problème, l'essentiel est que l'application fasse ce qu'il convient de faire. Je pense qu’il y a une incompréhension. Je souhaite simplement qu’il y est une extraction qui remonte les EPI dont le seuil mini a été dépassé. En même temps qu’il calcul le nombre d’Epi à commander. Dans le fichier ci-joint, j’ai ajouté une colonne (O) dans stock maiche. Dans accueil quand on clic sur "demande", je souhaite qu’il affiche que les lignes onglet "stock maiche" dont la colonne (O) est renseigné . En 1 coup d'oeil, la personne pourra passer commande sur notre site des EPI qui seront affiché.

2°) Concernant le point 4, vous n'êtes pas obligé de renseigner le TextBox "Nom de l'agent". Il me semble, qu'en termes de gestion, il est nécessaire de savoir qui a renseigné le tableau. Vous en aurez besoin pour l'analyse des données. Le responsable de site peut voir dans la feuille stock les EPI en dessous du Seuil et engager les commandes. Au pire s'il a un poil dans la main), il fait un tableau croisé dynamique pour faire remonter tous les EPI qui sont en dessous du seuil. je n’avais pas compris dans ce sens là. Mais c’est OK

3°) Concernant le point 6, là aussi vous appelez ça comme vous voulez : remplacez Stock Initial par Stock Maxi dans le Label du TextBox. C’est OK

Re : je reprends les codes pour intégrer la colonne "à commander" et refaire les calculs.

Cordialement

Bonjour à toutes et à tous.

Doubs25, ci-joint le fichier avec les corrections apportées.

Me faire un retour, merci.

Cordialement.

Bonjour,

Je ne vois pas de changement concernant :

1°) Concernant le point 2, vous appelez ça comme vous voulez. Ce n'est pas un problème, l'essentiel est que l'application fasse ce qu'il convient de faire. Je pense qu’il y a une incompréhension. Je souhaite simplement qu’il y est une extraction qui remonte les EPI dont le seuil mini a été dépassé. En même temps qu’il calcul le nombre d’Epi à commander. Dans le fichier ci-joint, j’ai ajouté une colonne (O) dans stock maiche. Dans accueil quand on clic sur "demande", je souhaite qu’il affiche que les lignes onglet "stock maiche" dont la colonne (O) est renseigné . En 1 coup d'oeil, la personne pourra passer commande sur notre site des EPI qui seront affiché.

Afin d'être sur la même réflexion, je pense qu'il faut que l'on enlève complètement l'userform "Demande". Est remplacer par une extraction des EPI à commander qui s'affiche dans l'onglet Stock maiche dont la quantité est supérieur à 0. C'est juste une extraction des EPI a commander. Au pire dans stock Maiche avec un filtre j'aurai les EPI à commander.

L'histoire de validation par le superviseur se fait sur notre logiciel interne et non dans ce fichier.

Re: comme je vous ai dit : vous pouvez faire l'analyse des données par des tableaux croisés dynamique.

Je pense qu'on a été bien plus loin que votre demande initiale. ici il s'agit de récolter des données et de les gérer, pas de les analyser.

Sur chaque tableau de stock vous mettez un tableau croisé dynamique. ou encore tout simplement avec le filtre excel.

Cordialement

Vous avez raison. Un grand merci

Quand je vais dans accueil, Aliment liste EPI, j'ai une erreur quand je veux ajouter un nouvel EPI.

image

Ok, je regarde ça et je vous fais un retour.

Cordialement

Bonjour à tous,

Si je peux me permettre ...

Formulaire "Liste_EPI" : le symbole Euro dans les Textbox pose problème.

Puis, Private Sub Cdb_Ajouter_Click() , il manque la variable "wsMo As Worksheet"

Enfin, le bloc "*Ajouter Données dans tableau "Stock Pontarlier", les noms sont à corriger.

R

Bonjour à tous,

Rizde Tapomme, bien sur que vous pouvez vous permettre. Surtout que personne n'hésite.

Merci de votre retour je regarde ça.

pouvez-vous être plus précis concernant le symbole Euro ?

La variable "wsMo : Effectivement c'était la raison du beug signalé par Doubs (corrigé)

Pour le block "Ajouter Pontarlier", corrigé ; un oubli de ma part.

Merci pour votre Retour.

Je remets le fichier dans la journée, quelques adaptations à faire.

Cordialement

Re : les beugs signalés sont corrigé, et j'ai apporté quelques modifications dans certains codes pour rendre l'utilisation plus souple.

Doubs25, attention :

1°) il faut bien remplir les différentes rubriques.

2°) il ne faut pas que l'on retrouve le même contenu dans "Catégorie" et "Sous-Catégories" et "Désignations". : exemple "Catégorie" = "Protection de la tête", "Sous-Categorie" =" lunettes de protection" et "Désignation "Lunettes de protection". Pour éviter cela je vous conseille de vous appuyer sur les dénominations "Officielles" des EPI.

3°) Ne pas laisser de lignes vides dans le tableau.

Dans l'attente de vos retour.

Bonjour à tous,

Les symboles Euro qui posent problème.

Formulaire : "Liste_EPI", section : "Enregistrer nouvel Article", le textbox : "Txt_PrixUHT" se remplit en ajoutant le symbole Euro, ce qui génère une erreur au moment du calcul à la saisie dans le "Stock Initial". C'est le format appliqué "# ##0.00€" qui semble la source.

Private Sub Txt_StockInit_Change()
    Me.Txt_ValStock = CCur(Me.Txt_PrixUHT) * CDbl(Me.Txt_StockInit)
End Sub

Une suggestion : Placer le symbole Euro en dehors des textbox et changer tous les formats pour "# ##0.00".

Attention : le code contient des "# ##0.00€" et des "# ##0.00 €" (sans ou avec espace devant le symbole Euro).

Je n'ai testé que ce petit bout là.

R

Re :

Rizde Tapomme, chez moi il n'y a aucun problème sur ce textBox. Le calcul se fait sans anicroche. J'ai rectifié le € avec et sans espace.

Pouvez-vous me dire précisément ce qu'il se passe ?

Continuer à tester les autres formulaires et dites moi.

Merci pour votre participation.

Cordialement.

Bonjour à tous,

J'ai réinstallé mon ordinateur dernièrement, c'est peut-être ma config.

Après avoir saisi le prix unitaire, en tapant le premier chiffre dans le champs "Stock Initiale", j'obtiens une fenêtre "Erreur d'exécution "13" : incompatibilité de type.

Je clique sur le bouton Débogage présent, survient une nouvelle fenêtre avec la ligne de code surlignée en jaune :

Private Sub Txt_StockInit_Change()

Me.Txt_ValStock = CCur(Me.Txt_PrixUHT) * CDbl(Me.Txt_StockInit)

End Sub

Si je modifie les formats pour enlever le symbole Euro dans les textbox, je n'ai pas d'erreur.

Si le demandeur n'a pas de souci à cette étape, il n'y a rien à modifier. L'affaire est Ketchup!

R

Bonjour à tous,

Effectivement, le souci que je rencontre proviennent de mon ordinateur.

Le format monétaire sur ma machine est le $. Vilain canadien que je suis.

Je change le format monétaire de ma machine pour € et l'erreur disparaît.

Désolé de mon intervention sur le sujet.

Il reste que je préfère placer les symboles monétaires en dehors des textbox.

Beau projet

R

Bonjour à toutes et à tous,

Rizde Tapomme, merci pour votre retour. Heureux que cela fonctionne pour vous.

Merci beaucoup pour l'appréciation.

Cordialement

Bonjour à toutes les personnes de la planète Terre,

Je cite : Continuer à tester les autres formulaires et dites moi.

Toujours dans : Formulaire : "Liste_EPI", section : "Enregistrer nouvel Article", Bouton : "Ajouter",

Les données semblent bien s'inscrire aux différents endroits, mais la "ListView" ne s'actualise pas.

De plus, en cliquant plusieurs fois sur le bouton "Ajouter", les infos s'inscrivent autant de fois sous le même "Index",

R

Bonjour à tous,

@Rizde Tapomme Vous devez modifier la procédure Cdb_Ajouter_Click() pour arriver au résultat :

Private Sub Cdb_Ajouter_Click()
    Dim ws As Worksheet, wsT As Worksheet, wsM As Worksheet, WsP As Worksheet, wsMo As Worksheet
    Dim tbl As ListObject
    Dim newRow As ListRow, cell
    Dim RechF As Range

    Application.ScreenUpdating = False

    '***************Ajouter Données dans tableau "Liste EPI"******************
    Set ws = Worksheets("Liste EPI")
    Set tbl = ws.ListObjects("Tbl_EPI")
    Set newRow = tbl.ListRows.Add

    With newRow.Range
        .Cells(1, 1).Value = CDbl(Me.Txt_Index.Value)
        .Cells(1, 2).Value = CDate(Me.Txt_Date.Value)
        .Cells(1, 3).Value = Me.Cbx_Categorie.Value
        .Cells(1, 4).Value = Me.Cbx_SousCategorie.Value
        .Cells(1, 5).Value = Me.Txt_Ref.Value
        .Cells(1, 6).Value = Me.Txt_Designation.Value
        .Cells(1, 7).Value = Me.Txt_Taille.Value
        .Cells(1, 8).Value = Me.Cbx_Fournisseurs.Value
        .Cells(1, 9).Value = CCur(Me.Txt_PrixUHT.Value)
        .Cells(1, 10).Value = CDbl(Me.Txt_StockInit.Value)
        .Cells(1, 11).Value = CDbl(Me.Txt_Seuil.Value)
        .Cells(1, 12).Value = CDbl(Me.Txt_ValStock.Value)
    End With

    '***************Mettre à jour le list view"******************
    With Me.ListView_RecherchArticle
        Dim lst As ListItem
        Set lst = .ListItems.Add(, , CDbl(Me.Txt_Index.Value)) 'Index
        With lst
            .ListSubItems.Add , , CDate(Me.Txt_Date.Value)  'Date
            .ListSubItems.Add , , Me.Cbx_Categorie.Value    'Catégorie
            .ListSubItems.Add , , Me.Cbx_SousCategorie.Value 'Sous-Catégorie
            .ListSubItems.Add , , Me.Txt_Ref.Value          'Réf Article
            .ListSubItems.Add , , Me.Txt_Designation.Value  'Désignation
            .ListSubItems.Add , , Me.Txt_Taille.Value       'Taille
            .ListSubItems.Add , , Me.Cbx_Fournisseurs.Value 'Fournisseur
            .ListSubItems.Add , , Format(Me.Txt_PrixUHT.Value, "# ##0.00€") 'Prix Unitaire
            .ListSubItems.Add , , CDbl(Me.Txt_StockInit.Value) 'Stock Initial
            .ListSubItems.Add , , CDbl(Me.Txt_Seuil.Value)  'Seuil
            .ListSubItems.Add , , Format(Me.Txt_ValStock.Value, "# ##0.00€") 'Valeur Stock
        End With
    End With

    If Not ws Is Nothing Then Set ws = Nothing
    If Not tbl Is Nothing Then Set tbl = Nothing
    If Not newRow Is Nothing Then Set newRow = Nothing
    If Not lst Is Nothing Then Set lst = Nothing

    '***************Ajouter Données dans tableau "Liste Stock"******************

    Set wsT = Worksheets("Stock")
    Set tbl = wsT.ListObjects("Tbl_Stock")
    Set newRow = tbl.ListRows.Add

    With newRow.Range
        .Cells(1, 1).Value = CDbl(Me.Txt_Index.Value)
        .Cells(1, 2).Value = Me.Cbx_Categorie.Value
        .Cells(1, 3).Value = Me.Cbx_SousCategorie.Value
        .Cells(1, 4).Value = Me.Txt_Ref.Value
        .Cells(1, 5).Value = Me.Txt_Designation.Value
        .Cells(1, 6).Value = Me.Txt_Taille.Value
        .Cells(1, 7).Value = Me.Cbx_Fournisseurs.Value
        .Cells(1, 8).Value = CCur(Me.Txt_PrixUHT.Value)
        .Cells(1, 11).Value = CDbl(Me.Txt_StockInit.Value)
        .Cells(1, 13).Value = CDbl(Me.Txt_Seuil.Value)
        .Cells(1, 14).Value = CDbl(Me.Txt_ValStock.Value)

    End With

    If Not ws Is Nothing Then Set ws = Nothing
    If Not tbl Is Nothing Then Set tbl = Nothing
    If Not newRow Is Nothing Then Set newRow = Nothing

    '***************Ajouter Données dans tableau "Stock Maîche"******************

    Set wsM = Worksheets("Stock Maiche")                    'wsm = Stock Maiche
    Set tbl = wsM.ListObjects("Tbl_StockMaiche")
    Set newRow = tbl.ListRows.Add

    With newRow.Range
        .Cells(1, 1).Value = CDbl(Me.Txt_Index.Value)
        .Cells(1, 2).Value = Me.Cbx_Categorie.Value
        .Cells(1, 3).Value = Me.Cbx_SousCategorie.Value
        .Cells(1, 4).Value = Me.Txt_Ref.Value
        .Cells(1, 5).Value = Me.Txt_Designation.Value
        .Cells(1, 6).Value = Me.Txt_Taille.Value
        .Cells(1, 7).Value = Me.Cbx_Fournisseurs.Value
        .Cells(1, 8).Value = CCur(Me.Txt_PrixUHT.Value)
        .Cells(1, 11).Value = CDbl(Me.Txt_StockInit.Value)
        .Cells(1, 13).Value = CDbl(Me.Txt_Seuil.Value)
        .Cells(1, 14).Value = CDbl(Me.Txt_ValStock.Value)

    End With

    If Not ws Is Nothing Then Set ws = Nothing
    If Not tbl Is Nothing Then Set tbl = Nothing
    If Not newRow Is Nothing Then Set newRow = Nothing

    '***************Ajouter Données dans tableau "Stock Morteau"******************

    Set wsMo = Worksheets("Stock Morteau")                  'wsMo = Stock Morteau
    Set tbl = wsMo.ListObjects("Tbl_StockMorteau")
    Set newRow = tbl.ListRows.Add

    With newRow.Range
        .Cells(1, 1).Value = CDbl(Me.Txt_Index.Value)
        .Cells(1, 2).Value = Me.Cbx_Categorie.Value
        .Cells(1, 3).Value = Me.Cbx_SousCategorie.Value
        .Cells(1, 4).Value = Me.Txt_Ref.Value
        .Cells(1, 5).Value = Me.Txt_Designation.Value
        .Cells(1, 6).Value = Me.Txt_Taille.Value
        .Cells(1, 7).Value = Me.Cbx_Fournisseurs.Value
        .Cells(1, 8).Value = CCur(Me.Txt_PrixUHT.Value)
        .Cells(1, 11).Value = CDbl(Me.Txt_StockInit.Value)
        .Cells(1, 13).Value = CDbl(Me.Txt_Seuil.Value)
        .Cells(1, 14).Value = CDbl(Me.Txt_ValStock.Value)

    End With

    If Not ws Is Nothing Then Set ws = Nothing
    If Not tbl Is Nothing Then Set tbl = Nothing
    If Not newRow Is Nothing Then Set newRow = Nothing

    '***************Ajouter Données dans tableau "Stock Pontarlier"******************

    Set WsP = Worksheets("Stock Pontarlier")                'wsP = Stock Pontarlier
    Set tbl = WsP.ListObjects("Tbl_StockPontarlier")
    Set newRow = tbl.ListRows.Add

    With newRow.Range
        .Cells(1, 1).Value = CDbl(Me.Txt_Index.Value)
        .Cells(1, 2).Value = Me.Cbx_Categorie.Value
        .Cells(1, 3).Value = Me.Cbx_SousCategorie.Value
        .Cells(1, 4).Value = Me.Txt_Ref.Value
        .Cells(1, 5).Value = Me.Txt_Designation.Value
        .Cells(1, 6).Value = Me.Txt_Taille.Value
        .Cells(1, 7).Value = Me.Cbx_Fournisseurs.Value
        .Cells(1, 8).Value = CCur(Me.Txt_PrixUHT.Value)
        .Cells(1, 11).Value = CDbl(Me.Txt_StockInit.Value)
        .Cells(1, 13).Value = CDbl(Me.Txt_Seuil.Value)
        .Cells(1, 14).Value = CDbl(Me.Txt_ValStock.Value)

    End With
    MsgBox "Données enregistrées dans les tableaux."
    Application.ScreenUpdating = True
End Sub

Je vous conseille aussi de 'Tuer' vos variable avant de les réinitialiser.

Vous devrier éviter d'initialiser vos variables en dur dans le code :

    Set wsM = Worksheets("Stock Maiche")                    'wsm = Stock Maiche
    Set tbl = wsM.ListObjects("Tbl_StockMaiche")
    Set newRow = tbl.ListRows.Add

Imaginer votre travail si vous décidez de changer le nom d'un tableau, ou de bouger le tableau de feuille....

Je vois aussi que vous n'avez pas de gestion d'erreurs. Que se passera t-il si un tableau n'existe pas ? Ou si une feuille a été renomée ? Excel va vous mettre un gros coup de pied....

Re,

Je regarde un peu le code et je vois que vous avez à chaque fois trois formulaires pour chaque actions et site exemple ; "Definir_Stock_Maiche", "Definir_Stock_Morteau", "Definir_Stock_Pontarlier".

Une technique qui vous éviterait de créer plusieurs formulaires serait d'en créer un seul d'y mettre un TabStrip le changement de page de celui-ci vous permettrait d'adapter le code pour chaque site. Pour ce faire vous devrez aussi changer certaines procédures exemple Créer_LsvDefStockMorteau qui deviendrait CreerLsvDefStock (Optional byval site As String = GlobalConst.Sites_Morteau_Name) cette procédure serait aussi unique pour tous les sites; Elle aurait en argument le site à traiter. (Dans l'exemple j'ai une constante pour le nom du site).

De plus. Dans chaque procédure initialise de ces formulaires le tri ne peut pas s'exécuter car vous faites un Exit Sub avant.

Private Sub UserForm_Initialize()
Dim ws As Worksheet, wsMo 'wsMo = Morteau
Dim i As Long, j, StrTemp, plageA, N

Set wsMo = ThisWorkbook.Sheets("Stock Morteau")
wsMo.Select

Créer_LsvDefStockMorteau

    Set ws = ThisWorkbook.Sheets("Parametres")

'**********************Chargement des catégories dans Cbx_Categorie****************************

Set ws = ThisWorkbook.Sheets("Parametres")

    ' --- Chargement des catégories depuis Tbl_Categorie ---
    Cbx_Categorie.Clear
    On Error GoTo ErrCategorie
    With ws.ListObjects("Tbl_Categorie")
        For i = 1 To .ListRows.Count
            Cbx_Categorie.AddItem .ListRows(i).Range(1, 1).Value
        Next i
    End With
    On Error GoTo 0
    Exit Sub

ErrCategorie:
    MsgBox "Le tableau 'Tbl_Categorie' est introuvable sur la feuille Parametres.", vbExclamation

With Cbx_Categorie 'Effectue un classement par Ordre Alphabétique dans le ComboBox " Cbx_Categorie"
      For i = 0 To .ListCount - 1
          For j = 0 To .ListCount - 1
              If .List(i) < .List(j) Then
                  StrTemp = .List(i)
                  .List(i) = .List(j)
                  .List(j) = StrTemp
              End If
          Next j
      Next i
End With

End Sub

A chaque lancement d'un formulaire vous sélectionner la feuille qui est en adéquation, cela peut-être bien pour certaines personnes, d'autres préféreraient rester sur la page d'accueil, vous devriez introduire un paramètre pour cela.

Re,Re

De plus, en cliquant plusieurs fois sur le bouton "Ajouter", les infos s'inscrivent autant de fois sous le même "Index",

Que voulez-vous comme possibilité ?

  • Soit fermer le formulaire après la saisie.
  • Soit continuer la saisie pour cela il faudrait une gestion de l'état des boutons.

Bonjour à toutes et à tous,

Rizde Tapomme, j'ai rectifier le tir : si après avoir Ajouter un article on veut en ajouter un autre, la zone "Enregistrer un Nouvel Article" se vide et permet la saisie d'un nouvel article. La Listview se met à jour également.

Jean-Paul, Merci pour votre intervention. Vos remarques sont intéressantes. Je ne suis qu'un petit bricoleur. Du coup je vais en apprendre un peu plus grâce à vous. Je vais regarder de très près vos propositions et essayer de corriger.

N'hésitez surtout pas à intervenir, très formateurs pour tous.

Cordialement.

Rechercher des sujets similaires à "liste deroulante cascade"