Microsoft 365 Résolu par Djidji59430 - Budget Gestion

Djeen

XLDnaute Nouveau
Bonjour à tout le monde.

Je débute avec Excel et comme de juste je me fais les crocs avec une gestion de budget perso pour commencer.

J'ai un tableau avec les champs Date, Montant, Solde, Catégorie, Ordre, Libellé, Pointage.
J'ai mis en place sur la colonne Montant une MFC (mise en forme conditionnelle) qui change en fonction de Pointage (Oui/Non).
J'ai mis en place des segments pour les filtres des enregistrements des champs.

Dans ma feuille où se trouve le tableau, j'ai une cellule où j'ai stocké le montant Initialisation.
Je veux avoir le Solde Banque (qui est la dernière ligne du solde Pointé)
Je veux avoir le Solde Réel (qui est la dernière ligne du solde cumulé Pointé plus Non Pointé)
La colonne C contient le Solde (avec une MFC verte pour Pointé et Rouge pour Non Pointé)
Malheureusement pour avoir le montant Pointé correspondant à celui de la Banque, quand je met dans une cellule la formule "recherche(9^9;"C:C"), je tombe systématiquement sur le solde non pointé qui est la dernière ligne réelle de mon tableau, alors que je l'ai filtré avec Pointage OUI et que sur cette dernière ligne filtrée j'ai mon solde correspondant à la Banque. Cette formule "recherche(9^9;"C:C") ne tient pas compte du filtrage.

Dois-je passer par VBA ? Est-ce possible sans ? Quelqu'un peut me donner un exemple ?
Comment enlever le filtre et resélectionner le tout ?



J'ai essayé avec ça :
VB:
Sub macOui()

' macOui Macro
' Filtrage pour Pointage
'
 Dim pointe As Single
 Dim DerniereLigneUtilisee As Single
    ActiveSheet.ListObjects("tblSaisieOp").Range.AutoFilter Field:=10, Criteria1:="Oui"
    Range(Selection, Selection.End(xlDown)).Select
    DerniereLigneUtilisee = Range("C" & Rows.Count - 2).End(xlUp).Row
    MsgBox (DerniereLigneUtilisee)
    Range("C" & DerniereLigneUtilisee - 1).Select
    pointe = ActiveCell.Value
    Range("B3").Value = pointe
    MsgBox (pointe)
   
End Sub
Sub macNon()

' macNon Macro
' Filtrage pour Solde Pointé
'
     
    ActiveSheet.ListObjects("tblSaisieOp").Range.AutoFilter Field:=10, Criteria1:="Non"
    Range(Selection, Selection.End(xlDown)).Select
    Range("C383").Select
End Sub

Merci beucoup
 
Solution
Tu as modifié la formule que j'avais mise
=INDEX(tblSaisieOp[Solde];SOMMEPROD(MAX((tblSaisieOp[Pointage]="oui")*(LIGNE(tblSaisieOp[Solde])-14))))
Ce n'est pas un hasard si j'avais utilisé les noms des tableaux !
cette formule est dynamique et tient compte des changements (modifs ou ajouts)
Quelle formule as tu utilisée pour le nom pointe ? Une formule décaler() ?
Pointe est il une plage dynamique ??

djidji59430

XLDnaute Barbatruc
Bonjour à tous,

sans ton fichier, ou un bout de fichier exemple, difficile de se prononcer, même si on entrevoit une solution !
Par exemple, la ligne du dernier oui, c'est
=sommeprod(max((pointage="oui")*(ligne(pointage)))
Si ça peut te donner des idées !

Crdlmt
 
Dernière édition:

Djeen

XLDnaute Nouveau
Voici mon fichier épuré. Merci pour ta réponse
C385= Solde Pointé= Solde Banque
C393=Solde Non Pointé=Solde Réel

Je ne comprends pas ta formule. Pourquoi multiplier par la ligne de pointage qui va changer au fur et à mesure ?

Cordialement
 

Pièces jointes

  • TST.xlsm
    117.8 KB · Affichages: 25

Djeen

XLDnaute Nouveau
Je pensais que la solution serait plus évidente pour les utilisateurs du forum.
Trouver la valeur de la dernière cellule d'une colonne filtrée (# de la dernière cellule de colonne), c'est pas fréquent ? Sans VBA c'est impossible ? Par Power BI ?
 
Dernière édition:

Djeen

XLDnaute Nouveau
Excuse-moi, mais si la solution c'est ta formule "=sommeprod(max((pointage="oui")*(ligne(pointage)))", il faudrait que je puisse la comprendre et savoir où la mettre.
Peux-tu me développer ton idée ?
Là, je n'ai même pas essayer car je ne sais pas où la mettre
et si éventuellement je dois l'adapter car je ne la comprends pas comme déjà mentionné plus haut.

VB:
"" Je ne comprends pas ta formule. Pourquoi multiplier par la ligne de pointage qui va changer au fur et à mesure ?""
 

djidji59430

XLDnaute Barbatruc
Là, je n'ai même pas essayer car je ne sais pas où la mettre
Aors, pourquoi tu demandes une formule ?
en B3, la ou tu avais 1364,14 écrit a la main !
on peut pour "expliquer" dire
qu'elle est index(solde; equiv(dernier oui; pointage;0)
equiv(dernier oui ......
dans la colonne pointage, la ligne du dernier oui , c'est le max de la matrice : (ligne(pointage)*(pointage="oui")).
c'est une matrice ou tous les non sont remplacés par des zéros.
15;16;0;0;0;20;;0;0 par exemple le max de ma matrice, c'est 20
et ta valeur, ce serait (index(solde;20)
et dans ton cas c'est ligne385 -14 =371
=INDEX(tblSaisieOp[[#Données];[#Totaux];[Solde]];371)
 

Djeen

XLDnaute Nouveau
Je vais essayer de comprendre ça. Là tu m'as fourni plus d'informations.
Tu as regardé ma gestion des noms, il n' y aurait pas un problème avec la formule.
Quand je la met en B3, j'ai une erreur et on me demande de mettre une apostrophe devant.
Tu l'as essayée sur mon fichier TST ?
 

Djeen

XLDnaute Nouveau
Les matrices, j'en avais entendu parler mais jamais touché.
Donc en B3 pour avoir le solde Banque (ou Solde Pointé) , j'ai mis
=INDEX(tblSaisieOp[[#Données];[#Totaux];[Solde]];371)
J'ai bien récupérer la donnée de la ligne 371

La formule, pour la rendre dynamique, je l'ai modifiée comme ceci:
=INDEX(tblSaisieOp[[#Données];[#Totaux];[Solde]];SOMMEPROD(MAX((lstPointage="oui")*(LIGNE(lstPointage)))))

(J'ai nommé lstPointage la colonne des oui/non) de J15 jusqu'à J395

Et ce n'est pas bon. J'obtiens un #REF (je pense que ma matrice est foireuse)
Tu vois une erreur ?
 
Dernière édition:

Djeen

XLDnaute Nouveau
Finalement avec en B3 cette formule :
=@INDEX(tblSaisieOp[[#Données];[#Totaux];[Solde]];SOMMEPROD(MAX((Pointe="oui")*(LIGNE(Pointe))-1)))
je trouve le résultat attendu.
Il a fallu mettre -1 car je tombais une ligne trop bas (1ère ligne des pontages à Non.
Faut que je vérifie la longévité de la formule. :);)😁
Mais je te dis encore un gros merci. Tu m'as permis de découvrir encore des choses merveilleuses dans cet excel magique
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
311
Réponses
2
Affichages
676
Réponses
0
Affichages
472

Statistiques des forums

Discussions
312 174
Messages
2 085 951
Membres
103 058
dernier inscrit
florentLP