Microsoft 365 "Récupérer" le résultat d'une fonction VBA avant le changement

tbft

XLDnaute Accro
Bonjour à tous

J'ai du mal à formuler ma demande.
Le plus est de regarder le fichier joint et plus particulièrement la fonction test_lecture_ancien_resultat().
Elle est utilisé à la cellule H11 et alimenter par la cellule G11.
Ce que je cherche, est quand début de fonction, je puisse récupérer les valeurs (résultats) de l'ancien calcul.

J'ai fait des essais dont le résultat est ... catastrophique... comme le résultat des recherches sur le NET

Pouvez-vous m'aider, s'il vous plait?

D'avance merci.
 

Pièces jointes

  • Essais formules et autres.xlsm
    21.6 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tbft, Vgendron,
Il est possible de "piquer" les valeurs lors d'un clic sur G11.
Pour cela, voir PJ, on déclare des valeurs public dans un module :
VB:
Public OldValueH11, OldValueI11, OldValueJ11, OldValueK11
Dans la feuille concernée, on mémorise les valeurs sur clic G11 :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [G11]) Is Nothing Then
        OldValueH11 = [H11]
        OldValueI11 = [I11]
        OldValueJ11 = [J11]
        OldValueK11 = [K11]
    End If
Fin:
End Sub
On pourra ré utiliser ces valeurs ensuite, voir par ex module PourTest :
Code:
Sub PourTest()
    MsgBox "Nouvelles et anciennes valeurs de  :" & Chr(10) & _
    "H11 = " & [H11] & " - ancienne " & OldValueH11 & Chr(10) & _
    "I11 = " & [I11] & " - ancienne " & OldValueI11 & Chr(10) & _
    "J11 = " & [J11] & " - ancienne " & OldValueJ11 & Chr(10) & _
    "K11 = " & [K11] & " - ancienne " & OldValueK11
End Sub
 

Pièces jointes

  • Essais formules et autres.xlsm
    23.4 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
Bonjour.
On pourrait aussi, éventuellement, dans la Function, stocker dans une collection VBA les nouvelles valeurs, et dans une Sub Worksheet_Calculate les y retrouver et les ranger dans un tableau connu sous un certain nom, d'où ou pourra les extraire ultérieurement …
 

tbft

XLDnaute Accro
Par contre, j'ai un peu avancé :

VB:
Public Function test_lecture_ancien_resultat(NB As Integer)
Dim res(), i As Integer
Dim tp As Variant
Dim tp2, tp3, old_res
  'test de recuperation des anciennes valeurs avant remplacement des nouvelles
  'tp = Application.Caller : entrene une boucle donc echec
  'tp = Application ' renvoi la chaine "Microsoft Excel"
 
  Set tp = Application ' renvoi l'objet "Microsoft Excel"
  'tp2 = tp.Caller.Parent.Name 'renvoir le nom de la page ou se trouve le parametre nb
  'tp2 = tp.ActiveCell.Address 'renvoi la cellule active
  tp2 = tp.Caller.Address
  tp3 = tp.Caller.Parent.Name
  old_res = Worksheets(tp3).Range(tp2).Value
 
  'fonction bidon pour remplir les valeurs
  ReDim res(NB)
  For i = 2 To NB
    res(i) = 1 + NB - i
  Next i
 
  res(1) = tp3 + " : " + tp2 + "=" + old_res
 
  'renvoi du resultat
  test_lecture_ancien_resultat = res
End Function

Le soucis est que je me retrouve avec un référence circulaire.....
je pense que c'est du à la ligne old_res=....
 

Dranreb

XLDnaute Barbatruc
Vous devriez nous exposer ce que votre vraie fonction devra calculer en supposant que la valeur de la fonction est disponible dans une expression aussi bien en lecture qu'en écriture et qui s'appellera 'Enreg' par exemple.
VB:
Function Test(ByVal X As Double) As Double
   Test = Enreg
   Test = X + 1
   Enreg = Test
   End Function
L'endroit et la façon dont la valeur de Enreg sera conservée dépendra de 2 choses :
1) — La pérennité: selon qu'elle devra ou non être conservée entre 2 réinitialisations du projet VBA.
2) — La multiplicité: selon que la fonction sera invoquée dans une seule cellule de tout le classeur où dans de nombreuse cellules de nombreuses feuilles (mais dans une seule colonne, enfin donnez tous les détails de sa multiplicité souhaitée).
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
il y a une astuce bien connu qui consiste a enregistrer dans un commentaire a chaque changement
parti de là formule et valeur peuvent être mémorisées a la suite dans le texte du commentaire
tout les 10 ou x changement ne garder que les dix derniers par exemple pour un eventuel UNDO perso
bref la solution est simple
 

vgendron

XLDnaute Barbatruc
Bonjour à tous
perso, je n'ai toujours pas compris le besoin..

Récupérer" le résultat d'une fonction VBA avant le changement​


question sous jacente==> Pourquoi avoir besoin du résultat AVANT de le mettre dans la cellule?
ou ...qu'est ce qui fait que ce résultat ne doit pas etre inscrit
==> ce qui impliquerait que finalement, la fonction.. est incomplète.. manque une condition..
 

Discussions similaires

Statistiques des forums

Discussions
315 134
Messages
2 116 615
Membres
112 812
dernier inscrit
jocelyne86360