Mécanisme pour forcer recalcul d'un onglet contenant des UDF

Bonjour à toutes et à tous,

Cette question fait suite à un précédent fil, en grande partie résolu :

https://forum.excel-pratique.com/excel/pb-de-concatenation-de-texte-pour-calcul-formule-complexe-163...

En résumé j'utilise par obligation (sur plusieurs centaines de lignes) des SOMMEPROD et INDIRECT, en grande partie spécifiques sur chaque ligne

J'ai trouvé comment surcharger mon SOMMEPROD au moyen d'une UDF

Cela fonctionne en l'état de manière convenable (onglet Calculs du fichier joint : résultat attendu en B56), mais quand je modifie une valeur dans mon onglet Q1, ou je fais mes saisies,

- mes valeurs ne sont pas recalculées automatiquement sur Calculs

- mon affichage déporté de ces valeurs sur Q1 et Q2 se met en erreur (Voir Valeur de test sur ces 2 onglets)

j'ai testé plein de formules de calculate / calculateFull et autres invocations druidiques sans vraiment y comprendre qq chose (je suis très vert en vba)

Existe-il

- la possibilité d'un bouton, sur Q1 et/ou Q2, qui permettrait de forcer le recalcul de l'onglet Calculs

- la possibilité quand je passe sur l'onglet Q1 ou Q2 d'un recalcul de Calculs qui me permette de ne plus afficher d'erreurs dans ces onglets

Tout cela afin que

- je n'aie pas à repasser dans Calculs a chaque fois que je fais une modif qq part

- je puisse évaluer mon résultat de manière triviale

En vous remerciant pour vos éclairages, parce que là je colle sévère !

Et en espérant que le xls que j'ai préparé vous permettra d'appréhender et résoudre mon problème

#TEASER !! Pour me faire pardonner mon inaptitude VBA, je vous livre dans le fichier joint (onglet Params) un méca de liste déroulante paramétré en ligne (je hais les petits bouts de tableaux pour les listes déroulantes), et dynamique, qui m'aide souvent! Sans doute améliorable.

Cdlt

Achille

Bonsoir Achille,

Si j'ai bien compris, tu as juste à ajouter au tout début de tes fonctions

Application.Volatile

https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.volatile

#TEASER !!!
Inutilise d'utiliser la fonction CONCATENER, il suffit de mettre le signe "&" entre chaque cellule que tu veux "additionner", mais merci

A+

Bonsoir et merci pour ton retour, BrunoM45

Parmi les différents tests effectués depuis mon ancien post, j'ai effectivement tenté de positionner Application.Volatile, avec les appels à Maintenant() sensés répondre au problème.

Avec évolution du code de mes 2 fonctions, pour ajouter la ligne Application.Volatile:

Public Function INDIRVBA(ref_text As String)
    Application.Volatile
    INDIRVBA = Range(ref_text)
End Function

Function SumProdVar1(ValSrc, ValAdd, Optional VolatileParameter As Variant)
    Application.Volatile
    strFormula = "SUMPRODUCT(" & ValSrc.Value & "*" & ValAdd.Value & ")"
    SumProdVar1 = Evaluate(strFormula)
End Function

et avec déjà la présence de VolatileParameter (un reste d'un autre test), cela ne change rien :

Quand je modifie une valeur dans le tableau de l'onglet Q1, je dois ensuite aller faire F9 manuellement dans l'onglet Calculs pour avoir du refresh (F9 marche pas dans Q1), pour avoir une valeur sans erreur dans Q1 et Q2

Merci dans tous les cas pour ton retour !! Mais hélas cela ne semble pas très trivial, d’où mon fichier pour tests, que je continue à martyriser

#TEASER : Pour le & à la place du CONCATENER, oui cela serait un peu plus digeste (pas encore le réflexe de l'utiliser mais je vais (me) corriger !)

Cordialement

Achille

Rechercher des sujets similaires à "mecanisme forcer recalcul onglet contenant udf"