Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Forcer le calcul automatique d'un classeur à l'ouverture via les macros personnalisées

10 réponses
Avatar
HD
Bonjour,

Je voudrais qu'à chaque ouverture d'un classeur qu'Excel reste bien en
calcul automatique... quelque soit le classeur...

Je ne souhaite pas utiliser le Workbook_Open des classeurs eux même car
l'on peut toujours avoir des classeurs provenant de l'extérieur... et pour
les classeurs en interne celà obligerais à mettre à jour tout mes classeurs
en y incorporant la ligne Application.Calculation = xlAutomatic

J'ai donc essayé de mettre Application.Calculation = xlAutomatic dans le
WorkBook_Open de mes macros personnalisées mais cela ne fonctionne pas...

Auriez vous une idée sur comment résoudre mon problème ?

Merci d'avance
--
@+
HD

10 réponses

Avatar
michdenis
Tu peux obtenir ce que tu désires en utilisant un module de classe
dans ton classeur perso.xls. Le lien suivant représente un exemple
sur la façon de procéder.

http://cjoint.com/?mrsLPxCWHB




"HD" a écrit dans le message de news:
giadsc$jpf$
Bonjour,

Je voudrais qu'à chaque ouverture d'un classeur qu'Excel reste bien en
calcul automatique... quelque soit le classeur...

Je ne souhaite pas utiliser le Workbook_Open des classeurs eux même car
l'on peut toujours avoir des classeurs provenant de l'extérieur... et pour
les classeurs en interne celà obligerais à mettre à jour tout mes classeurs
en y incorporant la ligne Application.Calculation = xlAutomatic

J'ai donc essayé de mettre Application.Calculation = xlAutomatic dans le
WorkBook_Open de mes macros personnalisées mais cela ne fonctionne pas...

Auriez vous une idée sur comment résoudre mon problème ?

Merci d'avance
--
@+
HD
Avatar
HD
> Tu peux obtenir ce que tu désires en utilisant un module de classe
dans ton classeur perso.xls. Le lien suivant représente un exemple
sur la façon de procéder.



Je n'ai pas de fichier "perso.xls"... ni de répertoire "xlstart"...

@+
HD
Avatar
HD
ça y'est... J'ai trouvé... c'est à mettre dans : "C:Documents and
SettingsMonNomUtilisateurApplication DataMicrosoftExcelXLSTART" et le
nom du fichier est PERSONAL.XLSB

(j'ai Excel 2007 avec Windows XP)

Mais j'ai un message d'erreur avec la ligne:
Application.Calculation = xlCalculationAutomatic

Qui n'est pas reconnue... "Erreur d'exécution '1004': La méthode
'Calculation' de l'objet '_Application' a échoué"... :-(

J'ai remplacé Application.Calculation = xlCalculationAutomatic par
Application.Calculation = xlAutomatic mais ça ne passe pas non plus....

@+
HD
Avatar
michdenis
J'ai refait le test sous excel 2007, et cette ligne de code

Application.Calculation = xlCalculationAutomatic

ne cause aucun problème. Aucun message
d'erreur n'est généré. Il faut chercher ailleurs le
pourquoi de cette erreur.

Est-ce que cette erreur se génère à chaque fois
que tu ouvres un fichier peu importe lequel ?

Je n'ai pas vraiment d'explications au problème que
tu éprouves.






"HD" a écrit dans le message de news:
gid2k9$120n$
ça y'est... J'ai trouvé... c'est à mettre dans : "C:Documents and
SettingsMonNomUtilisateurApplication DataMicrosoftExcelXLSTART" et le
nom du fichier est PERSONAL.XLSB

(j'ai Excel 2007 avec Windows XP)

Mais j'ai un message d'erreur avec la ligne:
Application.Calculation = xlCalculationAutomatic

Qui n'est pas reconnue... "Erreur d'exécution '1004': La méthode
'Calculation' de l'objet '_Application' a échoué"... :-(

J'ai remplacé Application.Calculation = xlCalculationAutomatic par
Application.Calculation = xlAutomatic mais ça ne passe pas non plus....

@+
HD
Avatar
HD
> Est-ce que cette erreur se génère à chaque fois
que tu ouvres un fichier peu importe lequel ?


ça le fait effectivement sur tout les classeurs... Par contre, j'ouvre tout
mes classeurs en mode compatibilité Excel97-2003...

Mais j'ai peut être loupé quelque chose...

En reprenant... donc dans mon PERSONAL.XLSB j'ai donc:

Au niveau de Microsoft Excel Objets dans ThisWorkbook:
Private Sub Workbook_Open()
Initialer_Instance_Excel
End Sub

Dans les modules, j'ai mon module Divers avec:
Public AppExcel As New XlsApp

Sub Initialer_Instance_Excel()
Set AppExcel.MonExcel = Excel.Application
End Sub

Et dans mes modules de classe j'ai un module XlsApp avec :
Public WithEvents MonExcel As Application

Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub

@+
HD
Avatar
michdenis
Je possède Excel 2007 depuis peu...

Est-ce que toutes les mises à jour ont été faites ?

As-tu essayé de créer un nouveau fichier vide et neuf
et de le sauvegarder sous le nom de ton choix pour
faire un test ?

Tu fermes toutes les instances ouvertes d'excel.
Tu ouvres Excel seul et non un fichier déjà existant d'excel.
et pour faire le test, tu ouvres le fichier que tu viens de créer
et qui est vide ! Est-ce que cela provoque une erreur ?

Dans ce code,
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------

Assure toi de faire disparaître l'espace en début de ligne "Application...."
il arrive que par copier-coller, il se retrouve un caractère non visible en
début de ligne et cela génère la sélection de la ligne de code... cependant
c'est le caractère en début de ligne qui est fautif et non le code lui-même.

comme ceci :
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------




"HD" a écrit dans le message de news:
giditf$13f5$
Est-ce que cette erreur se génère à chaque fois
que tu ouvres un fichier peu importe lequel ?


ça le fait effectivement sur tout les classeurs... Par contre, j'ouvre tout
mes classeurs en mode compatibilité Excel97-2003...

Mais j'ai peut être loupé quelque chose...

En reprenant... donc dans mon PERSONAL.XLSB j'ai donc:

Au niveau de Microsoft Excel Objets dans ThisWorkbook:
Private Sub Workbook_Open()
Initialer_Instance_Excel
End Sub

Dans les modules, j'ai mon module Divers avec:
Public AppExcel As New XlsApp

Sub Initialer_Instance_Excel()
Set AppExcel.MonExcel = Excel.Application
End Sub

Et dans mes modules de classe j'ai un module XlsApp avec :
Public WithEvents MonExcel As Application

Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub

@+
HD
Avatar
HD
> Est-ce que toutes les mises à jour ont été faites ?


Je viens d'aller sur Windows Update donc à priori oui...

As-tu essayé de créer un nouveau fichier vide et neuf
et de le sauvegarder sous le nom de ton choix pour
faire un test ?


ça ne fonctionne toujours pas...

Tu fermes toutes les instances ouvertes d'excel.
Tu ouvres Excel seul et non un fichier déjà existant d'excel.
et pour faire le test, tu ouvres le fichier que tu viens de créer
et qui est vide ! Est-ce que cela provoque une erreur ?


ça ne passe pas non plus... :-(

Dans ce code,
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------
Assure toi de faire disparaître l'espace en début de ligne
"Application...."
il arrive que par copier-coller, il se retrouve un caractère non visible
en
début de ligne et cela génère la sélection de la ligne de code...
cependant
c'est le caractère en début de ligne qui est fautif et non le code
lui-même.
comme ceci :
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------


J'ai fait la manip' mais j'ai toujours l'erreur...

J'ai fait créer un PERSO.XLS avec un autre poste sous Windows XP et Excel
2003... et cela ne fonctionne pas non plus...

Ferais je une mauvaise manip' ???

@+
HD
Avatar
michdenis
Je reprends ici, comment faire....
Si toutes les autres macros de tes classeurs
fonctionnent rondement, il n'y a aucune raison
que cela fonctionne dans Excel 2003 ou 2007.
La procédure fut testée dans les 2 environnements.

À moins que tu évolues dans un environnement
particulier, je ne sais pas pourquoi tu éprouves
ce problème.

******************************************************
Lorsque tu ouvres mon fichier exemple, as-tu aussi
un message d'erreur ?
******************************************************

La démarche :

Dans un module standard du fichier "Personal.xlsb",
tu insères ce code :

'Déclaration de la variable dans le haut du module standard
Public AppExcel As New XlsApp
'----------------------------------------
Sub Initialer_Instance_Excel()
Set AppExcel.MonExcel = Excel.Application
End Sub
'----------------------------------------

Tu ajoutes un module de classe dans ton fichier "Personal.xlsb"
et tu modifies la propriété "Name" de ce dernier.
Propriété Name = XlsApp

Le code du module de classe "XlsApp" que tu viens d'ajouter:

'Déclaration de la variable dans le haut du module :
Public WithEvents MonExcel As Application
'----------------------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'----------------------------------------

Et dans le ThisWorkbook de ton classeur "Personal.xlsb"
'-------------------------------------------
Private Sub Workbook_Open()
Initialer_Instance_Excel
End Sub
'-------------------------------------------

N.B. Évidemment, pour que tout ceci soit effectif, tu dois
fermer toutes les instances d'excel et c'est seulement à
sa ré-ouverture que tu devrais constater le fonctionnement
de la procédure ....



"HD" a écrit dans le message de news:
gifudv$1anh$
Est-ce que toutes les mises à jour ont été faites ?


Je viens d'aller sur Windows Update donc à priori oui...

As-tu essayé de créer un nouveau fichier vide et neuf
et de le sauvegarder sous le nom de ton choix pour
faire un test ?


ça ne fonctionne toujours pas...

Tu fermes toutes les instances ouvertes d'excel.
Tu ouvres Excel seul et non un fichier déjà existant d'excel.
et pour faire le test, tu ouvres le fichier que tu viens de créer
et qui est vide ! Est-ce que cela provoque une erreur ?


ça ne passe pas non plus... :-(

Dans ce code,
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------
Assure toi de faire disparaître l'espace en début de ligne
"Application...."
il arrive que par copier-coller, il se retrouve un caractère non visible
en
début de ligne et cela génère la sélection de la ligne de code...
cependant
c'est le caractère en début de ligne qui est fautif et non le code
lui-même.
comme ceci :
'-------------------------
Private Sub MonExcel_WorkbookOpen(ByVal Wb As Workbook)
Application.Calculation = xlCalculationAutomatic
End Sub
'-------------------------


J'ai fait la manip' mais j'ai toujours l'erreur...

J'ai fait créer un PERSO.XLS avec un autre poste sous Windows XP et Excel
2003... et cela ne fonctionne pas non plus...

Ferais je une mauvaise manip' ???

@+
HD
Avatar
HD
> À moins que tu évolues dans un environnement
particulier, je ne sais pas pourquoi tu éprouves
ce problème.




******************************************************
Lorsque tu ouvres mon fichier exemple, as-tu aussi
un message d'erreur ?
******************************************************


J'ai le message d'erreur une fois les macros ajoutées dans le
PERSONAL.XLSB...

Lorsque j'ouvre Excel seul il n'y a pas de message... C'est lorsque j'ouvre
un fichier Excel par double-clic via l'explorateur que j'ai systématiquement
le message d'erreur...

La démarche :


J'ai refait tout la procédure... et le message d'erreur se produit encore...

N.B. Évidemment, pour que tout ceci soit effectif, tu dois
fermer toutes les instances d'excel et c'est seulement à
sa ré-ouverture que tu devrais constater le fonctionnement
de la procédure ....


Je pense avoir respecté la procédure mais ça ne passe toujours pas... Je
retesterais chez moi ce soir... histoire de voir si cela vient d'un
environnement particulier propre aux postes de mon boulot...

@+
HD
Avatar
HD
Je crois avoir trouvé la solution... il semble que si, à l'ouverture du
classeur, aucune feuille n'est sélectionnée alors ça plante...

Dans le WorkBook_Open du PERSONAL.XLSB j'ai ajouté Sheets(1).Activate et
depuis cela fonctionne...

Peut être as tu dans tes macros personnelles une ligne qui sélectionne une
feuille à l'ouverture d'un classeur... ce qui fait que la macro fonctionne
chez toi ?

En tout cas merci et Bonne année et meilleurs voeux à vous tous !!!

@+
HD