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
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 SubUne 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 SubJe 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.AddImaginer 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 SubA 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.
