Passer d'une formule Excel à une formule VBA

Bonjour,

J'utilise une formule pour récupérer la valeur initial et final dans une colonne.

L'idée de la formule est de récupérer ces 2 valeurs avec des arrondis supérieurs ou inférieurs en fonction de l'évolution des données.

Exemple si les données ont tendances à augmenter alors on va faire

=SI('Feuil1'!$A$3>'Feuil1'!$a$4128;MAX(ARRONDI.SUP('Feuil1'!$A$3;1);ARRONDI.INF('Feuil1'!$A$3;1));MIN(ARRONDI.SUP('Feuil1'!$A$3;1);ARRONDI.INF('Feuil1'!$A$3;1)))

A l'inverse si les données de la colonne ont tendances à diminuer on inverse la formule.

Ma question est la suivante, j'aimerais pouvoir l'implémenter en code VBA pour pouvoir l'insérer dans une macro.

Merci d'avance pour votre aide.

Salut,

Ce serait bien d'avoir un fichier exemple avec cette formule (et les feuilles qui vont avec) ainsi que ta formule ''à l'envers'' (???)

Ensuite, est-ce que tu veux inscrire cette formule sur la feuille Excel à l'aide de ta macro - de manière à la voir réellement - ou veux-tu seulement le résultat de la formule sur ta feuille ? Dans ce dernier cas, le calcul se ferait par macro et tu ne pourrais plus modifier les paramètres sur ta feuille. Mais ceci à l'avantage que si tu as beaucoup de calculs à mettre en place, tu n'alourdis pas le fichier avec des quantités de formules.

Cordialement.

Bonsoir et merci pour ta réponse.

Voici un fichier ou tu pourras retrouver sur la feuil2 la formule correspondant aux données de la feuil1.

Les 2 propositions que tu m'as donné me plaise, mais vu que je vais surement avoir beaucoup de données à traiter, la seconde proposition me parait la plus adaptée à ma demande.

Dans le fichier ci-joint, une macro place des nouvelles formules dans les cellules brunes et le résultat de certains calculs effectués par la macro dans les cellules vertes.

Cordialement.

12vba-convert-v1.xlsm (25.48 Ko)
Range("D1").FormulaR1C1
Range("D2").FormulaR1C1
Range("D3").FormulaR1C1

Bonjour,

C'est parfait, c'est exactement ce que je souhaitais.

Je me pose juste une question, serait-il possible, au lieu de renseigner à chaque fois pour chaque colonne

J'ai essayé ceci :

With ActiveSheet
.Cells(Rows.Count, 4).End(xlUp).Row 
        .Range("D1").Formula = "=LEFT(D1,20)" 'Dans le cas où nous avons 20 colonnes

Je ne sais pas vraiment comment l'implémenter par rapport aux formules, si tu as la possibilité de m'aiguiller une nouvelle fois.

Merci encore pour ton aide.

J'ai compris que tu souhaites une sorte de boucle afin de pouvoir traiter un certain nombres de colonnes de la Feuil1 en une seule fois.

Si oui, le nombre de ces colonnes est fixe ou variable ? Dans un tel cas, peux-tu simuler dans un fichier à m'envoyer 5 colonnes sur la Feuil1 et simuler les résultats souhaités (ça devrait me permettre de voir l'évolution souhaitée pour 5 colonnes et donc pour plus de colonnes également).

Amicalement.

C'est exactement ça !

Le nombre de colonne est fixe. Mais je pense pouvoir me débrouiller pour cette partie.

J'aurais juste une autre question concernant ma première demande.

Cette ligne

Range("D1").FormulaR1C1 = _
        "=IF(Feuil1!R3C1>Feuil1!R100C1,MAX(ROUNDUP(Feuil1!R3C1,1),ROUNDDOWN(Feuil1!R3C1,1)),MIN(ROUNDUP(Feuil1!R3C1,1),ROUNDDOWN(Feuil1!R3C1,1)))"

permet bien de faire ce que je veux pour la première valeur de la colonne, et j'aimerais exactement la même chose mais pour la dernière valeur de la colonne.

Je pensais qu'en remplaçant le signe ">" par "<" ça pourrait fonctionner, mais visiblement non, ça me retourne l'arrondi inf de la première valeur.

C'est bon j'ai trouvé la réponse tout seul, il suffisait d'intervertir les données.

Merci beaucoup pour ton aide.

Salut,

Je serais intéressé à ta solution pour boucler sur les 28 colonnes. Tu peux me montrer soit le code, soit le fichier ?

Sub Tirer()
Dim I As Long
    With ActiveSheet
        I = .Cells(Rows.Count, 3).End(xlUp).Row 'sur colonne C
        .Range("A2:A" & I).Formula = "=LEFT(C2,12)"
    End With
End Sub

Alors je n'ai pas réussi à trouver de solutions pour boucler, mais ma solution était pour faire l'inverse (faire un arrondi inférieur de la dernière valeur)

Range("E1").FormulaR1C1 = _
        "=IF(Feuil1!R100C1<Feuil1!R3C1,MAX(ROUNDUP(Feuil1!R100C1,1),ROUNDDOWN(Feuil1!R100C1,1)),MAX(ROUNDUP(Feuil1!R100C1,1),ROUNDDOWN(Feuil1!R100C1,1)))"
    

Je suis toujours intéressé pour la boucle si jamais tu trouves une solution et je n'hésiterai pas à la poster si jamais je la trouve avant.

Edit de mon post : Je viens de tomber là dessus :

Pour la boucle, je ne cherche pas de solution si tu ne veux pas me fournir le fichier modèle demandé.

Pour tes autres demandes, je ne sais plus très bien où tu en es entre tes prétendues solutions trouvées et/ou non ?!?

Rechercher des sujets similaires à "passer formule vba"