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
Lorsqu'elle est utilisée dans des applications hôtes autorisant des références dans plusieurs projets, l'instruction Option Private Module interdit au contenu d'un module d'être référencé à l'extérieur de son projet. 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.
Syntaxe
Option Private Module
Remarques
Si elle est utilisée, l'instruction Option Private doit apparaître au niveau module, avant toute procédure.
Si un module contient une instruction Option Private Module, les éléments publics, par exemple les variables, les objets et les types définis par l'utilisateur déclarés au niveau module, restent disponibles dans le projet contenant le module, mais ne sont pas disponibles pour les autres applications ou projets.
Note L'instruction Option Private n'est utile que pour les applications hôtes gérant le chargement simultané de plusieurs projets et autorisant des références entre les projets chargés. Par exemple, Microsoft Excel autorise le chargement de plusieurs projets et l'instruction Option Private Module peut être utilisée pour restreindre la visibilité interprojets. Bien que Visual Basic autorise le chargement de plusieurs projets, les références entre projets ne sont jamais autorisées au sein de Visual Basic.
voilà c eque 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

Calculs dans des classeurs

Un calcul est la procédure utilisée pour résoudre des formules et en afficher les résultats sous forme de valeurs dans les cellules qui contiennent ces formules. Par défaut, Microsoft Excel calcule automatiquement tous les classeurs ouverts. Cependant, vous pouvez décider du moment où le calcul se produit.
 

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 ...
 

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 !)
 

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...
 

Statistiques des forums

Discussions
314 023
Messages
2 104 740
Membres
109 124
dernier inscrit
Bilouwal