Problème échéancier - répartition conditionnelle de facturation

Dak

XLDnaute Nouveau
Bonjour à tous,

Tout d’abord merci à tous ceux qui prendront le temps de me lire voir d’apporter une réponse.
Après avoir recherché quelque peu sur le forum, je n’ai pas trouvé la solution à mon problème, que je vous expose donc.

Pour réaliser un suivi de budget d’un montant « m », j’essaye de répartir des facturations en fonction de la durée « d » de ma commande.

J’aborde le problème avec le trio « SI / ET / OU » en faisant des tests sur la date (mois-année) de la colonne sélectionnée et en la comparant avec les dates de début et fin de la commande, ce qui m’amène à une formule indigeste avec beaucoup d’imbrications.

Voici ce que je tente de faire :

• Si d <= 3 mois : 1 seule facturation
o Mois de facturation : dernier mois de la commande
o Montant facture = m
Sinon
• Si 3<d<=6 mois : 2 facturations
o Mois de facturation : dernier mois de la commande et 3 mois avant.
o Montant factures = m/2

• Si 6<d<=9 mois : 3 facturations
o Mois de facturation : dernier mois de la commande, 3 mois avant et 6 mois avant
o Montant factures = m/3
Sinon
• Si 9<d<=12 mois : 4 facturations
o Mois de facturation : dernier mois de la commande, 3, 6 et 9 mois avant
o Montant factures = m/4
Sinon
• Si d >12 mois : x facturations
o Mois de facturation : dernier mois de la commande et tous les 6 mois en remontant (en restant dans la période d’ouverture de la commande). Je n’arrive pas à écrire ce dernier cas
o Montant factures = m/ ? (dépend du nbr de facturation identifiée)



J’aborde le problème avec le trio « SI / ET / OU » en faisant des tests sur la date (mois-année) de la colonne, ce qui m’amène à une formule indigeste avec beaucoup d’imbrications.

La dernière formule (cellule K4) sur laquelle je travaille, et que je souhaite étendre à toutes les cellules en gris clair, retourne une erreur que je n’arrive pas à analyser. Je souhaiterai savoir si c’est un problème de syntaxe ou un trop grand nombre de fonctions imbriquées ou autre chose ?
Puis-je m’en sortir avec ce type de construction ou faut-il adopter une autre approche plus « fine » ?

Je pense qu’un fichier exemple est indispensable. J’ai essayé d’être clair mais dites moi s’il y a des zones d’ombres.

Dans mes recherches, j’ai « découvert » les fonctions ‘datedif’, ‘recherchev’, ‘rechercheh’ mais je ne les maitrise pas, pourraient-elles m’aider pour ce problème ?
 

Pièces jointes

  • test.xls
    80 KB · Affichages: 122
  • test.xls
    80 KB · Affichages: 129
  • test.xls
    80 KB · Affichages: 134

Dranreb

XLDnaute Barbatruc
Re : Problème échéancier - répartition conditionnelle de facturation

Je propose cette fonction perso:
VB:
Function Facturé(ByVal DatCol As Date, ByVal DatDéb As Date, ByVal DatFin As Date, ByVal STot As Double) As Double
Dim MoisDéb As Long, MoisFin As Long, MoisCol As Long, NbTrim As Long, NbAnné As Long
MoisFin = Year(DatFin) * 12 + Month(DatFin)
MoisDéb = Year(DatDéb) * 12 + Month(DatDéb)
MoisCol = Year(DatCol) * 12 + Month(DatCol)
Facturé = 0
If MoisCol < MoisDéb Then Exit Function
If MoisCol > MoisFin Then Exit Function
NbTrim = (MoisFin - MoisDéb) \ 3 + 1
If NbTrim <= 4 Then
   If (MoisFin - MoisCol) Mod 3 = 0 Then Facturé = STot / NbTrim
Else
   NbAnné = (NbTrim + 3) \ 4
   If (MoisFin - MoisCol) Mod 12 = 0 Then Facturé = STot / NbAnné
   End If
End Function
Exemple d'utilisation:
Code:
=Facturé(K$2;$I6;$J6;$H5)
Testez la bien dans tous les sens, examinez les résultats à la loupe.

P.S. Il manquait un End If. Je ne sais comment il s'est fait la valise d'autant que j'avais testé la fonction auparavant.
À+
 
Dernière édition:

Dak

XLDnaute Nouveau
Re : Problème échéancier - répartition conditionnelle de facturation

Bonjour à tous,

Je relance ce sujet car j'aimerai apporter des modifications à la solution gentiment proposée par Dranreb mais mon niveau en VBA ne me le permet pas...

A savoir :
- si une facturation tombe le mois d'ouverture de la commande ou le mois suivant : la reporter au mois m+2 (exemple : si démarrage en janvier: rien en janvier, rien en février, 1ère échéance en Mars)
- si une facturation tombe au 4ème trimestre(octobre, novembre ou décembre) : la reporter au mois de Janvier suivant
Si le report tombe un mois où une facturation est déjà prévue, cumuler les montants.

Toute aide est la bienvenue,
Merci d'avance !

PS: pour rappel le fichier exemple est dans mon 1er mail en haut de page.
 

Dranreb

XLDnaute Barbatruc
Re : Problème échéancier - répartition conditionnelle de facturation

Bonjour.
En ajoutant 2 au mois de début, ça collerait ?
VB:
Function Facturé(ByVal DatCol As Date, ByVal DatDéb As Date, ByVal DatFin As Date, ByVal STot As Double) As Double
Dim MoisDéb As Long, MoisFin As Long, MoisCol As Long, NbTrim As Long, NbAnné As Long
MoisFin = Year(DatFin) * 12 + Month(DatFin)
MoisDéb = Year(DatDéb) * 12 + Month(DatDéb) + 2: If MoisDéb > MoisFin Then MoisDéb = MoisFin
MoisCol = Year(DatCol) * 12 + Month(DatCol)
Facturé = 0
If MoisCol < MoisDéb Then Exit Function
If MoisCol > MoisFin Then Exit Function
NbTrim = (MoisFin - MoisDéb) \ 3 + 1
If NbTrim <= 4 Then
   If (MoisFin - MoisCol) Mod 3 = 0 Then Facturé = STot / NbTrim
Else
   NbAnné = (NbTrim + 3) \ 4
   If (MoisFin - MoisCol) Mod 12 = 0 Then Facturé = STot / NbAnné
   End If
End Function
À +
 

Discussions similaires