Application volatile ou alternative

Bonjour,

J'ai récupérer une fonction sur le net qui calcule le nombre de cellule colorée et qui fonctionne très bien.

Application.volatile permet de mettre à jour la fonction dès qu’il y a une modification dans ma feuille cependant, dès que je modifie n'importe quelle cellule de n'importe quelle feuille qui n'a aucun lien avec la fonction ou qui ne contient aucune cellule appelant la fonction Excel lance le recalcule.

L’idee, si possible serait de dire à Excel d’appeler la fonction que sur la feuil concernée.

Cordialement.

Bonjour,

à ma connaissance, si dans l'appel de ta fonction tu fais appel à des plages dynamiques (=tu utilises les fonctions indirect ou offset(décaler)) tu provoqueras un recalcul des toutes tes cellules. ce n'est pas lié à ta fonction. peut-être est-ce le cas que tu rencontres ?

Bonjour,

à ma connaissance, si dans l'appel de ta fonction tu fais appel à des plages dynamiques (=tu utilises les fonctions indirect ou offset(décalage)) tu provoqueras un recalcul des toutes tes cellules. ce n'est pas lié à ta fonction. peut-être est-ce le cas que tu rencontres ?

Salut merci de ta réponse.

J’ai pas très bien compris mais si cela peut t’éclairer voici la fonction :

Function NbCoul(one As Range, Couleur As String)
Application.Volatile
For Each Cell In one
If Cell.Interior.ColorIndex = Couleur Then NbCoul = NbCoul + 1
Next
NbCoul = NbCoul
End Function

Et cette fonction s’execute Même si dans la cellule je ne l’appelle pas.

Bonjour,

comment utilises-tu cette fonction personnalisée ?

en d'autres mots, que mets-tu à la place de one dans ?

=nbcoul(one, couleur)

si tu mets une plage nommée variable (par exemple définie avec décaler ou indirect) excel va forcer le re-calcul, quelle que soit la valeur d'application.volatile.

Bonjour,

tu peux, mais tu ne peux pas empêcher l'appel à la fonction (raison d'être de Volatile).

Tu peux donc quitter au plus vite, le soucis c'est que ton ancien résultat sur la feuille de ta fonction est déjà perdu. Il faudra forcer son recalcul quand tu afficheras cette feuille.

Et ça peut être rédhibitoire si ce résultat est réutilisé dans d'autres feuilles...

Le principe :

Function NbCoul(one As Range, Couleur As Long)
    Dim c As Range, v As Double
    Application.Volatile
    If Application.ThisCell.Parent.Name <> ActiveSheet.Name Then Exit Function
    For Each c In one
        If c.Interior.ColorIndex = Couleur Then NbCoul = NbCoul + 1
    Next
End Function

Mais as-tu vraiment besoin de maj en direct ?

A moins d'un strabisme divergent tu n'as pas un oeil sur ta cellule de saisie et un autre sur ce compteur en permanence.

Le plus simple c'est de remplacer la fonction par un sub que tu appelles par un bouton.

Doublé éventuellement par un appel lorsque tu quitte la feuille, ainsi qu'à l'ouverture du fichier.

eric

Salut

La fonction est utilisé comme suit: (j’ai quitté le boulot donc je n’ai pas l’exemple Avec moi)

J’ai le nom des collègues en colonne A2, A3, A4...et dans les colonnes suivante (B1,C1...) j’ai les jours du mois.

Si le collègue est absent ou en congé ou en formation ou autre je sélectionne la durée puis j’applique une couleur en fonction.

Dans la dernier ligne j’ai donc mis la fonction Nbcoul(B1:Bn, 4)

Donc dès que j’applique ma couleur le calcul du nombre de collègue absent se fait simplement et de suite.

Quand je vais sur ma feuil 2 et que j’execute Une autre macro qui n’a rien à voir, la fonction est quand même appelé et cela ralenti Excel considérablement.

J’essaie la solution d’eric Demain et je vous dis.

Sinon tout mettre en vba comme le dit eriiic pourrait être une solution c’est à dire : j’appui Sur le bouton, qui colore ma cellule et qui incrément +1 sur la dernière ligne chaque fois q’une même Couleur est ajouté dans là colonne.

Bonjour,

J’ai essayé la solution d’eric Sans succès

Je vous joint une partie du tableau ;

https://www.cjoint.com/c/HDnos1lAmbp

Si vous avez une solution en vba directement quand je clique sur le bouton congé formation... que le décompte se fait automatiquement jsuis preneur.

Merci pour vos retours.

Salut.

Je n’y arrive toujours pas.

Je pense abandonner l’idee De la fonction et partir sur celle de l’incrementation vba.

Donc quand je sélection une zone elle change de couleur en fonction de ce qui est choisi (congé,formation,maladie...)et on incrémente le nombre dans le total. Le même bouton doit être utilisé pour les agents bureau et agents stock.

Si vous avez une solution jsuis preneur... je fouille tjs

Bonsoir,

pour moi, il y doit y avoir un problème avec le fichier que tu as mis (taille 0kb)

Oups. Je re-upload dsl

Bonjour,

Voici un nouveau lien :https://www.cjoint.com/c/HDrlQjcIdst

Rechercher des sujets similaires à "application volatile alternative"