XL 2010 Application.Volatile pose problème

fablog

XLDnaute Occasionnel
Bonjour tout le monde,

J'ai un soucis avec une fonction (qui n'est pas de moi). Si je modifie une cellule ne contenant pas cette fonction, il fait quand même un recalcul. Il semble que cela soit du à ligne "Application.Volatile" qui m'est nécessaire pour que le recalcul se fasse automatiquement dans les cellules contenant cette fonction. Avez-vous une solution svp pour que seule les cellules contenant cette fonction soit actualisée quand ce sont elles que je modifie?

VB:
Function pond(r As Range)
Application.Volatile
For Each c In r
'Stop
rang = c.Row
col = c.Column: b = Cells(1, col)
pond = pond + (coef(c) * c * b)
Next c
Calculate
End Function
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

Ne pas tenir compte de ce qui suit. Grossière erreur, désolé.
ce sont les cellules avec saisies qu'il faut passer à la fonction.

Par exemple ta fonction utilise C2 et tu y as =A2+B2,
A2 et B2 étant des saisies, ce sont ces cellules qu'il faut passer et non C2 qui contient une formule.
Et si en B2 tu as une formule il faut continuer et remonter ses antécédents jusqu'à trouver tous ceux qui sont des saisies.
C'est plus clair ? Pas sûr...
:)
eric
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui enfin seules les cellules dont les valeurs interviennent dans le code de la Function doivent être spécifiés en paramètres, pas leurs antécédents quand même ! Excel fait ce qu'il faut pour que la fonction soit réévaluée si une cellule contenant une formule et faisant partie d'une plage spécifiée en paramètre change de valeur à cause de ses antécédents !
Ce n'est donc pas A1 qu'il faut passer en paramètre à ta fonction.
A1:B1 y étaient utilisés jusqu'à présent, il fallait donc les passer. Simplement on dirait que le demandeur préfèrerait plutôt lui transmettre des informations provenant de la ligne 5, mais il refuse obstinément d'expliquer de façon très détaillée ce qu'il voudrait que la fonction en fasse. Il semblerait par ailleurs que cela impliquerait d'y spécifier aussi une plage d'une autre feuille.
On est en tout cas très loin du problème initial de la fonction qui n'était justement pas évaluée parce qu'elle utilisait cette plage A1:B1 alors qu'elle qu'elle n'était spécifiée en paramètre, de sorte qu'Excel n'avait aucune raison de la supposer antécédente.
Edit: J'ajouterais que j'ai bien l'impression qu'il n'y avait pas qu'Excel qui ignorait que la fonction Pond utilisait les cellules A1:B1, fablog non plus ne le savait pas ! Tout était (mal) fait pour qu'on oublie même l'existence de ces formules…
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Si ça se trouve, peut être qu'il suffirait seulement de mettre en A1:B1 :
Code:
=SIERREUR(INDEX('Admin (Salaire)'!$I:$I;EQUIV(A$5;'Admin (Salaire)'!$A:$A;0));0)
Mais pas sûr. Il y a aussi cette histoire de date…
Ah non, la date est prise en compte par la formule en 'Admin (Salaire)'!$A:$A. Curieux système tout ça…
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

seules les cellules dont les valeurs interviennent dans le code de la Function doivent être spécifiés en paramètres, pas leurs antécédents quand même !
Houlala, tu as raison, je crois bien que je me suis emballé et que j'ai été trop loin.
Seules les cellules non passées mais utilisées doivent être ajoutées.
Je retire donc les 9/10 de ce que j'ai dit. Désolé

A1:B1 y étaient utilisés jusqu'à présent, il fallait donc les passer.
Oui, je les ai laissées car effectivement nécessaires .
A moins d'aller chercher la valeur qu'elle ramène directement, comme évoqué dans ton post précédent.
eric

PS : vu qu'on a changé de page, tu as un post de Dranreb juste avant...
 
Dernière édition:

fablog

XLDnaute Occasionnel
Cela fonctionne, merci pour votre aide!! Désolé de n'avoir pu donner plus de détails sur mon fichier; le VBA n'étant pas mon dada, je n'étais pas capable de comprendre vos échanges et demandes. Je ne parle même pas de la difficulté de produire un fichier d'exemple à partir d'un outil Excel complexe développé depuis une année...
 

Discussions similaires

Réponses
7
Affichages
521

Statistiques des forums

Discussions
312 194
Messages
2 086 068
Membres
103 110
dernier inscrit
Privé