Excel : afficher le détail du calcul dans une autre cellule

Excel : afficher le détail du calcul dans une autre cellule - VB/VBA/VBS - Programmation

Marsh Posté le 30-05-2015 à 10:58:22    

Bonjour,
 
Je souhaiterais avoir une formule qui me permettrait d'afficher le détail d'un calcul fait dans une autre cellule. En cherchant sur internet j'ai trouvé ça :
 

Code :
  1. Function DisplayFormula(cel As Range)
  2. DisplayFormula = cel.Formula
  3. End Function


 
Je précise que si je touche un peu à tout, niveau programmation, même basique, je ne connais rien.
 
La formule affichée au dessus fait une partie de ce que je souhaiterais. Le problème c'est que si j'ai des cellules et noms de cellules en référence dans mon calcul comme ça :
 

Code :
  1. 2*A2+A5/10*taux


 
Ca va m'afficher exactement ça, sauf que j'aimerais que ça m'affiche le détail pour pouvoir l'imprimer.  
 
Mon souhait :
 

Code :
  1. 2*4.5+30/10*0.85


 
 
Quelqu'un pourrait me donner un coup de main ? :)  
 
 
Merci !

Reply

Marsh Posté le 30-05-2015 à 10:58:22   

Reply

Marsh Posté le 30-05-2015 à 12:31:02    

 
           Bonjour,
 
           séparer chaque élément de la formule et pour ceux non numériques utiliser la fonction VBA  Evaluate  …
  

Reply

Marsh Posté le 30-05-2015 à 18:44:59    

Bonjour,
 
Tu peux utiliser la propriété DirectPrédédent.
 
Voici un exemple de code
 

Code :
  1. Sub test()
  2. Dim c As Range
  3. Dim p As Range
  4. Dim f As String
  5. Dim n As Name
  6.   Set c = ActiveCell
  7.   f = c.Formula
  8.   'Remplacer les adresses absolues par des adresses relatives
  9.   f = Replace(c.Formula, "$", "" )
  10.   'Analyser chaque précédent de la cellule
  11.   For Each p In c.DirectPrecedents
  12.     'Remplacer l'adresse du précédent par sa valeur
  13.     f = Replace(f, p.Address(False, False), p.Value)
  14.     'vérifier si le précédent est un nom
  15.     On Error Resume Next
  16.     Set n = p.Name
  17.     On Error GoTo 0
  18.     If Not n Is Nothing Then
  19.       ' .. si oui, remplacer le nom par la valeur du précédent
  20.       f = Replace(f, n.Name, p.Value)
  21.     End If
  22.   Next
  23.   MsgBox f
  24. End Sub


 
Attention : ce code est simpliste. il suppose que la formule ne traite pas de chaine de caractère contenant "$"  
                ou contenant un des noms de plage nommée (par exemple "taux" ).  


---------------
Cordialement, Patrice
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed