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 Teste_budget.xlsx (24,9 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.
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
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"
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 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
PS2. la construnction « With …End With » est magnifique (et dangeureuse)
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
@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 ?