Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
É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.

3 réponses

Avatar
Daniel.C
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard" a écrit dans le message de 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.



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

"Étienne Chouard" a écrit dans le message de news:

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" a écrit dans le message de news:
%23RTNB$
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard" a écrit dans le message de
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.







Avatar
LE TROLL
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" a écrit dans le message de 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.
|
|