Repport d'une liste dans plusieurs tableau

Bonjour,

Alors voilà, j’essaye de réaliser un fichier excellent assez complet permettant de gérer mon budget et apprendre le logiciel mais… je suis assez nul dessus.
J’utilise plusieurs liste incrémentable (revenus & dépenses) que j’ai réalisées sur une feuille « paramètres » et je voudrais les réutiliser comme sources pour des tableaux sur d’autres feuilles (Prévisionnel et autres).

A chaque fois que j’essaie d’appeler via une liste ou le tableau, je me retrouve avec une erreur « #propagation ! »
De plus j’aimerais faire correspondre les données du prévionnel sur le bilan (voir fichier), aurait-il une façon plus rapide et facile qu’appeler les cellules une à une afin d’en sortir des tableaux croisé dynamique ? (que je ne maîtrise absolument pas à l’heure actuel lol).

Merci à tous ceux qui essayerons de m’aider :heart:
Teste_budget.xlsx (24,9 Ko)

impossible d’appeler cela dans un tableau structuré, désolé !!!
Je ne comprend pas l’explication des TCDs, on n’a pas besoin de ces listes.

hello
éventuellement sous forme de cellule avec liste déroulante
Teste_budget.xlsx (27,4 Ko)

@taz067 En effet cela pourrait faire l’affaire. L’ajout dans une liste de la feuille paramètre « n’ajoutera » pas de façon dynamique automatique mais bon. Les données ne devraient pas trop changer.

Pour expliquer un peu mieux le résultat que j’imaginais cela vient de cette vidéo (Lien Youtube)
Si cela peut donner d’autres pistes.

Après il suffit d’augmenter la taille de la liste déroulante, normalement, on peut la rendre dynamique, il faut juste que je retrouve de comment faire

1 « J'aime »

Si tu retrouves, je suis très très intéressé.
Je cherche de mon côté dès que je rentre chez moi. En tout cas merci beaucoup pour cette piste.

Une façon, pas des plus orthodoxe, est de nommer toute la colonne, par exemple dans l’onglet paramètre, la colonne B en « revenue », à partir de ce moment tout ce qui sera rajouté dans cette colonne sera inclus dans la liste déroulante

Teste_budget.xlsx (25,6 Ko)

Bonjour taz067
Je me permet cette petite suggestion

Au lieu de

=Paramètres!$B$3:$B$11

qui est figé

mettre comme ceci :

=DECALER(Paramètres!$B$3;;;NBVAL(Paramètres!$B:$B)-1)

qui est dynamique

A choisir avec ta solution

J’ai trouvé plus simple encore avec la fonction indirect et la mise en forme en tableau ce qui rend la liste dynamique aussi

Teste_budget.xlsx (28,7 Ko)

Parfait parfait
Juste une précision quant à la formule à utiliser pour le paramétrage de la liste déroulante pour qu’elle soit dynamique rien de plus

J’avais trouvé une formule pour des listes déroulante sans tableau, mais n’était pas arrivé à l’adapter, je me suis rabattu sur la fonction indirect, mais comme toujours toutes contributions est la bienvenue et me permet aussi de progresser

en fait je viens juste de comprendre ta formule
parametre!$B3;;; va créer la liste déroulante a partir de B3 et le NBVAL lire toute la colonne B -1 ligne pour l’entête

Exacte juste après à adapter ces cellules en fonction de la colonne et de la première à inclure dans la liste « B3 » le nombre de cellules composant la liste NBVAL(Paramètres!$B:$B)-1 (à adapter le -1 à cette fin pour eviter des choix vides en fin)
Puis bien adapter le nom de l’onglet à celui qui possède les données ici " Paramètres"

oubien avec des plages nommées qui sont exactement (une colonne de ) votre tableau
Teste_budget (2).xlsx (32,8 Ko)

Alors j’ai résolu mon problème en mixant un peu tout.
J’ai repris ma base avec les listes (comme @Cow18 m’a fait repenser) et je l’ai ajouté partout.
Du coup, chaque ligne liée aux Revenus donne une liste déroulante qui est dynamique avec la liste du tableau de la page « Paramètres »
Mais j’ai également ajouté les listes dans la colonne Prévisionnel de la feuille « Bilan Mensuel » pour qu’elle prenne bien en compte l’ajout de lignes.
Enfin, pour simplifier la tâche, j’ai créé une macro qui ajoute une ligne en décalant les tableaux vers le bas pour ne plus avoir qu’à ajouter le nouveau revenu et le choisir dans le menu déroulant.

J’ai tout réuni sur le fichier de Cow18 (j’ai uniquement réalisé pour les revenus) afin d’avoir votre avis et sinon que cela puisse servir à d’autre :slight_smile:
Teste_budget avec macro.xlsm (38,9 Ko)

je pense souvent, ça doit être fatigant, déclarer tous ces variables et savoir que VBA ne demande pas cela si vous pensez bien …

Sub teste()
     Dim c, r
     
     With Range("TabRevenus").ListObject     'ce tableau dans la feuille "paramètres"
          If .ListRows.Count = 0 Then MsgBox "vide !!!": Exit Sub
          Set c = .DataBodyRange.Cells(.ListRows.Count, 1)     'derniere cellule du tableau
     End With

     With Range("RevenusMensuel").ListObject     'ce tableau en "bilan mensuel"
          r = Application.Match(c.Value, .ListColumns(1).DataBodyRange, 0)     'vérifier si ce code n'existe pas encore dans la première colonne de ce tableau
          If IsNumeric(r) Then MsgBox Chr(34) & c.Value & Chr(34) & " existe déjà !!!": Exit Sub     'mal chance
          .ListRows.Add.Range.Range("A1").Value = c.Value     'ajouter ligne avec ce code dans la première cellule
     End With
End Sub

PS. dans un module ordinaire (ne pas un module d’une feuille) on peut assigner un tableau structuré avec une cellule qui fait part du tableau, donc avec une plage nommée, ce n’est plus nécessaire de savoir quelle feuille :heart_eyes:
PS2. la construnction « With …End With » est magnifique (et dangeureuse)

1 « J'aime »

C’est magistral !
Une question pour savoir si cela est possible (si oui je risque de t’appeler Dieu lol)
Imaginons que pour fluidifier encore plus, lorsque je clique sur le bouton pour exécuter la macro VBA, une boite de dialogue s’ouvre (aucune idée si sous Excel cela est possible), dedans on rentre un nom, puis l’ajoute au tableau des Revenus et vérifie ou ajoute comme celle que tu as mis ci-dessus.

Sub Nouveau_Revenu()
     Dim c, r, sPoste As String

     sPoste = Application.InputBox("c'est quoi, ton nouveau revenu ?", UCase("Ajouter nouveau Revenu"), Type:=2)     'demander le nouveau poste
     If Len(sPoste) = 0 Then Exit Sub

     With Range("TabRevenus").ListObject     'ce tableau dans la feuille "paramètres"
          r = ""
          If .ListRows.Count > 0 Then r = Application.Match(sPoste, .ListColumns(1).DataBodyRange, 0)     'vérifier si ce code n'existe pas encore dans la première colonne de ce tableau
          If Not IsNumeric(r) Then .ListRows.Add.Range.Range("A1").Value = sPoste     'il n'existe pas = ajouter au tableau dans paramètres
     End With

     With Range("RevenusMensuel").ListObject     'ce tableau en "bilan mensuel"
          r = ""
          If .ListRows.Count Then r = Application.Match(sPoste, .ListColumns(1).DataBodyRange, 0)     'vérifier si ce code n'existe pas encore dans la première colonne de ce tableau
         If Not IsNumeric(r) Then .ListRows.Add.Range.Range("A1").Value = sPoste       'ajouter ligne avec ce code dans la première cellule
     End With

End Sub


1 « J'aime »

Génial ! Sa permet de faire exactement se que je souhaitait au début.
Un grand merci à tous :heart:

1 « J'aime »

@Cow18, toi qui maitrise bien les macro VBA j’ai une question.
Un macro peux tel testé une phrase pour si un mot donner es dedans et du coup si oui afficher un message dans une cellule ?