GénérerTabBDCBBMDA ne s'exécute pas

Bonjour à toutes et à tous,

Tous les GénérerTabBDCBB... s'exécutent correctement sauf le budget mensuel DA (cellule LD1). La procédure se trouve dans le module MGénérerTables, procédure Sub GénérerTabBDCBBMDA.

D'avance merci à celle (s), celui (ceux) qui trouveront la solution au problème.

26budgets-1.zip (371.04 Ko)

Bonjour BUDGETS,

Un essai :

Sub GénérerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires() ' ici

   Application.ScreenUpdating = False

   'Effacer le tableau structure TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires.
   EffacerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires

   DerLig = Sheets("BD crédits budgétaires").ListObjects("TabBDCréditsBudgétaires").DataBodyRange.Rows.Count

   'De la première ligne à la dernière ligne du tableau structuré TabBDCréditsBudgétaires.
   For I = 1 To DerLig
      'Si c'est un budget mensuel dépenses alimentaires.
      If Range("TabBDCréditsBudgétaires[Catégorie]").Item(I) = "Budget mensuel dépenses alimentaires" Then

         Dim cell As Range, listObj As ListObject

         ' Référence à la cellule potentielle
         Set cell = Cells(I, "LC")

         ' Lire le nom si la cellule appartient à un tableau structuré
         On Error Resume Next
         Set listObj = cell.ListObject
         On Error GoTo 0

         'Générer le nom de la table mensuelle concernée en fonction de mois BM.
         TableMensuelle = listObj

         'Ajouter une ligne dans le tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires et récupérer son indice (J).
         Range(TableMensuelle).ListObject.ListRows.Add

         'Compte le nombre de lignes du tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires au fur et à mesure du remplissage.
         J = Range(TableMensuelle).ListObject.ListRows.Count

         'Insèrer les données du tableau structuré TabBDCréditsBudgétaires (indice I) dans le tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires (Indice J).
         Range(TableMensuelle).Columns(1).Item(J) = Range("TabBDCréditsBudgétaires[Catégorie]").Item(I)
         Range(TableMensuelle).Columns(2).Item(J) = Range("TabBDCréditsBudgétaires[Article]").Item(I)
         Range(TableMensuelle).Columns(3).Item(J) = Range("TabBDCréditsBudgétaires[Code article]").Item(I)
         Range(TableMensuelle).Columns(4).Item(J) = Range("TabBDCréditsBudgétaires[Total BM]").Item(I)
         Range(TableMensuelle).Columns(5).Item(J) = Range("TabBDCréditsBudgétaires[Date création]").Item(I)
         Range(TableMensuelle).Columns(6).Item(J) = Range("TabBDCréditsBudgétaires[Numéro création]").Item(I)
         Range(TableMensuelle).Columns(7).Item(J) = Range("TabBDCréditsBudgétaires[Mois BM]").Item(I)
      End If
   Next I

   ' message test
   MsgBox Range(TableMensuelle).Columns(1).Item(1) & Chr(10) & _
      Range(TableMensuelle).Columns(2).Item(1) & Chr(10) & _
      Range(TableMensuelle).Columns(3).Item(1)

   Application.ScreenUpdating = True
End Sub

Bizz

Bonjour Bizarre,

Merci pour ta réponse. Je vais l'imprimer et modifier ma procédure. Je te teindrai au courant.

Bonnes journée et continuation. Prends bien soin de toi.

Bonjour BUDGETS,

Deux petites coquilles dans le code que je t'ai soumis.

On Error Resume Next et On Error GoTo 0 étaient en commentaire, j'aurais dû les supprimer lors du nettoyage.

Désolé

Bizz

Dans le code, ils ne sont pas en commentaires. Dois-je les mettre en commentaires ou les garder comme instruction exécutable ?

Bonjour BUDGETS,

Il faut les supprimer.

Bizz

J'ai bien le msgbox avec trois lignes et le bouton de commande OK mais le tableau structuré reste néanmoins vide. J'espère que je n'ai pas fait d'erreur de réécriture.

J'ai travaillé sur le fichier qui est sur mon pc de bureau. Comme je n'avais pas les résultats escomptés, j'ai ouvert le même fichier qui est sur mon disque dur externe. J'ai supprimé les instructions de la procédure concernée et j'ai fait un copier coller des instructions de votre message de ce matin. Le résultat est identique, donc apparemment je n'ai pas fait d'erreur de réécriture.

21budgets-1.zip (353.19 Ko)

mille excuses, la tableau se remplit mais à la ligne 26. Pourquoi cette ligne et non pas à la ligne 6 ? Comme dans chaque tableau structuré, le Mois BM est vide, peut-être dois-je le remplir préalablement manuellement ? J'ai testé mais il continue à enregistrer à la ligne 26. J'ai créé un deuxième article Budget mensuel dépenses alimentaires : toujours à la ligne 26, il efface le précédent.

Bonjour,

Résumons :

Module "MGénérerTables : Sub GénérerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires()

La recherche, qui était dans ton code, donne la ligne 26 pour le mois de juin en colonnes "LA:LG", feuille "BD Crédits budgétaires".
Tableau : TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires6

   For I = 1 To DerLig
      'Si c'est un budget mensuel dépenses alimentaires.
      If Range("TabBDCréditsBudgétaires[Catégorie]").Item(I) = "Budget mensuel dépenses alimentaires" Then

Donne plus de détails sur la démarche et sur ce qui devrait se produire ainsi qu'où devrais-je voir les résultats.

Ton fichier contient un code passablement lourd et complexe, ça prend beaucoup d'explications.

Bizz

La recherche, qui était dans ton code, donne la ligne 26 pour le mois de juin en colonnes "LA:LG", feuille "BD Crédits budgétaires".
Tableau : TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires6

 For I = 1 To DerLig
      'Si c'est un budget mensuel dépenses alimentaires.
      If Range("TabBDCréditsBudgétaires[Catégorie]").Item(I) = "Budget mensuel dépenses alimentaires" Then
Je n'ai pas compris. Si je comprends bien, il va sur le mois de juin car on fait cela au mois de juin. Si on était en juillet, il irait sur la ligne juillet ? Je souhaiterais que si Mois BM = Janvier, alors écrire sur la ligne 6 d'une part et que tout Ligne qui comprend Janvier dans la colonne Mois BM aille dans le premier tableau structuré, sans supprimer aucune ligne. D'où la ligne dans le code Générer le nom de la table mensuelle concernée en fonction du Mois BM (dans ma version du fichier joint hier, on faisait référence à Month (Mois BM) qui a disparu dans ta version; ma version entraînait d'ailleurs une erreur d'incompatibilité de type). Dans le nom du tableau, un nom se finit par 1, le suivant par 2 et ainsi de suite jusqu'à 12. Sauf erreur de ma part, le 1 signifie Janvier, le 2 février et ainsi de suite jusqu'à décembre.
J'avais déposé un fil demandant de m'aider à trouver une solution pour alléger le fichier mais je n'ai jamais eu de réponse. Si tu penses pouvoir me proposer un fichier allégé pour arriver aux mêmes résultats, d'avance, je t'en remercie. Il y a quelqu'un qui souhaitait avoir une feuille BD crédit budgétaires remplie manuellement pour voir ce qu'il pourrait me proposer comme allègement mais il ne répond plus aux différents fils que je soumets au forum d'une part, et quand je lui envoie un message privé, il m'est indiqué que je ne peux pas ou plus contacter cette personne, d'autre part. Si tu veux essayer de la contacter, il s'agit de BeGood et de me dire si tu reçois également ce message.
Pour ce qui est de générer tables, qu'elles soient avec ou sans table mensuelle, j'ai des idées d'allégement mais je ne sais pas comment les mettre en œuvre jusqu'au bout. Il est en est de même pour ce qui de certains effacements. Le principe serait ceci : une série d'instructions pour ce qui spécifique à une table, puis une instruction (ou plusieurs) pour lui dire d'aller dans une procédure qui regrouperait tout ce qui est commun quelque soit la catégorie. On pourrait faire appel au moment opportun à un select case sur Catégorie puis à des cases. Je pense, mais comme je suis con, idiot, abruti, et j'en passe des meilleures (ou des mauvaises), que cela pourrait alléger le programme.

Bonjour BUDGETS,

Un autre essai :

Sub GénérerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires()
   Application.ScreenUpdating = False

   'Effacer le tableau structure TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires.
   EffacerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires
   'Recherche de la dernière ligne du tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires. C'est le nombre de lignes maximum que pourra prendre le ta-
   'bleau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires. On va balayer toutes les lignes du tableau structuré TabBDCréditsBudgétaires pour reconstruire
   'le tableau structuré TabBDCréditsBudgétaireBudgetMensuelDépensesAlimentaires. Si chaque cellule "Catégorie" du tableau structuré TabBDCréditsBudgétaires est égale à "Bud-
   'get Mensuel dépenses alimentaires" alors on remplit le tableau structuré "TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires", pour toutes les autres valeurs, on ne
   'fait rien.

   DerLig = Sheets("BD crédits budgétaires").ListObjects("TabBDCréditsBudgétaires").DataBodyRange.Rows.Count

   'De la première ligne à la dernière ligne du tableau structuré TabBDCréditsBudgétaires.
   For i = 1 To Range("TabBDCréditsBudgétaires").ListObject.ListRows.Count
      'Si c'est un budget mensuel dépenses alimentaires.
      If Range("TabBDCréditsBudgétaires[Catégorie]").Item(i) = "Budget mensuel dépenses alimentaires" Then
         'Générer le nom de la table mensuelle concernée en fonction de mois BM.
         Dim LettreChiffremois(), Z As Byte, QuelMois As Byte
         LettreChiffremois = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
         ' convertir les mois-lettres en chiffres
         For Z = LBound(LettreChiffremois) To UBound(LettreChiffremois)
            If Not IsEmpty(Range("TabBDCréditsBudgétaires[Mois BM]").Item(i + 1)) Then
               If LettreChiffremois(Z) = Trim(Range("TabBDCréditsBudgétaires[Mois BM]").Item(i + 1)) Then
                  QuelMois = Z
                  Exit For
               End If
            End If
         Next Z
         TableMensuelle = "TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires" & QuelMois
         'Ajouter une ligne dans le tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires et récupérer son indice (J).
         Range(TableMensuelle).ListObject.ListRows.Add

         'Compte le nombre de lignes du tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires au fur et à mesure du remplissage.
         J = Range(TableMensuelle).ListObject.ListRows.Count

         'Insèrer les données du tableau structuré TabBDCréditsBudgétaires (indice I) dans le tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires (Indice J).
         Range(TableMensuelle).Columns(1).Item(J) = Range("TabBDCréditsBudgétaires[Catégorie]").Item(i)
         Range(TableMensuelle).Columns(2).Item(J) = Range("TabBDCréditsBudgétaires[Article]").Item(i)
         Range(TableMensuelle).Columns(3).Item(J) = Range("TabBDCréditsBudgétaires[Code article]").Item(i)
         Range(TableMensuelle).Columns(4).Item(J) = Range("TabBDCréditsBudgétaires[Total BM]").Item(i)
         Range(TableMensuelle).Columns(5).Item(J) = Range("TabBDCréditsBudgétaires[Date création]").Item(i)
         Range(TableMensuelle).Columns(6).Item(J) = Range("TabBDCréditsBudgétaires[Numéro création]").Item(i)
         Range(TableMensuelle).Columns(7).Item(J) = Range("TabBDCréditsBudgétaires[Mois BM]").Item(i)
      End If
   Next i
   Application.ScreenUpdating = True
End Sub

Bizz

Bonjour BUDGETS,

Le code précédent mouliné dans ChatGPT :

Sub GénérerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires()
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    ' Effacer le tableau structure TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires.
    EffacerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires

    Dim ws As Worksheet
    Dim tableBD As ListObject
    Dim tableMensuelle As ListObject
    Dim i As Long, j As Long
    Dim catégorie As String
    Dim moisBM As String
    Dim lettreChiffreMois()
    Dim quelMois As Byte
    Dim Z As Byte

    Set ws = Sheets("BD crédits budgétaires")
    Set tableBD = ws.ListObjects("TabBDCréditsBudgétaires")

    lettreChiffreMois = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")

    For i = 1 To tableBD.ListRows.Count
        catégorie = tableBD.ListColumns("Catégorie").DataBodyRange.Cells(i, 1).Value
        moisBM = Trim(tableBD.ListColumns("Mois BM").DataBodyRange.Cells(i, 1).Value)

        If catégorie = "Budget mensuel dépenses alimentaires" And Not IsEmpty(moisBM) Then
            For Z = LBound(lettreChiffreMois) To UBound(lettreChiffreMois)
                If lettreChiffreMois(Z) = moisBM Then
                    quelMois = Z
                    Exit For
                End If
            Next Z

            Set tableMensuelle = ws.ListObjects("TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires" & quelMois)
            tableMensuelle.ListRows.Add
            j = tableMensuelle.ListRows.Count

            With tableBD.DataBodyRange.Rows(i)
                tableMensuelle.ListColumns(1).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Catégorie").Index).Value
                tableMensuelle.ListColumns(2).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Article").Index).Value
                tableMensuelle.ListColumns(3).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Code article").Index).Value
                tableMensuelle.ListColumns(4).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Total BM").Index).Value
                tableMensuelle.ListColumns(5).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Date création").Index).Value
                tableMensuelle.ListColumns(6).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Numéro création").Index).Value
                tableMensuelle.ListColumns(7).DataBodyRange.Cells(j, 1).Value = .Cells(1, tableBD.ListColumns("Mois BM").Index).Value
            End With
        End If
    Next i

    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox "Une erreur est survenue: " & Err.Description, vbCritical
    Application.ScreenUpdating = True
End Sub

Bizz

Bonsoir Bizarre,

Merci pour cette nouvelle mouture. Je verrai tout cela demain matin, vers onze heures puis je te donnerai mon avis.

Bonjour Bizarre,

C'est mieux mais ce n'est pas encore parfait.

1) Un clic sur le bouton de commande EffacerTabBDCBBNDA semble ne pas s'exécuter. Dans la procédure Sub PurgerTabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires() (module MAffichageEffacementMasquage), sur cette ligne TableMensuelle = "TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires" & I, j'ai une erreur : utilisation incorrecte de la propriété.

2) Dans le tableau structuré TabBDCréditsBudgéraires, regarde les lignes 29 et 30, 37 et 38 : il y a Ananas et Agneau. Dans le tableau structuré TabBDCréditsBudgétairesBudgetMensuelDépensesAlimentaires, en janvier, c'est l'agneau qu

19budgets-1.zip (357.47 Ko)

i sort trois fois alors qu'il devrait y avoir un agneau et un ananas. Pour le mois de Février, il reste vide. De plus, il y a une erreur : l'indice n'appartient pas à la sélection.

Bonjour BUDGETS,

Premier souci :

- TableMensuelle était déclarée "String" et la boucle, sur les noms pour purger le contenu des tableaux, fonctionnait.

- Dans cette nouvelle version, TableMensuelle est déclarée "ListObject" en "Public".

Une solution à ce problème : Utiliser un nom différent pour "TableMensuelle as ListObject" ou pour "TableMensuelle as String" dans les contextes où ces "TableMensuelle" sont utilisées.

C'est-à-dire quand "TableMensuelle" est un nom de tableau (tel dans "Purger .....") ou quand "TableMesuelle" est un tableau.

Bizz

Note : s.t.p., Mentionne les changements afin d'aider à comprendre les nouveaux soucis.

J'ai remplacé TableMensuelle par TableauMensuel as String.

Je n'ai pas compris la note.

19budgets-1.zip (357.99 Ko)

Feuille BD crédits budgétaires : clic sur le bouton de commande de la colonne LD : les données vont être effacées, clic sur ok, une erreur est survenue: l'indice n'appartient pas à la sélection. Désolé, je n'ai pas d'autres informations m'indiquant où cette erreur existe.

Bonjour à tous,

@BUDGETS

Vos données mensuelles de février ne sont pas dans votre tableau TabBDCrédits..., on vous a déjà fait des remarques similaires plusieurs fois,

Déclarer vos données en local et non en public vous évitera les déboires précédents, on vous a déjà fait cette remarque plusieurs fois

Vos noms à rallonge sont abominables, on vous a déjà fait cette remarque plusieurs fois,

et tant d'autres ...

Ceci dit votre fichier corrigé
21budgets-1-modif.zip (349.03 Ko)

Bonjour BeGood,

Quelle bonne et agréable surprise de vous retrouver ici de nouveau. J'ai eu peur qu'il vous soit arrivé quelque chose de grave, d'autant plus qu'il n'est plus possible de vous envoyer un message privé. Je vais regarder le code et modifier mon fichier en conséquence.

Quelles sont les modifications que vous avez apportées ? Apparemment, c'est sur générer la table mensuelle en fonction du mois BM.

Vous m'avez demandé de fournir des tableaux remplis manuellement. Dois-je continuer pour les autres item de budget mensuel ou cela vous suffit pour voir comment on pourrait alléger le fichier ? Je vais terminer d'écrire le code des items de budget mensuel. Quand cela sera fini, je créerai les objets des quatre formulaires ( UF02 à UF05 inclus), à moins que ne trouviez une solution pour n'utiliser qu'un seul formulaire dans lequel je n'aurai plus le problème de cet article existe déjà.

@BeGoodet @Arturo83

Bonjour à tous les deux,

Si BeGood n'est pas satisfait ni du fichier joint ni de mes explications, je lui demande de me le faire savoir et, éventuellement, je déciderai ou pas de continuer nos conversations.

Feuille BD crédits budgétaires, tableau source structuré TabBDCréditsBudgétaires : il a été rempli entièrement manuellement. Par la suite, il va de soi qu'il serait rempli par différentes procédures. Sauf erreur de ma part, un clic sur un bouton de commande Effacer réagit correctement. Les procédures du module MGénérerTables réagissent comme convenu lors d'un clic sur un bouton de commande Générer pour remplir les tableaux structurés destinataires (à partir du tableau structuré source BDCréditsBudgétaires); Le clic sur un bouton Retour renvoie bien sur la feuille accueil. Pour imprimer, inutile de tester, aucun procédure n'a été créée. Dans te tableau source, il est fort possible que certaines colonnes disparaissent car elles s'avéreraient inutiles. Pour remplir Total budget primitif qui figure dans le formulaire CréerCréditsBudgétairesDM1, pour remplir Total décision modificative numéro une qui figure dans le formulaire CréerCréditsBudgétairesDM2, il sera fait appel à la procédure qu'Arturo83 m'a écrite mais que je n'ai pas encore testée. Pourquoi quatre formulaires, me direz-vous ? Dans un ancien fichier, je n'avais qu'un seul formulaire de création : je créai les crédits budgétaire budget primitif, pas de problème; je créai les crédits budgétaires DM1, DM2 et mensuel : je choisissais l'article et là, j'avais le message cet article existe déjà et il était impossible de faire marche arrière pour remplir les tbPlus, moins. BeGood ou Arturo83 m'a conseillé alors de créer quatre formulaires. Quand vous aurez pris connaissance de la feuille BD Crédits budgétaires et de ses tableaux structurés, le contenu manuel du tableau source sera effacé afin qu'il puisse se remplir à partir des différentes procédures adéquates.

Si vous avez besoin de renseignements complémentaires, je reste à votre disposition pour vous les fournir, si cela m'est possible. Si vous pensez pouvoir résoudre le problème cet article existe déjà et, de ce fait, de n'utiliser qu'un seul formulaire de création, d'avance merci de me faire une proposition aussi vite que cela vous sera possible afin de je ne perde pas mon temps à créer des procédures qui deviendraient inutiles.

Discussions avec BeGood

Erreur : vous ne pouvez pas contacter ce membre.

Bonnes fin de soirée, nuit et continuation. Prenez bien soin de vous.

Bien cordialement.

23budgets-1-modif.zip (335.24 Ko)

Bonjour,

Vous avez mis cinq mois pour répondre à ma demande ! Est-ce un délai raisonnable ?

Vous aviez un formulaire et quatre BD, vous ne vous en êtes pas sorti. Vous voulez maintenant essayer avec quatre formulaires, et une seule BD pour votre niveau VBA c'est encore plus difficile.

Il vous reste encore à tester quatre BD et quatre formulaires c'est sûrement le plus simple pour vous.

La solution ultime étant zéro formulaires et zéro BD.

Il n'est pas question d'avoir zéro formulaire et zéro bd, désolé.

Rechercher des sujets similaires à "generertabbdcbbmda execute pas"