Comment forcer l'exécution d'une fonction personnalisée à chaque recalcul
3 réponses
É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) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard" <etienne.chouard@free.fr> a écrit dans le message de news:
egIfuvaDJHA.3392@TK2MSFTNGP03.phx.gbl...
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) ?
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.
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.
Change:
If InStr(cel.Value, "_Sup") > 0 Then
au lieu de :
If InStr(cel.Value, "_Sup") Then
Daniel
"Étienne Chouard" <etienne.chouard@free.fr> a écrit dans le message de news:
emSsExdDJHA.2476@TK2MSFTNGP06.phx.gbl...
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" <dZZZcolardelle@free.fr> a écrit dans le message de news:
%23RTNB$aDJHA.528@TK2MSFTNGP06.phx.gbl...
Bonjour.
Ca dépend du code de ta fonction.
Essaie en ajoutant :
Application.Volatile
au début du code.
Cordialement.
Daniel
"Étienne Chouard" <etienne.chouard@free.fr> a écrit dans le message de
news:
egIfuvaDJHA.3392@TK2MSFTNGP03.phx.gbl...
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) ?
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.
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. | |
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" <etienne.chouard@free.fr> a écrit dans le message de news:
egIfuvaDJHA.3392@TK2MSFTNGP03.phx.gbl...
| 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.
|
|
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. | |