Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

dionys0s

XLDnaute Impliqué
Bonjour le forum

J'aimerais votre aide sur un point bien précis :

Dans une cellule, j'ai une formule dont le signe égal au début a été enlevé. J'aimerais pouvoir, en VBA, utiliser la fonction Application.Evaluate. Le problème, c'est que dans la feuille Excel, j'ai, pour une fonction, deux écritures possible :
Par exemple la fonction suivante "Si telle cellule = telle valeur, alors condition si vrai sinon condition si faux" peut s'écrire
=SI(LC(3)=2;"OK";"Pas OK")
ou
=SI(K9=2;"OK";"Pas OK")
Lorsqu'elles sont stockées sous forme de formule, (avec le signe égal), et quel que soir le ReferenceStyle d'Excel, MaCellule.FormulaR1C1 renvoit
=IF(RC[3]=2,"OK","Pas OK")

En gros, je cherche un moyen d'obtenir l'expression texte
IF(RC[3]=2,"OK","Pas OK")
à partir de
SI(LC(3)=2;"OK";"Pas OK")
ou
SI(K9=2;"OK";"Pas OK")
(J'ai fait exprès d'enlever le signe =

D'avance merci pour votre aide

Dionys0s
 

dionys0s

XLDnaute Impliqué
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Bonjour Job,

Il y a quelque chose qui doit m'échapper. Je pense que mon petit fichier exemple éclaircira mon but.
J'ai mis deux lignes d'exemple de formule, une rentrée en ReferenceStyle R1C1, et une en A1. Idéalement j'aimerais parvenir au résultat quel que soit le type de référence utilisé lorsque la formula a été saisie.

D'avance merci :)
 

Pièces jointes

  • Evaluate.xlsm
    10.4 KB · Affichages: 58
  • Evaluate.xlsm
    10.4 KB · Affichages: 69
  • Evaluate.xlsm
    10.4 KB · Affichages: 69

job75

XLDnaute Barbatruc
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Re,

Cela dit mettez en K6 successivement ces formules "tronquées" :

SI(K9=2;"OK";"Pas OK")

SI(LC(3)=2;"OK";"Pas OK")

IF(RC[3]=2,"OK","Pas OK")

et à chaque fois lancez cette macro :

Code:
Sub Evaluer()
Dim f$, f1$, nf$
With [K6]
  f = .Formula
  f1 = IIf(Left(f, 1) = "=", f, "=" & f)
  nf = .NumberFormat
  .NumberFormat = "General"
  On Error Resume Next
  .FormulaLocal = f1
  If Err = 0 Then MsgBox "FormulaLocal : " & .Value
  Err = 0
  .FormulaR1C1 = f1
  If Err = 0 Then MsgBox "FormulaR1C1 : " & .Value
  '---retour aux conditions initiales---
  .NumberFormat = nf
  .Value = f
End With
End Sub
Notez que les résultats sont les mêmes que l'ordi soit en style A1 ou en style R1C1.

A+
 

job75

XLDnaute Barbatruc
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Re,

Pour votre fichier du post #3 exécutez :

Code:
Sub Test()
Dim Col, Lign
For Col = 2 To 10
  If Cells(2, Col) <> "" Then
    For Lign = 4 To 8
      Cells(Lign, Col).FormulaLocal = "=" & Cells(2, Col)
      Cells(Lign, Col) = Cells(Lign, Col) 'supprime les formules
    Next Lign
  End If
Next Col
End Sub
Comme je l'ai dit on ne peut pas utiliser Evaluate, à cause des références "L" et "C".

Et il faut que votre version Excel soit une version française pour que ces références soient comprises.

A+
 

dionys0s

XLDnaute Impliqué
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Re,

en fait j'avais pensé à ces solutions, mais je voulais utiliser Evaluate car je ne peux pas agir directement dans les cellules. En réalité, je prends toutes mes données dans des variables tableau (en prenant Range.Value et non range.Formula), je les modifie dans la variable tableau que je plaque en fin de procédure. Je ne peux donc pas utiliser (à moins que qqch m'échappe) les formula.
 

job75

XLDnaute Barbatruc
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Bonjour dionys0s, le forum,

Vous êtes têtu, pour la 3ème fois Evaluate ne peut pas évaluer des références autres que celles de type A1.

Et il n'est pas possible de convertir des références "LC" en "A1" en VBA.

Il faut donc entrer les formules dans les cellules en utilisant FormulaLocal.

je ne peux pas agir directement dans les cellules

Et pourquoi donc ? Ce que je vous ai montré aux posts #4 et #5 peut toujours se faire.

A+
 

job75

XLDnaute Barbatruc
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Re,

Si vous voulez utiliser des tableaux VBA avec votre fichier du post #3 alors allez-y :

Code:
Sub Test()
Dim t, ncol%, tablo, nlig&, j%, f$, i&
t = [B2:J2] 'à adapter
ncol = UBound(t, 2)
tablo = [B4:B8].Resize(, ncol) 'à adapter
nlig = UBound(tablo)
For j = 1 To ncol
  If t(1, j) <> "" Then
    f = "=" & t(1, j)
    For i = 1 To nlig
      tablo(i, j) = f
    Next
  End If
Next
With [B4:B8].Resize(, ncol)
  .FormulaLocal = tablo
  .Value = .Value 'supprime les formules
End With
End Sub
Toujours FormulaLocal à la rescousse...

A+
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Conversion formule Excel en texte (sans le =) en VBA FormulaR1C1

Re,

mon post #6 n'était pas têtu, c'était juste pour expliquer l'origine de ma démarche. Mais avec vos explications j'ai bien compris qu'il fallait procéder autrement. Merci d'ailleurs pour les explications et propositions :)
 

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 068
Membres
103 110
dernier inscrit
Privé