Partager via


Formule et Formule2

Range.Formula et Range.Formula2 sont deux façons différentes de représenter la logique dans la formule. Ils peuvent être considérés comme 2 dialectes du langage de formule d’Excel.

Excel a toujours pris en charge deux types d’évaluation de formule : l’évaluation implicite des intersections (« IIE ») et l’évaluation de tableau (« AE »). Avant l’introduction des tableaux dynamiques, IIE était la valeur par défaut pour les formules de cellule, tandis qu’AE était utilisé partout ailleurs (mise en forme conditionnelle, validation des données, formules de tableau CSE, etc.).

La principale différence entre les deux formes d’évaluation était la façon dont elles se comportaient lorsqu’une plage multilocatal (par exemple, A1:A10) était passée à une fonction qui attendait une valeur unique :

  • IIE choisit la cellule sur la même ligne ou colonne que la formule. Cette opération est appelée « intersection implicite ».
  • AE appelle la fonction avec chaque cellule de la plage multicellulaire et retourne un tableau de résultats. Cette opération est appelée « lift ».

Lorsque Range.Formula est utilisé pour définir la formule d’une cellule, IIE est utilisé pour l’évaluation.

Avec l’introduction des tableaux Dyanamic (« DA »), Excel prend désormais en charge le retour de plusieurs valeurs à la grille et AE est désormais la valeur par défaut. Les formules AE peuvent être définies/lues à l’aide de Range.Formula2, qui remplace Range.Formula. Toutefois, pour faciliter la rétrocompatiblité, Range.Formula est toujours pris en charge et continuera à définir/retourner des formules IIE. L’ensemble de formule à l’aide de Range.Formula déclenche une intersection implicite et ne peut jamais se renverser. La formule lue à l’aide de Range.Formula continuera d’être silencieuse sur l’emplacement où l’intersection implicite se produit.

Range.Formula signale efficacement ce qui serait présenté dans la barre de formule dans Excel Pré-DA, tandis que Range.Formula2 signale la formule signalée par la barre de formule dans DA Excel.

Excel traduit automatiquement entre ces deux variantes de formule, de sorte que l’une ou l’autre peut être lue et définie. Pour faciliter la traduction de Range.Formula (à l’aide d’IIE) vers Range.Formula2 (AE), Excel indique où l’intersection implicite peut se produire à l’aide du nouvel opérateur d’intersection implicite @. De même, pour faciliter la traduction de Range.Formula2 (à l’aide d’AE) en Range.Formula (à l’aide d’IIE), Excel supprime les opérateurs @ qui seraient exécutés en mode silencieux. Souvent, il n’y a pas de différence entre les deux.

Traduction de Range.Formula en Range.Formula2

Cet exemple montre le résultat de la définition de Range.Formula, puis de la récupération de Range.Formula2

Dim cell As Range
Dim str As String

Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(A1:A4)")

For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
 cell.Formula = ArrayOfFormulas(i)
 str = "Wrote Range.Formula:" & vbCr & cell.Formula & _
    vbCr & vbCr & _
    "Read Range.Formula2:" & vbCr & cell.Formula2
 MsgBox (str)
Next i
Write Range.Formula Lire Range.Formula2 Notes
=SQRT(A1) =SQRT(A1) Identique, car aucune intersection implicite ne peut se produire
=SQRT(A1:A4) =SQRT(@A1:A4) SQRT attend une valeur unique, mais reçoit une plage multi-celle. Cela déclenche une intersection implicite dans IIE, de sorte que la traduction vers AE appelle là où l’intersection implicite peut se produire à l’aide de l’opérateur @

Conversion de Range.Formula2 en Range.Formula

Ensemble de formules utilisant Range.Formula2 Excel utilise AE. Lors de l’enregistrement de fichier, DA Excel examine les formules du classeur pour déterminer si elles calculeraient la même chose dans AE et IIE. Si c’est le cas, pour améliorer la rétrocompatibilité, Excel peut l’enregistrer en tant qu’IIE pour réduire le nombre de formules matricielles vues par les versions pré-DA d’Excel. Vous pouvez tester si la formule sera enregistrée dans un fichier en tant que formule matricielle à l’aide de Range.SavedAsArray()

Dim cell As Range
Dim str As String

Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(@A1:A4)", "=SQRT(A1:A4)", "=SQRT(A1:A4)+SQRT(@A1:A4)")

For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
 cell.Formula2 = ArrayOfFormulas(i)
 str = "Wrote Range.Formula2:" & vbCr & cell.Formula2 & _
    vbCr & vbCr & _
    "Read Range.Formula:" & vbCr & cell.Formula & _
    vbCr & vbCr & _
    "Read Range.IsSavedAsArray:" & vbCr & cell.SavedAsArray
 MsgBox (str)
Next i
Write Range.Formula2 Lire Range.Formula Lire Range.SavedAsArray Notes
=SQRT(A1) =SQRT(A1) FALSE SQRT attend une valeur unique, A1 est une valeur unique. Il n’y a donc pas d’écart entre l’IIE et l’AE. Enregistrer en tant qu’IIE et supprimer tout @'s
=SQRT(@A1:A4) =SQRT(A1:A4) FALSE SQRT attend une valeur unique, @A1:A4 est une valeur unique. Il n’y a donc pas d’écart entre l’IIE et l’AE. Enregistrer en tant qu’IIE et supprimer tout @'s
=SQRT(A1:A4) =SQRT(A1:A4) TRUE SQRT attend une valeur unique, A1:A4 étant une plage multicellule. IIE et AE peuvent varier pour enregistrer en tant que tableau
=SQRT(A1:A4)+ SQRT(@A1:A4) =SQRT(A1:A4)+ SQRT(@A1:A4) TRUE Le premier SQRT attend une valeur unique, A1:A4 étant une plage multicellule. IIE et AE peuvent varier pour enregistrer en tant que tableau

Meilleures pratiques

Si vous ciblez la version da d’Excel, vous devez utiliser Range.Formula2 de préférence à Range.Formula.

Si vous ciblez les versions Pré et Post DA d’Excel, vous devez continuer à utiliser Range.Formula. Si toutefois vous souhaitez contrôler étroitement l’apparence de la formule de la barre de formule des utilisateurs, vous devez détecter si . Formula2 est pris en charge et, si c’est le cas, utilisez . Formula2 sinon, utilisez . Formule

Notes

OfficeJS n’inclut pas Range.Formula2. Au lieu de cela, Range.Formula signale toujours ce qui est présent dans la barre de formule. En tant que langage plus récent avec la possibilité pour les addins de déployer rapidement des mises à jour, les développeurs sont encouragés à mettre à jour leurs addins s’ils rencontrent des problèmes de compatibilité entre AE et IIE.

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.