XL 2016 Conversion langage VBA en formule excel

mathsdeb

XLDnaute Nouveau
Bonjour,

Je ne suis pas une pro des macro, pourriez-vous svp m'aider à convertir le langage VBA en formule Excel :

1-
IF [fin] < "2021-01-01"
THEN DateTimeDiff([fin],[debut],"days")/30
ELSE DateTimeDiff("2020-12-31",[debut],"days")/30
ENDIF

IF [duree_cumul_amort]<=0
THEN 0
ELSE [duree_cumul_amort]
ENDIF

2-
IF [debut] > "2021-01-01" and [fin] < "2022-01-01"
THEN DateTimeDiff([fin],[debut],"days")/30

ELSEIF [fin] < "2022-01-01"
THEN DateTimeDiff([fin],"2021-01-01","days")/30

ELSEIF [debut] > "2021-01-01"
THEN DateTimeDiff("2021-12-31",[debut],"days")/30

ELSE DateTimeDiff("2021-12-31","2021-01-01","days")/30
ENDIF

3-
IF [debut] > "2021-01-01" and [fin] < "2022-01-01"
THEN DateTimeDiff([fin],[debut],"days")/30

ELSEIF [fin] < "2022-01-01"
THEN DateTimeDiff([fin],"2021-01-01","days")/30

ELSEIF [debut] > "2021-01-01"
THEN DateTimeDiff("2021-12-31",[debut],"days")/30

ELSE DateTimeDiff("2021-12-31","2021-01-01","days")/30
ENDIF

et

IIF([MT_TCC_FIN_INIT]-[cumul_amort_PBF]=0,0,((MT_TCC_FIN_INIT)/48)*[duree_dotation_2021])

Merci par avance pour votre aide
Cordialement
 

vgendron

XLDnaute Barbatruc
Bonjour

ta demande ressemble quand même à "pouvez vous faire mes devoirs à ma place"
le VBA que tu postes ,n'est pas vraiment du vba puisque ca ne fait rien en l'état..
avant de traduire en formules... il faut que tu essaies de comprendre ce que "calcule" le vba..

if [fin]<"2021-01-01"
==> déjà.. ca veut dire que dans ton fichier excel, il y a une cellule qui s'appelle "fin" et qui à priori contient une date..
si cette date est avant le 01 janvier 2021, alors.. que fait la fonction DateTimeDiff ??
à toi de chercher un peu, soit dans l'aide excel, soit sur google..

une fois que tu aura compris ce qu'il faut calculer.. tu pourra écrire la formule
 

mathsdeb

XLDnaute Nouveau
Merci Vgendron pour cette première ouverture. Je vais essayer :

Si "THEN" veut dire "ALORS", alors je propose pour la

- Première formule via formule DAX (plus simple peut être) :

Avec en exemple :
debut : 10/10/2010
fin : 14/09/2025

=IF(Tableau4[fin<DATE(2021;01;01);DATEDIFF(Tableau4[fin];Tableau4[debut];DAY)/30;DATEDIFF(date(2020;12;31);Tableau4[debut];DAY)/30)

Mais j'ai un message d'erreur. Comment contourner parce que visiblement dans la formule original cela ne causait pas de souci.

Merci par avance pour votre aide

1664374186084.png
 

mathsdeb

XLDnaute Nouveau
Ok merci. Je comprends qu'avec DAX c'est donc l'inverse que la formule initiale.

Du coup, en inversant, en effet ça fonctionne pour la 1ere formule :) !!!

= IF(Tableau4[fin]<DATE(2021;01;01);DATEDIFF(Tableau4[debut];Tableau4[fin];DAY)/30;DATEDIFF(Tableau4[debut];date(2020;12;31);DAY)/30)

Je continue pour les autres et je vous reviens dès que j'ai une erreur (si cela ne vous dérange pas :) ).Merci
 

Discussions similaires

Statistiques des forums

Discussions
314 496
Messages
2 110 236
Membres
110 708
dernier inscrit
novy16