Traduire une longue formule excel en VBA [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
samedi 21 septembre 2013
Statut
Membre
Dernière intervention
2 mars 2015
-
Messages postés
7
Date d'inscription
samedi 21 septembre 2013
Statut
Membre
Dernière intervention
2 mars 2015
-
Bonjour,

Je dois réaliser un tableau qui en fonction de plusieurs critères (mode de détention de la propriété, délai remboursement du crédit, ...) va déterminer une solution.
J'ai rédigé ma formule mais elle est trop longue pour excel et, après avoir modifier les si en if, les ou en or et et en and, je l'ai collé sur le formulaire VBA. Mais cela ne fonctionne pas.
Est-ce que vous avez une idée de comment la rédiger pour qu'elle fonctionne ?
Merci


 Range("E37:O37").Select
    Application.FormulaBarHeight = 6
    ActiveCell.FormulaR1C1 =
"=IF(AND(propriete=""pleine propriété"",qshi>dureeresiduelle,carhi>dureeresiduelle,causeredepot=""-"",specificite=""-"",relogement=""oui"",evolutioncar=""non""),""plan vente 1"",""IF(AND(propriete=""pleine propriété"",qshi>dureeresiduelle,carhi>dureeresiduelle,OR(specificite=""necessaire à la vie professionnelle"",specificite=""adapté à une situation particulière"",relogement=""non (à expliciter dans observations particulières)"",evolutioncar=""oui (à expliciter dans observations particulières)"")),""à discuter ou moratoire/plan pour vente 2 3 4"",""IF(AND(propriete=" " pleine propriété"",qshi>dureeresiduelle,carhi>dureeresiduelle,OR(causeredepot=""marché immobilier difficile"",causeredepot=""autre (à expliciter dans obs°)"",causeredepot=""non demandé dans précédent plan")),""moratoire/plan pour vente ou PRP avec LJ5-6-7"",IF(AND(propriete=""pleine propriété"",qshi>dureeresiduelle,carhi>dureeresiduelle,causeredepot=""refus de vendre""),""Irrecevable ou moratoire/plan pour vente ou PRP avec LJ 8"" , IF(AND(propriete=""pleine propriété"",qshi>dureeresiduelle,carhi<dureeresiduelle,causeredepot=""-"",specificite=""-"",relogement=""oui"",evolutioncar=""non"")), ""plan vente 9"","AUTRES SOLUTIONS"

Range("A38:O38").Select
End Sub


EDIT: Ajout de la coloration syntaxique.

2 réponses

Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 997
Bonjour

pleine propriété, qshi.....
sont des variables ?

si oui, pourquoi écrire une formule ? mettre le résultat de traitements VBA éviterait de charger inutilement ta feuille...

D'autre part, tu voudrais avoir cette formule de E37 à O37 ?
tu dis...
Michel
Messages postés
112
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
10 juin 2015
28
Bonjour,

Si je comprends bien c'est l'enregistreur de macro qui a écrit la base et comme le dit Michel, ce n'est pas la bonne façon d'utiliser VBA.

Le plus efficace est d'écrire une fonction avec ou sans argument qui pourra être utilisé dans la feuille et renverra le résultat comme une fonction Excel standard...

J'imagine, pour ma part que pleine propriété, qshi..... sont des cellules nommées.

La fonction à écrire se présenterait de cette façon (je n'ai reécrit que le début...) :

Public Function xyz() As String
If Range("propriete").Value = "pleine propriété" And Range("qshi").Value > Range("dureeresiduelle").Value _
And Range("carhi").Value > Range("dureeresiduelle").Value And Range("causeredepot").Value = "-" _
And Range("specificite").Value = "-" And Range("relogement").Value = "oui" And Range("evolutioncar").Value = "non" _
And Range("specificite").Value = "-" And Range("relogement").Value = "oui" Then
xyz = "plan vente 1"
'ElseIf Range("propriete").Value = "pleine propriété" And Range("qshi").Value > Range("dureeresiduelle").Value _
etc... (suite des condtions 2e cas......) Then
'xyz = résultat dans ce cas
Else
'xyz = résultat si pas dans les deux premières conditions
End If
End Function


Ensuite dans la feuille écrire juste la fonction = xyz()
Messages postés
16173
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
14 juillet 2020
2 997
Bonjour

voir si on peut simplifier car (regard rapide donc...) propriété , qshi, carhi soànt les m^me conditions

rien nous dit à cette heure que "propriété", "qshi" etc sont des nom de cellules....
Messages postés
112
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
10 juin 2015
28
Bonjour,
Non rien ne le dit de façon certaine, mais comme il semble vouloir réécrire une formule Excel, je ne vois pas vraiment ce que ça pourrait être d'autre que des plages nommées...
Mais comme souvent, sans fichier joint, on ne comprend pas forcément tout et en plus c'est nettement plus complexe....
Messages postés
7
Date d'inscription
samedi 21 septembre 2013
Statut
Membre
Dernière intervention
2 mars 2015

Il s'agit effectivement de cellules nommées.
J'ai détourné le problème en créant dans une feuille distincte plusieurs formules puis une qui prenait la solution de la formule qui était correcte.
Difficile effectivement de retranscrire par écrit le problème. La prochaine fois j'attacherai un fichier excel.
Merci à tous les deux pour votre aide.