Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fonction privée pas si privée que ça ...

spin

XLDnaute Nouveau
Bonjour,

Dans un classeur Excel (2000), j'utilise une fonction perso dans certaines cellules d'une feuille. Cette fonction perso est écrite en VBA da la manière suivante (je vous fait grace des lignes de code) :


Option Private Module
Option Explicit

Private Function NbSpare(FITS, DaysRepair, ConfidenceLevel)

.......

End Function


J'ai beau avoir mis l'option Private Module et déclaré ma fonction en Private Function, mon problème est de deux ordres:

1 / Moyennement génant :
la fonction NBSpare se lance automatiquement lorsque je saisi un valeur dans une cellule ne contenant pas la fonction et se trouvant dans une autre feuille que celle où la fonction est utilisée

2/ Beaucoup plu génant, voire même bloquant:
Il m'arrive d'avoir plusieurs classeurs identiques d'ouverts. Appelons les Classeur1 et Classeur2.
Si je modifie quelque chose dans le classeur1, il arrive que la fonction NBSpare du classeur2 se lance, et/ou inversement, perturbant le bon fonctionnement de mes calculs.

Bref, je ne copmprends pas pourquoi toutes ces options Private ne fonctionnent pas...

Merci d'avance
Spin
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

Bonjour

Je ne vois pas le rapport entre mettre Private et le fait que cela ne lance pas ta fonction

Le private empeche l'accès à ton module par d'autre module mais n'empeche pas le recalcul. Donc quand tu modifies une cellule il y aun recalcul de ta feuille. c'est normal

Je pense qu'il faut plutot que tu ailles cherche du coté de

Application.volatile=false

en début de fonction
 

spin

XLDnaute Nouveau
Re : Fonction privée pas si privée que ça ...

Salut

Je suis d'accord, mais comment se fait-il que la fonction soit lancée alors que la cellule modifiée ne soit pas dans la feuille concerné par la fonction ? Le fait de mettre Private module devrait interdire le lancement de la fonction par une autre feuille , non ?

Et surtout comment se fait-il que la fonction soit lancée par un autre classeur ?

En d'autres termes, a qui sert private module et private fonction (je ne vois pas de différence entre public et private dans mon cas ...)

Spin
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

Re

pour le problème private module voilà ce que dit l'aide

pour tes calculs et bien il faut voir comment le calcul se refait. Si il se fait ssur l'application tu recalcules tous tes classeurs ouverts
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

re

petit ajout de l'aide

 

spin

XLDnaute Nouveau
Re : Fonction privée pas si privée que ça ...

Merci pour tes réponses si rapide.

Je connais l'aide d'Excel, mais elle ne m'est pas d'une grande utilité. Ceci dit, je retiens une phrase qui ne m'avait pas sauté aux yeux, et qui m'intrigue maintenant:
"Dans des applications hôtes qui n'autorisent pas ce type de références, par exemple dans les versions autonomes de Visual Basic, l'instruction Option Private est sans effet"
Je suis peut-être dans ce cas ? Qui'est-ce qu'un version autonome de VBA ? Mais je ne pense pas que le VBA d'Excel soit autonome ...
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

Re

Non cela n'a rien à voir

Juste pour te montrer que le private n'influe pas sur les calculs et comme tu es en calcul automatique tu recalcules tout tes classeurs
 

spin

XLDnaute Nouveau
Re : Fonction privée pas si privée que ça ...

D'accord avec ça.
Mais si cette option private existe pour une fonction, c'est bien pour éviter qu'une fonction d'un classeur soit lancée par un autre classeur, non ?
 

Ti_

Nous a quitté
Repose en paix
Re : Fonction privée pas si privée que ça ...

Salut

Si le recalcul se fait sur des cellules contenant ta fonction, il est probable que ce soit parce que ces cellules sont dépendantes d'autres cellules nécessitant un recalcul. Tu peux t'en assurer en utilisant l'outil "Audit de formules"
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

spin à dit:
D'accord avec ça.
Mais si cette option private existe pour une fonction, c'est bien pour éviter qu'une fonction d'un classeur soit lancée par un autre classeur, non ?

Non ça n'a rien à voir

re l'ai de pour PRivate
Facultatif. Indique que la procédure Function n'est accessible qu'à d'autres procédures du module dans lequel elle a été déclarée.

Cela ne concerne qu'une sub qui appellerait ta fonction et rien d'autre
 

spin

XLDnaute Nouveau
Re : Fonction privée pas si privée que ça ...

Ok, j'ai compris, merci.

Je suis en train de faire des essais, en déroulant mes procédures pas à pas et en ayant 2 classeurs contenant tous les deux cette fonction.

Lorsqu'une cellule quelconque du classeur 1 est modifiée, la fonction du classeur 2 est déroulée puis juste après la fonction du classeur 2.

Conclusion, tu as effectivement raison : si un classeur se recalcul, tous les classeurs ouverts se recalculent aussi. Donc ma fonction est déroulée pour tous les classeurs ouvert.

Existe-t'il un moyen pour éviter ça, à part mettre à un endroit bien pertinent l'instruction Application.Calculation = xlManual ? (Je n'aime pas cette instruction car si une macro plante en cours de route, excel se trouve en calcul manuel et si on pense pas à le remettre en auto ... adieu les bons résultats !)
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Fonction privée pas si privée que ça ...

Re

et bien en fait tu lui dis par ce code que ta fonction ne se recalcule que si ces valeurs d'entrée se modifie et non à chaque recalcul de ta feuille.
 

spin

XLDnaute Nouveau
Re : Fonction privée pas si privée que ça ...

Oui, et je pense que je vais effectivement garder cette instruction car elle va probablement amméliorer le fonctionnement de mon fichier. Mais en ce qui concerne mon pb, je ne vois aucun changement...
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…