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 :
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.Volatilehttps://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 Functionet 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