Lancer une fonction à intervalle régulier [Résolu/Fermé]

Signaler
-
 Clem -
Bonjour,

Suite à une brève discussion avec eric, je poste un nouveau sujet.

J'ai créé une fonction qui compte l'ensemble des cellules dans laquelle est présente un mot, dans une certaine plage définie par la cellule de départ (la fonction teste si la cellule suivante de la plage est vide, si oui elle s'arrete d'elle même). Elle prend donc en entrée un mot (à trouver) et une cellule (ou commencer la recherche). J'ai le code suivant:

Function compteur(name As String, cel)
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.Volatile
b = Left(cel.Address, 2)
c = cel.Row
Do While (b & c <> "")
Range(cel.Address).Select
If Range(b & c).Value = name Then
compteur = compteur + 1
End If
c = c + 1
If Range(b & c).Value = "" Then Exit Function
Loop
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Function


Mon problème est le suivant: j'avais cru comprendre que "Application.Volatile" permettait de recalculer la fonction à chaque changement de cellule, mais quelques fois cette modification n'a pas vraiment lieu... Pire, elle me renvoie une liste de zéros, et je suis obligé de recalculer manuellement une des cellules où j'utilise la fonction pour lancer le calcul dans toutes les autres.

Je me suis documenté sur la méthode Application.Ontime mais j'avoue avoir du mal à l'appliquer sur ma fonction...

Merci du coup de main.

Cordialement

4 réponses

Messages postés
23599
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
27 octobre 2020
6 429
Bonjour,

on time sert à lancer un sub, pas une fonction.

If Range(b & c).Value = "" Then Exit Function 

Il faudrait peut-être remettre xlCalculationAutomatic et Application.ScreenUpdating avant de quitter...

Application.Volatile n'est utile que si tu désires ré-évaluer la fonction alors que ses antécédents n'ont pas changés. Pas sur que ce soit utilise ici.

eric
Donc mettre ces deux lignes avant de faire letest de sortie de la fonction?

Désolé de la lenteur de la réponse
Messages postés
23599
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
27 octobre 2020
6 429
oui
et supprimer le .volatile à mon avis inutile et qui ralentira pour rien.
eric
Merci beaucoup pour tes réponses.

Cordialement
Clem
Messages postés
16271
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 octobre 2020
3 054
Bonjour Clem, Eriic,

Ta fonction me parait bien compliquée et lente avec tous ces select même avec l'écran figé...

petite question avant de te proposer une bidouille: dans ta plage sous la cellule de départ, il y a t il une ou des cellules vides d'intercalées qui stopperait le comptage?

je pars danS un 1/4 d'heure mais je pense que notre Eric national voit ce que je veux dire

attention "name" est un mot réservé vba: risque d'erreur ou d'ambiguiité
Non en fait j'ai deux tableaux distincts correspondant à deux machines, mais je traites plusieurs usines donc ces deux machines sont dans la meme usine, donc sur la meme feuille.
Donc une cellule vide marque la séparation entre les deux machines, et donc l'arret voulu du comptage
Messages postés
16271
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 octobre 2020
3 054
hé oui!
Bronzé mais un peu de pluie ferait pas de mal ! (Aie!, pas sur la tête,aie!)

Tiens, ci joint un petit supplément gratuit luxueusement illustré pour te montrer que, dès le printemps, baignade (et/ou canoé) et bronzage avant l'arrivée des touristes...

https://www.cjoint.com/?0GriyyiWX2Y

Aujourd'hui, direction la montagne pour chercher un peu de fraicheur et d'air (>=32° et pas un nuage en plaine).... reste calme, Eric, reste calme !

Amuse toi bien avec Excel !!!

Amicalement
Messages postés
23599
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
27 octobre 2020
6 429
Ah ouais, ça fait envie.
Prépare les glaçons, j'arrive ! ;-)
Bonne balade
eric
C'est en ce moment que j'apprécie vivre en Lorraine avec ses 15 degré...

Bon bin j'ai pas tout compris, en relancant mon excel ce matin, sans changer la formule il me donne une erreur de type valeur -_-

J'ai la poisse je crois :p
Messages postés
23599
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
27 octobre 2020
6 429
bonjour,

la fonction personnalisée de michel attend une chaine en 1er paramètre, et une référence de cellule en 2nd paramètre.
Function compter_nom(nom As String, cellule As Range)

eric
J'ai reposté, au cas ou ca interesse quelqu'un, et je me suis rendu compte d'un truc marrant: si je valide la fonction avec la touche enter, pas de prolème, ca compte et j'obtiens le bon résultat. Si par contre je valide avec le bouton a gauche de l'endroit ou on tape la fonction, la ca me renvoi une erreur de type valeur... Bizarre non?