Brian a besoin de traiter une feuille de travail avant qu’elle ne puisse être distribuée à d’autres personnes. Ce dont il a besoin, c’est d’éliminer la plupart, mais pas la totalité, des formules de la feuille de calcul. Il souhaite parcourir toutes les cellules d’une plage de cellules sélectionnée et, si la cellule contient une formule, vérifier cette formule. Si la formule contient une référence (toute référence) à une feuille de calcul différente dans le classeur en cours, la formule est ignorée. Si la formule ne contient pas une telle référence, la macro doit remplacer la formule par le résultat de la formule.

C’est une tâche relativement simple; tout ce que vous avez à faire est de faire passer votre macro à travers les cellules et (1) de savoir si la cellule contient une formule. Si c’est le cas, vérifiez si la formule contient un point d’exclamation. Les points d’exclamation sont utilisés dans les références de formules, telles que les suivantes:

=Sheet2!A1

Ainsi, si la formule contient un point d’exclamation, vous pouvez l’ignorer. S’il ne contient pas de point d’exclamation, vous pouvez le remplacer par sa valeur.

Sub ConvertFormulas1()

Dim c As Variant     Dim frm As String

On Error Resume Next

For Each c In Selection         If c.HasFormula Then             frm = c.Formula             If InStr(1, frm, "!") = 0 Then                 c.Value = c.Value             End If         End If     Next c End Sub

Il y a un inconvénient à cette approche: le point d’exclamation apparaîtra dans toutes les formules externes à la feuille de calcul actuelle, y compris celles qui se trouvent dans d’autres classeurs. Si vous souhaitez vraiment remplacer uniquement les formules par d’autres feuilles de calcul dans le classeur actuel mais ignorer les formules qui font référence à des feuilles d’autres classeurs, vous devez ajouter une logique supplémentaire. La logique apparaît lorsque vous regardez comment Excel fait référence à ces autres classeurs:

=[OtherWorksheet.xls]Sheet1'!$C$9

Notez que le nom de l’autre classeur est contenu entre crochets.

Ainsi, après avoir testé le point d’exclamation (qui vous informe que la référence est à une autre feuille de calcul, vous devez vérifier la présence d’un crochet gauche. S’il y en a, la référence n’est pas à une cellule dans le classeur en cours.

Sub ConvertFormulas2()

Dim c As Variant     Dim OtherSheet As Boolean     Dim frm As String

On Error Resume Next

For Each c In Selection         If c.HasFormula Then             frm = c.Formula             OtherSheet = False             If InStr(1, frm, "!") Then                 OtherSheet = True                 If InStr(1, frm, "[") Then                     OtherSheet = False                 End If             End If             If Not OtherSheet Then                 c.Value = c.Value             End If         End If     Next c End Sub

Il convient de préciser qu’il serait relativement facile de modifier la formule utilisée dans cette macro afin qu’elle se débarrasse de toutes les références externes en laissant les références à la feuille de calcul actuelle sont intactes. En fait, tout ce que vous avez à faire est de supprimer la vérification du crochet, puis de supprimer le mot-clé « Not » dans la structure qui vérifie la variable OtherSheet.

_Remarque: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale contenant des informations utiles .

`link: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet du navigateur] `.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (6959) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Replacing_Some_Formulas_with_the_Formula_Results [Remplacement de certaines formules par les résultats de la formule].