XL 2016 afficher les nombre et non les cases

  • Initiateur de la discussion Initiateur de la discussion vipi61
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

Dernière édition:
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:
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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
101
Réponses
2
Affichages
38
Retour