Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.