Utiliser le tableau structuré TabProduits pour remplir le formulaire
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour à toutes et à tous,
Yvouille m'a proposé une solution pour remplir le cbPériodeArticleBudgétaire et, de là, que le tbCodePériodeArticleBudgétaire se remplisse automatiquement: le tout donne le résultat souhaité. Puis suite à cette proposition, je lui ai demandé si il était possible d'utiliser le tableau structuré TabProduits pour remplir le cbArticleBudgétaire qui permettra de sortir automatiquement le tbCodeArticleBudgétaire. Pour ne pas apparaître pour une personne qui ne fait rien d'elle même et qui se repose uniquement sur les autres, j'ai tenté de modifier le code de diverses procédures, ce qui entraine une erreur. Et là, Yvouille décide unilatéralement de quitter le projet et de ne plus m'aider. Vive la convivialité et l'entraide (voir fil Remplissage du cbPériodeArticleBudgétaire).
Donc j'espère qu'il y aura une âme compatissante pour répondre à ma question (peut-on utiliser le tableau structuré TabProduitspour remplir le cbArticleBudgétaire ?), et si oui, de me proposer les instructions alors nécessaires avec, en plus, le remplissage automatique du tbCodeArticleBudgétaire. D'avance, je vous en remrcie.
Bonjour,
Pour commencer, dans la feuille "Listes", j'ai fusionné le tableau des catégories avec celui des produits pour n'en faire plus qu'un: "TabProduits".
Presque toutes les macros de l'userform ont été modifiées dont voici le contenu:
Option Explicit
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub UserForm_Activate()
'Initialisation de la Zone de liste modifiable cbCatégorieArticleBudgétaire. Va aller dans la feuille Listes, tableau structuré TabCatégories et afficher le contenu de la colonne Nom
'catégorie dans la Zone de liste modifiable cbCatégorieArticleBudgétaire du formulaire UF01CréationArticlesBudgétaires.
cbCatégorieArticleBudgétaire.List = Range("TabProduits").Value
End Sub
Private Sub cbCatégorieArticleBudgétaire_Change()
Dim Tbl As Range
Dim i As Long, lastRow As Long, Cpt As Long, Nb_CatSel
Dim CatSel As String, Result() As String
tbCodeCatégorieArticleBudgétaire.Value = cbCatégorieArticleBudgétaire.Column(1) 'constitution de la liste des catégories
' Sélection de la catégorie choisie
CatSel = tbCodeCatégorieArticleBudgétaire 'enregistrement dans la variable "CatSel" du tbCodeCatégorieArticleBudgétaire
Nb_CatSel = Len(CatSel) 'Nombre de caractères qui constitue cette variable
' Récupération de la plage TabProduits
Set Tbl = Range("TabProduits") 'initialisation de la variable "Tbl" pour le tableau "TabProduits"
' Initialisation du tableau "Result"
ReDim Result(1 To Tbl.Rows.count) 'Dimensions maximales du tableau "Result" avant analyse
Cpt = 0 'initialisation d'un compteur à 0
'Balayage de toute la colonne "Nom produit" du tableau "TabProduits" pour en constituer une liste en fonction de la catégorie sélectionnée
For i = 1 To Tbl.Rows.count 'pour chaque ligne du tableau "TabProduits"
If Left(Tbl.Cells(i, 4).Value, Nb_CatSel) = CatSel Then 'si les lettres du code produit correspondent à celles du code catégorie
Cpt = Cpt + 1 'on incrémente un compteur
Result(Cpt) = Tbl.Cells(i, 3).Value 'et on mémorise le produit dans la liste "Result"
End If
Next i
' Restitution de "Result" dans la combobox
If Cpt > 0 Then 'si le cpt est supérieur à 0, c'est à dire, si Result n'est pas vide
ReDim Preserve Result(1 To Cpt) 'nouvelles dimensions du tableau "Result" onbtenues
cbArticleBudgétaire.List = Result 'on recopie la liste des produits mémorisées dans "Result" dans la combobox "cbArticleBudgétaire"
Else
cbArticleBudgétaire.Clear
End If
End Sub
Private Sub cbArticleBudgétaire_Change()
Dim i As Long
' rajout Yvouille
With Sheets("Listes") 'récupération des valeurs
i = WorksheetFunction.Match(cbArticleBudgétaire, .Range("D:D"), 0)
tbCodeArticleBudgétaire = .Range("E" & i)
cbPériodeArticleBudgétaire = .Range("F" & i)
tbCodePériodeArticleBudgétaire = .Range("G" & i)
End With
End Suble fichier:
Cdlt
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour Arturo83,
Merci beaucoup pour le travail fourni. Je vais regarder cela de près dans la soirée. avez-vous lu le fil Remplissage du cbPériodeArticleBudgétaire) ? Sauf erreur ou omission de ma part, je crois avoir signalé que le tableau structuré TabProduits aurait deux nouvelles colonnes à coup sûr (Conditionnement article budgétaire, code conditionnement article budgétaire) et que deux autres sont envisagées (quantité pour un repas, quantité pour la journée). Avec votre fichier, j'espère que je pourrais me débrouiller seul pour écrire le code de ces quatre colonnes. Je viens tester : le résultat correspond bien à ce que je souhaitais. Je vais réécrire le code dans mon fichier.xltm dont la feuille liste est plus complète et tester selon les catégories dépenses ou recettes. Je vous tiendrai au courant. Encore un grand merci pour votre travail. Si j'ai bien compris, si je change l'ordre des colonnes, la WorksheetFunction.Match doit faire obligatoirement référence d'une part au cbArticleBudgétaire et, d'autre part à la colonne où se trouve le nom des produits.
Bonnes fin de soirée, nuit et continuation. Prenez bien soin de vous. Très cordialement et chaleureusement.
- Messages
- 1'214
- Excel
- 2024 FR
- Inscrit
- 18/07/2014
- Emploi
- Retraité fonction publique territoriale
Bonjour Arturo83,
Les premiers tests sont concluants et donnent bien le résultat escompté.
Je vais maintenant créer le code de la procédure cmdvalidationCréationArticleBudgétaire_Click. Après, il faudra réfléchir aux problèmes de renuméroter et d'avertissement que l'article existe déjà.