Remplacement de certaines formules par les résultats de formule (Microsoft Excel)
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]
.