Valeur figée si MOIS = MOIS + 1
Bonjour les personnes du forum
Dans mon fichier,
Je calcule un total de paiement qui s'incrémente durant le mois. (Total_Mensuel) basé sur une boucle allant de M = 1 to 12
A la fin de chaque mois, cette valeur Total Mensuel devrait être "figée". on dira Total_Fige = Total Mensuel
S'il y a des paiements qui se rapportent à ce mois (ex: des paiements fait en avril pour février) ceux-ci doivent continuer d'incrémenter Total_Mensuel mais pas Total_Figé.
Une valeur Ecart_Actualise calculera Total Mensuel - Total Figél
Comment faire pour extraire et stocké Total_Figé lorsque le mois passe dans la boucle de M à M+1
Si quelqu'un pouvait me mettre sur la voie
Un grand merci
Guy
Bonsoir,
Si ta formule de calcul du total mensuel ne totalise que le mois pour lequel elle est définie, elle ne totalisera pas autre chose et le total n'a nul besoin d'être "figé".
Je ne peux rien dire de plus sans fichier illustrant le problème posé.
Bonsoir MFerrand,
Merci de prendre ma demande en considération.
Comme tu pourras le voir dans le fichier attaché, le Ch AFF mensuel peut "grossir" après le mois en cours par des factures payées ultérieurement.
Rendu le dernier jour du mois en cours, Ch AFF Mensuel doit être "copié" dans Montant Figé du mois correspondant
Ma requête voudrait que dans la colonne Montant figé, celu-ci ne puisse plus varier après le mois en cours.
Espérant que le fichier vaudra 1000 mots.
Un grand merci
Guy
Le fichier me montre que ton bilan est fait par macro, dans lequel les montants mensuels figés et actualisés sont pris en considération.
Donc, qu'est-ce qui manque ?
On en parle mais on le fait ?
Tes précisions sont destinées à me permettre de ne lire que les lignes intéressant le problème !
Et autre précision qui me semble utile pour intervenir : quel est le critère déterminant du "mois en cours" ? date de commande ? date de visite ? ou date de facturation ?
Cordialement.
MFerrand,
Oui, Tu as raison pour le critère date
Il faut tenir compte de la date de paiement qui détermine dans quel mois la facture est payée
si le mois de la date de paiement est égal au mois en cours (valeur M dans la boucle) alors
Ch AFF Mensuel et Montant Figé sont augmentés.
Si le mois de la date de paiement est supérieure au mois en cours (valeur M dans la boucle), alors
seul Ch AFF Mensuel est augmenté.
Tes questions m'aide à être plus précis. Merci
Tu verras dans le module 1 que j'ai laissé le calcul du Montant_Figé en "commentaires"
parce que je n'arrive pas à programmé la condition de date
Si tu peux m'aider ou quelqu'un du forum ce serait apprécié
Merci
Guy
C'est donc la date de visite qui est le critère mois !
Reste un point à éclaircir : dans la mesure où tu ne fais pas la distinction pour le chiffre d'affaire, cela veut-il dire que la notion de figé ne s'y applique pas ?
D'autre part, si tu fais Montant actu = Chiffre d'affaire - Montant figé, ce n'est pas le Mt actualisé que tu calcules mais l'actualisation !
Quoique en vérifiant ton premier post, tu parles bien de l'écart, donc ! OK !
Donc, si on résume, le chiffre d'affaire mensuel se partage entre un montant des factures payées dans le mois (le figé) et celui des factures payées ensuite. C'est donc au prélèvement des chiffres qu'il faut vérifier la date de paiement et cumuler l'actualisation.
Tu m'as un peu perturbée avec ta 2e dimension de variable 1 to 1 ! ton total annuel fait à chaque tour de boucle ! et une floppée de variable que tu n'utilise pas directement puisque tu n'utilises que les 2 variables chiffres d'affaire pour prélever les chiffres. On aurait pu donc s'en passer et tout servir à partir de ces 2 variables plus 1 pour l'actu qu'il faut aussi prélever.
Si on est bien d'accord sur les définitions figé / actu, je t'arrange ça demain. Quoique : 5h00 chez moi ! Après avoir dormi un peu donc !
Bon matin,
"Donc, si on résume, le chiffre d'affaire mensuel se partage entre un montant des factures payées dans le mois (le figé) et celui des factures payées ensuite. C'est donc au prélèvement des chiffres qu'il faut vérifier la date de paiement et cumuler l'actualisation."
Oui c'est exactement ça"
L'onglet "facture" est en réalité importé d'un fichier "facturation". Je ne montre que les lignes nécessaires.
En réalité ce fichier comprends beaucoup beaucoup plus de lignes.
Aussi, tu as raison : Actualisation = Écart entre les 2 montants (Ch AFF et Figés).
Toutes les factures dont la dates de facturation sont dans le mois de la boucle M (1 à 12) doivent se retrouver incrémentées dans Ch AFF et Figé.
Dès que la date de facturation dépasse le mois en cours, seul Ch Aff s'incrémente.
Lors de la scrutation de l'onglet "Factures", si M = 2 (février) est ÉGAL au "mois (mmm) de la date de paiement (février = 2), Ch Aff et Montant Figé s'incrémente de la valeur (offset 136).
Si la facture est payée en Avril ( M date de paiement=4), et date de visite en février(M=2) ou mars(M=3) , alors
Ch d'AFF s'augmente et Montant figé ne bouge plus.
j’espère t'avoir donné toutes les explications nécessaires.
Et oui ... 6heures de décalage ! Bonne nuit ou bon matin
Guy
Bonjour,
6 heures ? Où donc es-tu ?
La macro avait dû être quelque peu mastiquée... Le résultat y était à la fin, mais on multipliait les calculs dans la boucle...
La partie surlignée correspond au prélèvement du montant actu.
For Each Cel In WsS.Range("B3:B" & DerLigS)
If Year(Cel.Offset(, 12)) = 2015 Then
'On détermine le mois
M = Month(Cel.Offset(, 12))
'On effectue le cumul
Select Case UCase(Cel.Value)
Case "OLI": Cumul_P(M, 1) = Cumul_P(M, 1) + Cel.Offset(, 26).Value
Case "LAUR": Cumul_P(M, 2) = Cumul_P(M, 2) + Cel.Offset(, 26).Value
End Select
Select Case UCase(Cel.Value)
Case "OLI": Cumul_P_htva(M, 1) = Cumul_P_htva(M, 1) + Cel.Offset(, 129).Value
Case "LAUR": Cumul_P_htva(M, 2) = Cumul_P_htva(M, 2) + Cel.Offset(, 129).Value
End Select
'Si facture payée après le mois de facturation, montant cumulé en actualisation
If Cel.Offset(, 22) > 0 And Month(Cel.Offset(, 22)) <> M Then Cumul_Montant_ACTU(M, 1) _
= Cumul_Montant_ACTU(M, 1) + Cel.Offset(, 129).Value
End If
Next Cel
For M = 1 To 12
'Chiffre d'affaire mensuel
Cumul_Ch_Aff_Mensuel(M, 1) = Cumul_P_htva(M, 1) + Cumul_P_htva(M, 2)
'Montant_Figé
Cumul_Montant_FIGE(M, 1) = Cumul_Ch_Aff_Mensuel(M, 1) - Cumul_Montant_ACTU(M, 1)
Next M
'Copie des cumuls dans la feuille "Tableau recap"
WsC.Range("I4:J15") = Cumul_P 'Nombre de P
WsC.Range("K4:L15") = Cumul_P_htva 'Revenu des P 'Nombre de P
WsC.Range("R4:R15") = Cumul_Ch_Aff_Mensuel 'Chiffre d'affaire mensuel
WsC.Range("S4:S15") = Cumul_Montant_FIGE 'Montant FIGÉ
WsC.Range("T4:T15") = Cumul_Montant_ACTU 'MONTANT_ACTUALISÉ
'Totaux
WsC.Range("K17") = Application.Sum(WsC.Range("K4").Resize(12))
WsC.Range("L17") = Application.Sum(WsC.Range("L4").Resize(12))
'Chiffre d'affaire mensuel
WsC.Range("R17") = Application.Sum(WsC.Range("R4").Resize(12))
'Montant_Figé
WsC.Range("S17") = Application.Sum(WsC.Range("R4").Resize(12))
'Montant Actualisé
WsC.Range("T17") = Application.Sum(WsC.Range("T4").Resize(12))
'Réactivation de la mise à jour de l'écranEt j'ai donc limité la boucle sur facture aux prélèvements de chiffres d'affaire et du montant actualisé.
Suit une boucle sur les mois de 1 à 12 pour mettre à jour les autres valeurs : chiffre d'affaire mensuel global, et montant figé (puisqu'on dispose du montant actualisé).
Vient l'affectation des résultats (qui explique pourquoi la dimension 1 to 1, [je n'avais pas lu jusque là la première fois])
Et enfin, les totaux une fois, mais la bonne (plutôt que les refaire à chaque ligne de Factures).
Cordialement.
Il y a toutefois un petit problème qui me chiffonne : c'est qu'une facture impayée va apparaître dans le montant figé !
En effet, on ne déterminait le montant des factures payées, on le déduisait du chiffre d'affaire en en ôtant le montant actu.
En prélevant le montant actu. qu'on ignorait alors, je n'ai fait qu'inverser l'opération...
Mais il me semblerait logique qu'on prélève le montant figé à partir des factures payées (dans le mois), la différence entre chiffre d'affaire et montant figé + montant actu étant alors les impayés.
J'attends ton avis sur la question avant de modifier ce point.
Bonjour MFerrand
Bien merci pour cette ligne d'instruction qui fait le bonheur de la valeur Cumul_Montant_FIGE(M, 1)
If Cel.Offset(, 22) > 0 And Month(Cel.Offset(, 22)) <> M Then Cumul_Montant_ACTU(M, 1) _
= Cumul_Montant_ACTU(M, 1) + Cel.Offset(, 129).Value
J'aime aussi comment tu as restructuré
Le programme réel est beaucoup plus volumineux mais le principe reste le même :
Balayage de l'onglet facture
Traitement conditionnel
Affichage.
Pour revenir :
Il y a toutefois un petit problème qui me chiffonne : c'est qu'une facture impayée va apparaître dans le montant figé !
En réalité, à ce stade du pgm ces montants représentent des chiffres d'affaires de vente payées ou non.
Plus loin, (je ne l'ai pas inclus dans le fichier attaché car beaucoup trop gros et pas utile) il y a un traitement conditionnel spécifique aux factures payées.
Mais il me semblerait logique qu'on prélève le montant figé à partir des factures payées (dans le mois), la différence entre chiffre d'affaire et montant figé + montant actu étant alors les impayés.
En fin de compte, montant_figé fin de mois, deviendrait le reflet réel des factures payées durant ce mois et non plus le ch d'affaire.
C'est logique ....
Si ça ne te demande pas trop de temps, oui tu peux faire la modif.
Tu dois savoir que tu m'as deja beaucoup aidé .
J'ai encore d'autres questionnements ...
Merci
Guy
Bonjour MFerrand, le Forum,
Un grand merci pour ton aide.
Je me suis basé sur ta proposition pour le calcul des impayés.
Je continue ma programmation.
A bientôt
Guy
Pour MFerrand et celles et ceux qui veulent s'en inspier
j'ai attaché le fichier modifié.
Voilà la macro modifiée pour prélever à la source montant figé et actualisation.
Cordialement.
Merci MFerrand,
C'est exactement cela que je voulais faire
Ta condition avec le If Then else répond a
Si on est dans le mois en cours; le paiement va dans Montant_FIGÉ
Si le paiement est dans le ou les mois suivant : le paiement va dans Montant_ACTUALISÉ
Je continue
Guy
C'est ça ! Bonne suite.
J'ai posté un autre message intitulé "Problème de division par zéro" .
Le fichier (pratiquement égal au tient est inclus dans le message.
Si ça te tente de participer à la solution.
Un grand merci en tout cas pour ton aide
A+
Guy