XL 2013 VBA - XLSTART

JulienSmith

XLDnaute Nouveau
Bonjour,

Après plusieurs recherches infructueuses je me lance ici en espérant être clair ! Mon problème est le suivant :

je souhaite crééer une macro sous excel qui me permettra de fixer le zoom à 70 pour chaque classeur excel que j'ouvre.

Après quelques recherche, j'ai trouvé ce fameu fichier "Personal.XLSB" qui se trouve dans le dossier XLSTART.

J'ai testé les macros suivantes :

Private Sub Workbook_open()
ActiveWindow.zoom = 70
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
ActiveWindow.zoom = 70
End Sub

Sub AutoOpen()
ActiveWindow.zoom = 70
End Sub

je les ai mises dans un module, puis dans le thisWorkBook, aucun résultat.

Soit il ne se passe rien, soit j'ai le message d'erreur suivant (Lorsque je place le code dans Thisworkbook de personal.xlsb) :

"Object variable or With block variable not set"


Si vous avez une piste à suivre, je suis preneur !

Merci beaucoup,

julien
 

job75

XLDnaute Barbatruc
Bonsoir JulienSmith, bienvenue sur XLD,

C'est le genre de truc que je ne recommande vraiment pas.

Mais si vous y tenez absolument placez dans le ThisWorkbook de votre Personal.xlsb :
Code:
Option Explicit
Dim t 'mémorise la variable

Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.Zoom70"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
End Sub

Sub Zoom70()
ActiveWindow.Zoom = 70
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
t = Now + 1 / 86400
Application.OnTime t, "ThisWorkbook.Zoom70"
End Sub
A+
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Il manque des choses dans votre ThisWorkbook pour que ça puisse marcher :
VB:
Option Explicit
Private WithEvents App As Application
Private Sub Workbook_Open()
   Set App = Application
   End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
   ActiveWindow.Zoom = 70
   End Sub
 

JulienSmith

XLDnaute Nouveau
Bonjour JulienSmith,

J'ai parlé du "truc", il s'appliquera sur tout fichier Excel que l'on ouvre, pas glop à mon avis....

A+

Je remarque que ce "truc" s'applique de manière continue (lorsque le fichier est ouvert, impossible de modifier le zoom). Est-il possible de faire en sorte que ce code s'applique uniquement à l'ouverture d'un fichier, mais qu'il soit modifiable une fois le fichier Ouvert ? En gros par défaut chaque ouverture de fichier soit en zoom 70, mais une fois le fichier ouvert je peux modifier le zoom manuellement ?

Merci pour tout !
 

Dranreb

XLDnaute Barbatruc
Bonjour.
C'était l'esprit des bouts de codes que vous aviez évoqué au #1 et que je vous avais complété de ce qui manquait au #3.
Attention toutefois, l'initialisation de App serait perdue lors d'une réinitialisation du projet VBA.
 

job75

XLDnaute Barbatruc
Re,

Il faut pouvoir arrêter/remettre en marche le processus quand on veut.

Affecter le raccourci clavier Ctrl+m à la macro Marche_Arret :
Code:
Option Explicit
Dim marche As Boolean, t 'mémorise les variables

Private Sub Workbook_Open()
marche = True
Application.OnTime 1, "ThisWorkbook.Zoom70"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
End Sub

Sub Zoom70()
If Not marche Then Exit Sub
ActiveWindow.Zoom = 70
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
t = Now + 1 / 86400
Application.OnTime t, "ThisWorkbook.Zoom70"
End Sub

Sub Marche_Arret()
'se lance par le raccourci clavier Ctrl+m
marche = Not marche
If marche Then Zoom70 Else ActiveWindow.Zoom = 100
End Sub
A+
 

JulienSmith

XLDnaute Nouveau
Re,

Il faut pouvoir arrêter/remettre en marche le processus quand on veut.

Affecter le raccourci clavier Ctrl+m à la macro Marche_Arret :
Code:
Option Explicit
Dim marche As Boolean, t 'mémorise les variables

Private Sub Workbook_Open()
marche = True
Application.OnTime 1, "ThisWorkbook.Zoom70"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
End Sub

Sub Zoom70()
If Not marche Then Exit Sub
ActiveWindow.Zoom = 70
On Error Resume Next
Application.OnTime t, "ThisWorkbook.Zoom70", , False
t = Now + 1 / 86400
Application.OnTime t, "ThisWorkbook.Zoom70"
End Sub

Sub Marche_Arret()
'se lance par le raccourci clavier Ctrl+m
marche = Not marche
If marche Then Zoom70 Else ActiveWindow.Zoom = 100
End Sub
A+

Ok, avec le raccourcis marche_arret ça marche parfaitement merci beaucoup !


Sur quelle instruction ?
À tout hasard remplacez Application par Excel.Application

Lorsque je clic sur "debug" la ligne surligné en jaune est la suivante :
"ActiveWindow.Zoom = 70"

Merci à vous 2 pour votre temps, et la transmission de vos connaissances!
 

JulienSmith

XLDnaute Nouveau
Ben j'ai repris cette instruction de vous, mais chez moi ça marche, j'ai essayé.
En mettant Wb.Windows(1).Zoom = 70, qu'est-ce que ça dit ?

Cette fois-ci j'ai un "Run-time error '9' subscript out of range"

En fait, pour l'instruction d'avant le code en lui même fonctionne mais il n'arrive pas à s'éxécuter à l'ouverture. Lorsque je fais "debug" et que je run la macro pas à pas (F8), tout s'execute parfaitement. Peut être le problème vient-il du fait que personal.xlsb s'ouvre en premier, et que la ma s'execute avant que mon fichier ne soit ouvert ?
 

Dranreb

XLDnaute Barbatruc
Sais pas. A-t-il quelque chose de spécial, le classeur que vous ouvrez ?
En mettant Wb.Activate devant est-ce que ça change quelque chose ?
Édition. Ou bien attendez, est-ce que par hasard la App_WorkbookOpen s'exécuterait pour sa propre ouverture aussi, et ce après même la Workbook_Open ?
Essayez voir de mettre d'abord If Wb.Name = Me.Name Then Exit Sub
Elle ne doit s'exécuter qu'à l'ouverture d'autres classeurs que lui même.
Édition 2. Ou bien mettez simplement On Error Resume Next pour parer à tout éventualité d'ouverture d'un .xlam ou tout autre classeur n'ayant pas de fenêtre…
 
Dernière édition:

JulienSmith

XLDnaute Nouveau
Sais pas. A-t-il quelque chose de spécial, le classeur que vous ouvrez ?
En mettant Wb.Activate devant est-ce que ça change quelque chose ?
Édition. Ou bien attendez, est-ce que par hasard la App_WorkbookOpen s'exécuterait pour sa propre ouverture aussi, et ce après même la Workbook_Open ?
Essayez voir de mettre d'abord If Wb.Name = Me.Name Then Exit Sub
Elle ne doit s'exécuter qu'à l'ouverture d'autres classeurs que lui même.

IT'S WORK !
Vous avez finis par trouver la solution, effectivement il s'execute sur sa propre ouverture, d'ou l'erreur!
avec If Wb.Name = Me.Name Then Exit Sub, tout fonctionne parfaitement!

Merci bcp !
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 859
Membres
103 978
dernier inscrit
bderradji