Utiliser le tableau structuré TabProduits pour remplir le formulaire

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.

13budgets-v3.xlsm (59.66 Ko)

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 Sub

le fichier:

23budgets-v3-1.xlsm (67.45 Ko)

Cdlt

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.

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à.

11budgets-v1.xlsm (87.20 Ko)
Rechercher des sujets similaires à "utiliser tableau structure tabproduits remplir formulaire"