Comment forcer l'exécution d'une fonction personnalisée à chaque recalcul

Le
Étienne Chouard
Bonjour à tous,

J'ai créé une fonction personnalisée (avec Function en VBA)
et j'ai appelé cette fonction dans une formule de calcul.

Cette fonction marche bien au moment où on la valide avec Entrée,
mais elle ne se recalcule pas en permanence (comme les autres formules) :
pour réévaluer la fonction, il faut "entrer dans" la cellule avec F2 et la
valider avec Entrée.

Qu'est-ce qu'il faut faire pour qu'elle se recalcule normalement (comme les
autres cellules) ?

Merci pour votre aide précieuse.

Étienne.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #16705661
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard"
Bonjour à tous,

J'ai créé une fonction personnalisée (avec Function... en VBA)
et j'ai appelé cette fonction dans une formule de calcul.

Cette fonction marche bien au moment où on la valide avec Entrée,
mais elle ne se recalcule pas en permanence (comme les autres formules) :
pour réévaluer la fonction, il faut "entrer dans" la cellule avec F2 et la
valider avec Entrée.

Qu'est-ce qu'il faut faire pour qu'elle se recalcule normalement (comme
les autres cellules) ?

Merci pour votre aide précieuse.

Étienne.



Daniel.C
Le #16709041
Change:
If InStr(cel.Value, "_Sup") > 0 Then
au lieu de :
If InStr(cel.Value, "_Sup") Then
Daniel

"Étienne Chouard"
Merci Daniel,

J'ai essayé d'ajouter Application.Volatile dans la fonction, mais cela
semble ne pas (encore) fonctionner.

J'ai essayé de déplacer le code du module vers le code d'une feuille, mais
sans succès non plus.


Il s'agit de signaler par un message qu'une (ou plusieurs) des cellule d'une
plage (nommée ZoneNumAnnexesRéelles) se termine par la chaîne "_Sup" (car
alors l'opérateur doit faire une manip prioritaire).

La fonction est la suivante ( dans un des modules du classeur) :

Function TROUVE_SUP(ZONE As String)

Application.Volatile

TROUVE_SUP = 0
For Each cel In Sheets("HistoAnnexes").Range(ZONE)
If InStr(cel.Value, "_Sup") Then
TROUVE_SUP = TROUVE_SUP + 1
End If
Next
End Function

Avec un petit programme de lancement pour tester la fonction en pas à pas :

Sub test_trouve()
Dim NOM As String
NOM = "ZoneNumAnnexesRéelles"
MSG = TROUVE_SUP(NOM)
MsgBox MSG
End Sub

En pas à pas, avec le programme de lancement, ça fonctionne.

La formule dans une des cellules est :

=SI(TROUVE_SUP("ZoneNumAnnexesRéelles")=0;0;"Attention ! Il y a
"&TROUVE_SUP("ZoneNumAnnexesRéelles")&" annexe(s) supprimée(s) à recréer en
priorité.")

Avec un format conditionnel qui rend le fond de cette cellule orange si elle
contient 1.

Si on édite la formule (avec F2 par exemple), ça fonctionne au moment où on
tape Entrée.

Mais ça ne se recalcule toujours pas en permanence, malgré l'instruction
Volatile (dont la description de l'aide correspond pourtant parfaitement à
mon besoin ; merci de me l'avoir signalée, d'ailleurs).

Pour l'instant, j'ai programmé l'édition de la formule en fin de traitement
critique pour actualiser la formule au moins quand c'est essentiel.


Au passage, il y a peut-être des moyens plus élégants (avec une fonction
d'origine ?) de détecter (et même de compter ?) qu'un texte existe au moins
une fois dans le coeur d'uen cellule d'une plage ? Qui sait...

Merci pour tout, en tout cas :o)

Étienne.

"Daniel.C" %23RTNB$
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard" news:

Bonjour à tous,

J'ai créé une fonction personnalisée (avec Function... en VBA)
et j'ai appelé cette fonction dans une formule de calcul.

Cette fonction marche bien au moment où on la valide avec Entrée,
mais elle ne se recalcule pas en permanence (comme les autres formules) :
pour réévaluer la fonction, il faut "entrer dans" la cellule avec F2 et
la
valider avec Entrée.

Qu'est-ce qu'il faut faire pour qu'elle se recalcule normalement (comme
les autres cellules) ?

Merci pour votre aide précieuse.

Étienne.







LE TROLL
Le #16710691
Bonjour,

En VB, appel d'une fonction :

Sub Command1_Click() ' depuis un bouton exp...
Dim monPrenom As String
Call monNom(monPrenom)
MsgBox monPrenom
End Sub

Function monNom(monPrenom As String) As String
monPrenom = "albert"
End Function

Donc:

Call fonction(paramètres)

???

--------------

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Étienne Chouard"
| Bonjour à tous,
|
| J'ai créé une fonction personnalisée (avec Function... en VBA)
| et j'ai appelé cette fonction dans une formule de calcul.
|
| Cette fonction marche bien au moment où on la valide avec Entrée,
| mais elle ne se recalcule pas en permanence (comme les autres formules) :
| pour réévaluer la fonction, il faut "entrer dans" la cellule avec F2 et la
| valider avec Entrée.
|
| Qu'est-ce qu'il faut faire pour qu'elle se recalcule normalement (comme
les
| autres cellules) ?
|
| Merci pour votre aide précieuse.
|
| Étienne.
|
|
Publicité
Poster une réponse
Anonyme