Traduire une longue formule excel en VBA
Résolu
CILE78
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
CILE78 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
CILE78 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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
EDIT: Ajout de la coloration syntaxique.
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.
A voir également:
- Traduire une longue formule excel en VBA
- Formule si et excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule somme excel colonne - Guide
- Liste déroulante excel - Guide
2 réponses
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
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
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...) :
Ensuite dans la feuille écrire juste la fonction = xyz()
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()
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....
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....
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.
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.