OVH Cloud OVH Cloud

Empêcher partiellement le recalcul

7 réponses
Avatar
Frédéric Decréquy
Bonjour,

Nous utilisons Excel 2003 en faisant appel dans les cellules à des fonctions
FUNCTION contenues dans des XLA chargés au démarrage ou incluses dans le
modèle.

Ces fonctions font elles-mêmes appel à un serveur DLL qui n'est pas toujours
disponible.

Hélas, lors du Save As, ou du premier Save d'un nouveau Worksheet, un
recalcul est effectué aux conditions bizarres suivantes qui nous gênent :


* Si un paramètre de notre fonction en XLA fait appel à une cellule par son
nom

* Si un paramètre de notre fonction en XLA fait appel à une cellule sur une
autre Sheet du même Worksheet

* Si la feuille (sheet) contient l'une de nos fonctions en XLA utilisée en
tant que paramètre d'une autre fonction.

Et un recalcul quand le serveur n'est pas disponible, cela donne des choses
bizarres.

Quelqu'un a-t-il déjà constaté ce problème ?

Quelqu'un a-t-il une solution directe ?

Merci d'avance.

7 réponses

Avatar
michdenis
Bonjour Frédéric,

| Ces fonctions font elles-mêmes appel à un serveur DLL qui n'est pas toujours disponible.

Cela signifie que la DLL dont relève la macro complémentaire n'est pas sur chacun des ordinateurs
utilisant cette macro complémentaire ?

Que ce soit à l'enregistrement ou à d'autres moments qu'est-ce qui se passe si seulement
certaines fonctions ne relevant pas de cette DLL sont recalculées ? Les résultats doivent être
en effet bizarre !

Et si la DLL est disponible directement sur l'ordinateur, as-tu le même problème ?

Ce que tu décris est plutôt le fonctionnement "normal" d'excel dans la façon de mettre
le contenu des cellules à jour sauf si le classeur est en mode de calcul manuel.


Salutations!


"Frédéric Decréquy" a écrit dans le message de news: O07wY29$
Bonjour,

Nous utilisons Excel 2003 en faisant appel dans les cellules à des fonctions
FUNCTION contenues dans des XLA chargés au démarrage ou incluses dans le
modèle.

Ces fonctions font elles-mêmes appel à un serveur DLL qui n'est pas toujours
disponible.

Hélas, lors du Save As, ou du premier Save d'un nouveau Worksheet, un
recalcul est effectué aux conditions bizarres suivantes qui nous gênent :


* Si un paramètre de notre fonction en XLA fait appel à une cellule par son
nom

* Si un paramètre de notre fonction en XLA fait appel à une cellule sur une
autre Sheet du même Worksheet

* Si la feuille (sheet) contient l'une de nos fonctions en XLA utilisée en
tant que paramètre d'une autre fonction.

Et un recalcul quand le serveur n'est pas disponible, cela donne des choses
bizarres.

Quelqu'un a-t-il déjà constaté ce problème ?

Quelqu'un a-t-il une solution directe ?

Merci d'avance.
Avatar
Frédéric Decréquy
La DLL met du temps à charger ses données, ce qui fait que nous avons un
bouton de chargement des données dans la barre d'outils, mais nous
préférerions l'utiliser rarement pour certains Worksheets. La DLL reste sur
le poste, oui.

Application.Volatile en début de fonction sert à ça mais nécessite un
premier appel à chaque chargement.

Nous voudrions éviter les solutions suivantes :
* Application serveur réseau qui met en cache les informations de la base de
données,
* modifier SaveAs pour faire une sauvegarde normale, un close, un Rename
Visual Basic, et une réouverture ;
* Faire des fonctions qui font appel à une feuille qui est une copie
immédiate des données lorsqu'un drapeau l'autorise. Le drapeau est activé
lors de l'enregistrement, et est désactivé lors de la mise à jour. La mise à
jour met à jour aussi la copie immédiate.

"michdenis" a écrit dans le message de news:
#xiMWQ$$
Bonjour Frédéric,

| Ces fonctions font elles-mêmes appel à un serveur DLL qui n'est pas
toujours disponible.


Cela signifie que la DLL dont relève la macro complémentaire n'est pas sur
chacun des ordinateurs

utilisant cette macro complémentaire ?

Que ce soit à l'enregistrement ou à d'autres moments qu'est-ce qui se
passe si seulement

certaines fonctions ne relevant pas de cette DLL sont recalculées ? Les
résultats doivent être

en effet bizarre !

Et si la DLL est disponible directement sur l'ordinateur, as-tu le même
problème ?


Ce que tu décris est plutôt le fonctionnement "normal" d'excel dans la
façon de mettre

le contenu des cellules à jour sauf si le classeur est en mode de calcul
manuel.



Salutations!


Avatar
michdenis
*Application.Volatile en début de fonction sert à ça mais nécessite un
premier appel à chaque chargement.

Sert à ça : C'est quoi ÇA ?
Application.Volatile permet le recalcul d'une fonction à chaque
recalcul d'une feuille. Excel a déjà environ 10 fonctions "natives"
qui sont par définition Volatile :
Alea(), Colonne(), Lignes() , Maintenant(), Colonnes(), Decaler()
aujourdhui(), zones(), Index() indirect()

Application.Volatile est utile seulement si la fonction n'a pas
de paramètres qui fait référence à des cellules de la feuille
de calcul.

* modifier SaveAs ...
Il faut enregistrer un fichier une première fois
En renseignant le chemin et le nom que le fichier devrait avoir
tu obtiens une ligne de code comme ceci :
ThisWorkbook.SaveAs "c:ExcelMonFichier.xls"
Je ne connais pas un autre moyen de procéder ...


* Faire des fonctions qui font appel à une feuille qui est une copie
immédiate des données lorsqu'un drapeau l'autorise. Le drapeau est activé
lors de l'enregistrement, et est désactivé lors de la mise à jour. La mise à
jour met à jour aussi la copie immédiate.

Une fonction personnalisée doit être placée dans un module standard.
Tous les fonctions de ces modules sont applicables à l'ensemble des
feuilles d'un classeur.

La mise à jour (recalcul) peut être demandé pour une plage de cellules,`
pour une feuille particulière ou pour le classeur entier. L'Aide sur la
méthode "Calculate" est bien claire sur le sujet.
Range("A1:G25").Calculate
ou
Feuil1.Calculate

P.S. Je termine ma participation à ce fil. Je ne saisis pas vraiment la finalité des questions !


Salutations!








"Frédéric Decréquy" a écrit dans le message de news: %23ZMvDd$$
La DLL met du temps à charger ses données, ce qui fait que nous avons un
bouton de chargement des données dans la barre d'outils, mais nous
préférerions l'utiliser rarement pour certains Worksheets. La DLL reste sur
le poste, oui.

Application.Volatile en début de fonction sert à ça mais nécessite un
premier appel à chaque chargement.

Nous voudrions éviter les solutions suivantes :
* Application serveur réseau qui met en cache les informations de la base de
données,
* modifier SaveAs pour faire une sauvegarde normale, un close, un Rename
Visual Basic, et une réouverture ;
* Faire des fonctions qui font appel à une feuille qui est une copie
immédiate des données lorsqu'un drapeau l'autorise. Le drapeau est activé
lors de l'enregistrement, et est désactivé lors de la mise à jour. La mise à
jour met à jour aussi la copie immédiate.

"michdenis" a écrit dans le message de news:
#xiMWQ$$
Bonjour Frédéric,

| Ces fonctions font elles-mêmes appel à un serveur DLL qui n'est pas
toujours disponible.


Cela signifie que la DLL dont relève la macro complémentaire n'est pas sur
chacun des ordinateurs

utilisant cette macro complémentaire ?

Que ce soit à l'enregistrement ou à d'autres moments qu'est-ce qui se
passe si seulement

certaines fonctions ne relevant pas de cette DLL sont recalculées ? Les
résultats doivent être

en effet bizarre !

Et si la DLL est disponible directement sur l'ordinateur, as-tu le même
problème ?


Ce que tu décris est plutôt le fonctionnement "normal" d'excel dans la
façon de mettre

le contenu des cellules à jour sauf si le classeur est en mode de calcul
manuel.



Salutations!


Avatar
Frédéric Decréquy
Je te remercie, tu ne m'as pas aidé, mais la raison est que nous avons des
besoins précis je pense.

Je voulais parler de formules et non de fonctions, et pour le Save As, nous
avons ce code dans le Workbook_BeforeClose :

If Not Me.Saved Then

Select Case MsgBox("Do you want save your workbook ?", vbQuestion +
vbYesNoCancel)

Case vbYes

Name = Application.GetSaveAsFilename(Me.Name, "Workbooks Files
(*.xls), *.xls,Templates Files (*.xlt), *.xlt")

If Name = "" Or Name = "False" Then Cancel = True: Exit Sub

On Error Resume Next

Me.SaveAs Filename:=Name

On Error GoTo 0

If Not Me.Saved Then Cancel = True: Exit Sub

Case vbNo

Me.Saved = True

Case vbCancel

Cancel = True: Exit Sub

End Select

End If
Avatar
Clément Marcotte
Select Case MsgBox("Do you want save your workbook ?", vbQuestion +
vbYesNoCancel)



Y parlent pas français en France ?

Avatar
Clément Marcotte
Ou bedon ils pensent que de s'effoirer devant les têtes carrées mène au Ciel
?

Pourtant Toubon n'avait pas fait passer une loi pour ça ?

"Clément Marcotte" a écrit dans le message
de news: %
Select Case MsgBox("Do you want save your workbook ?", vbQuestion +
vbYesNoCancel)



Y parlent pas français en France ?





Avatar
Patrick BASTARD
Bonjour, *Clément*



Y parlent pas français en France ?


Si, mais pas seulement...
;-)

--
Bien amicordialement,
P. Bastard