XL 2016 afficher les nombre et non les cases

vipi61

XLDnaute Nouveau
Bonjour,

Je souhaite afficher automatiquement les nombre des formules et non les cases

soit = 1+1 et non =A1+B1

Merci de votre aide
 

Pièces jointes

  • test.xlsx
    8.4 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @vipi61 :) , à tous ;),

Un essai dans le classeur joint via une macro évènementielle en VBA.
Double-cliquez sur une cellule. Une fenêtre s'ouvrira avec les informations suivantes :
  • Le type de la cellule (sans formule, avec formule sans antécédent, avec formule et antécédents)
  • puis suivant le type : la formule initiale et/ou la formule avec les valeurs des antécédents et/ou la valeur affichée dans la cellule.
  • remarque : les valeurs des antécédents sont entourées par des crochets [ ]
Exemple de message :
1718844439303.png



restriction : ça ne fonctionne que pour des formules avec des adresses simples c'est à dire sans référence à des plages avec uniquement des références à des cellules isolées.
  • Formule : = A1 + AB9 + C9 * Y11 => ça fonctionne (car uniquement des cellules isolées)
  • Formule : NB.SI(B2:G8;"toto") => ça ne fonctionne pas (car présence d'une plage de cellules)


Le code est dans le module associé à la feuille "Feuil1" :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim xrg As Range, formul As String, xcell, v, n&, li, co, ech, aux, i&, s, res
   Cancel = True
   On Error Resume Next
   Set xrg = Target.Precedents
   On Error GoTo 0
   If xrg Is Nothing Then
      If Target.HasFormula Then
         s = "La cellule " & Target.Address(0, 0) & " comporte une formule sans antécédent !" & vbLf & vbLf
         s = s & "Formule Initiale  : " & Target.FormulaLocal & vbLf & vbLf
         s = s & "Valeur Initiale  : " & Target.Text
         MsgBox s, vbInformation
         Exit Sub
      Else
         s = "La cellule " & Target.Address(0, 0) & " ne comporte pas de formule !" & vbLf & vbLf
         s = s & "Valeur Initiale  : " & Target.Text
         MsgBox s, vbInformation
         Exit Sub
      End If
   Else
      ReDim t(1 To xrg.Count, 1 To 2)
   End If
 
   For Each xcell In xrg.Cells
      li = String(20, "0") & xcell.Row: co = String(20, "0") & xcell.Column
      n = n + 1: t(n, 1) = li & Chr(172) & co
   Next xcell
 
   Do
      ech = False
      For i = 1 To n - 1
         If t(i, 1) > t(i + 1, 1) Then ech = True: aux = t(i, 1): t(i, 1) = t(i + 1, 1): t(i + 1, 1) = aux
      Next i
   Loop Until Not ech
 
   For i = 1 To n
      s = Split(t(i, 1), Chr(172))
      t(i, 1) = Val(s(0))
      t(i, 2) = Val(s(1))
   Next i
 
   res = Target.FormulaLocal
   For i = n To 1 Step -1
      v = Cells(t(i, 1), t(i, 2)).Text
      res = Replace(res, Cells(t(i, 1), t(i, 2)).Address(1, 1), " [" & v & "] ")
      res = Replace(res, Cells(t(i, 1), t(i, 2)).Address(0, 1), " [" & v & "] ")
      res = Replace(res, Cells(t(i, 1), t(i, 2)).Address(1, 0), " [" & v & "] ")
      res = Replace(res, Cells(t(i, 1), t(i, 2)).Address(0, 0), " [" & v & "] ")
   Next i
   MsgBox "La cellule " & Target.Address(0, 0) & " comporte une formule avec des antécédents !" & vbLf & vbLf & _
          "Formule Initiale  : " & Target.FormulaLocal & vbLf & vbLf & _
          "Formule [valeur] : " & res & vbLf & vbLf & _
          "Résultat = " & Target.Text, vbInformation
End Sub
 

Pièces jointes

  • vipi61- adresse et valeur- v1.xlsm
    21.9 KB · Affichages: 3
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Il existe de multiples restrictions à ma macro. Par exemple, je ne traite pas les littéraux. Si une cellule contient la formule ="La valeur de A1 est :" & A1, les deux termes A1 seront remplacés par ma macro alors que seul le second A1 devrait l'être.
Mais il est hors de question de se lancer dans une analyse de la grammaire des formules. Microsoft l'a déjà fait (c'est d'ailleurs le travail qu'il nous vend) et c'est la base d'Excel !
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

Cette fonction VBA permet de récupérer les références dans une formule :
VB:
Function Convertir(cel As Range)
Dim f1$, f2$, i%, j%, x$, test As Boolean, ff1$, ff2$
f1 = cel.Formula
f2 = cel.FormulaLocal
On Error Resume Next
Do
    i = i + 1
    If i > Len(f1) Then Exit Do
    For j = Len(f1) To i + 1 Step -1 'boucle décroissante pour obtenir la référence la plus longue
        x = Mid(f1, i, j - i + 1)
        test = False
        test = Evaluate("ISREF(" & x & ")")
        If test Then
            ff1 = Replace(f1, x, CStr(Evaluate(x)))
            ff2 = Replace(f2, x, CStr(Evaluate(x)))
            If Not IsError(Evaluate(ff1)) Then f1 = ff1: f2 = ff2: i = i + Len(x) - 1
            Exit For
        End If
    Next j
Loop
Convertir = f2
End Function
Les références sont remplacées par leur valeur seulement si la formule obtenue est valide.

Le code de la fonction doit être placé impérativement dans un module standard.

A+
 

Pièces jointes

  • test.xlsm
    18.2 KB · Affichages: 2
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello le fil

on est bien d'accord que quelque soit la solution proposée, adoptée, il va bien falloir que l'utilisateur saisisse la formule en utilsant les références de cellules..
donc;. j'en reviens à mon questionnement initial...je ne vois pas l'utilité....
pour voir la valeur d'une cellule, il suffit de regarder la cellule...
je serais curieux d'avoir une explication du demandeur
 

Discussions similaires

Statistiques des forums

Discussions
313 770
Messages
2 102 235
Membres
108 181
dernier inscrit
Chr1sD