Exemple de zoom automatique par VBA
Hello,

Il s'agit de mon fichier que j'avais programmé sur un sujet du forum, dont j'ai commenté en détail le code et expliqué le schéma directeur. Sujet en question : https://forum.excel-pratique.com/excel/zoom-automatique-en-fonction-de-la-largeur-de-la-fenetre-t71863.html
[b]Sommaire
1. Principe
2. Schéma de fonctionnement
3. Pour l'adaptation
4. Masterclass : Utilisation d'une boucle de contrôle infinie
5. Masterclass : Utilisation de l'événement classeur : Workbook_open
6. Masterclass : Utilisation de l'événement classeur : Workbook_WindowResize
7. Masterclass : Utilisation de l'événement feuille : Worksheet_Activate
8. Masterclass : Utilisation de l'événement feuille : Worksheet_BeforeDoubleClick[/b]
1. Principe
> Afin de permettre à Excel d'identifier si l'utilisateur est sur la feuille 1 et qu'il doit faire ou non son contrôle de zoom permanent sur cette plage, une cellule INTERRUPTEUR est basée dans la feuille 1 en A1. De même un bouton poussoir, permet de désactiver aussi le zoom permanent en cliquant dessus.
2. Schéma de fonctionnement
A l'ouverture du classeur, par gestion de l'événement "Workbook_Open" correction du zoom sur la plage A1:T50.
Puis la macro événement classeur : "Workbook_Open" lance un chrono appelé : "Lancement_opensub" dans le module : "Boucle_principal_ctrle_zoom".
a--> Au bout d'une seconde le chrono : "Lancement_opensub" lance la macro : "opensub" servant à vérifier le zoom démarre et va tourner en permanence comme un moteur.
b------> "opensub" lance une boucle infinie qui contrôle en permanence si le zoom de la plage A1:T50 dans la feuille1 est adéquate, en fonction de la taille de la fenêtre de l'application Excel, si l'utilisateur change la taille de celle-ci, dans ce cas "opensub" lance automatiquement la macro "zoom" pour calculer la correction, tout en permettant avec la methode Doevents, de pouvoir continuer à utiliser Excel sans désagréments importants.
c---------> Evénement SI : Si l'utilisateur change la taille de la fenêtre principale, alors la macro "zoom" corrige le zoom pour qu'il soit adapté à la plage tableur A1:T50.
d---------> Evénement SI : Si l'utilisateur change la taille de la sous-fenêtre d'application, correspondant à celle du classeur, alors un événement classeur se lance "Workbook_WindowResize" et adapte le zoom en conséquence à la plage A1:T50.
b------> La méthode Doevent placé dans la boucle "Opensub" permet de rafraichir l'application à un degré suffisamment élevé pour permettre à l'utilisateur de continuer à utiliser Excel sans désagréments. Par contre l'utilisation de ce moteur monopolise des ressources matériels, visible dans le gestionnaires de tâches Windows
b------> Dans cette boucle, est analysé en fonction de l'activation de l'interrupteur dans la cellule A1 (1 = ""ON"" / 0 = ""OFF"") si la correction zoom doit être faite ou non.
Ainsi si l'utilisateur est sur la feuille 2, aucune correction n'est réalisé, par contre à l'activation de la feuille 1 le contrôle de correction de zoom s’effectue, néanmoins si on appuis sur le bouton poussoir, même en étant sur la feuille 1, la cellule A1 prenant 0, la boucle passe le contrôle de correction."
3. Pour l'adaptation
'** Interrupteur :
"Dans le module VBA, sur chaque module feuille, quand l'utilisateur va sur une feuille, l'interrupteur prend une valeur 1 ou 0, soit ON ou OFF, si est sur la feuille 1 = ON, sur feuille 2/3/4 = OFF.
Il doit y avoir autant de code d'activation/désactivation de zoom que de feuille créées."
'** Zone de zoom :
Le zoom se fait sur ThisWorkbook.Worksheets(1).Range("A1:T50") pour une autre zone modifier la plage ou mieux nommer une plage cellule dans Excel (exemple, on nomme A1 à T50 => ZOOM et on fait référence à range("ZOOM") ), ainsi plus besoin de modifier en dur dans VBA, mais seulement dans Excel, (penser à mettre en pause la boucle zoom avant modifications
'** Objet géré par le zoom :
"Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre
Windows(1).Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%, etc "
** Cas de doevents qui permet de garder la main sur l'application sans effet de freezing :
"DoEvents est une ligne de rafraichissement d'application, pour permettre à l'utilisateur de reprendre la main quand besoin d'utilisation d'Excel, sinon Excel continuera à boucler à l'infinie sur ce calcul, empêchant l'utilisateur d'utiliser Excel, bien faire attention a être parcimonieux avec l'utilisation de doevents, les processeurs n'aiment pas trop être sursollicités.
Cela permet aussi de lancer d'autres macro, la boucle de zoom se mettant en pause à ce moment laisser démarrer la macro."
'** Lieu de l'interrupteur :
L'interrupteur est spécifié dans la ligne ThisWorkbook.Worksheets(1).Range("A1").Value = 1, pour spécifier un autre emplacement, indiquer une autre adresse cellule, vous pouvez la mettre en police blanche, excel ne lisant que la valeur informatique et non la valeur d'affichage comme l'utilisateur (^-^)
'** Calcul de la boucle infinie :
La boucle infinie perdure tant que la cellule "xfc1" est vide, en théorie personne n'utilise cette cellule IsEmpty(ThisWorkbook.Worksheets(1).Range("xfc1")), mais au cas où, soyez prévenu que si vous remplissez cette cellule la gestion du zoom est arrêté et ne se relancera qu'à la réouverture du fichier et si la cellule est vide.
8)
ThisWorkbook.Worksheets(1).Select 'Selection feuille où se trouve le tableau pour éviter un bug '<< Spécifier la feuille <<
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom << Spécifier zone de zoom <<
ThisWorkbook.Worksheets(1).Range("A1").Value = 1 << Spécifier où se trouve l'interrupteur<<
4. Masterclass : Utilisation d'une boucle de contrôle infinie
Code se trouvant dans le module Thisworkbook
'Déclaration variables en mode général pour pouvoir reprendre les valeurs de variables et être mises à jour dans plusieurs sub dans le module thisworkbook
'zoommindansapplication = valeur du ZOOM quand en affichage minimale du zoom actif
'zoommaxdansapplication = valeur du DEZOOM quand affichage normal du zoom actif
'zoomchangedansapplicationuser = valeur de la taille de la fenetre de l'application
Dim zoommindansapplication, zoommaxdansapplication, zoomchangedansapplicationuser As Double
'A Procédure d'événement macro en lancement à l'ouverture du classeur si modification affichage de l'application
Private Sub Workbook_Open()
'1 définition des variable zooms
ThisWorkbook.Worksheets(1).Select 'Selection la feuille où se trouve le tableau pour éviter un bug '<<<<<<<<<<<<<<< Spécifier la feuille <<<<<<<<<<<<<<<
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom pour variables zoom...dansapplication '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
ActiveWindow.zoom = True 'zoom sur selection
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
zoommindansapplication = Windows(1).zoom 'à l'ouverture mise en val de départ du ZOOM quand en affichage minimale du zoom actif
zoommaxdansapplication = Windows(1).zoom 'à l'ouverture mise en val de départ du déZOOM quand affichage normal du zoom actif
zoomchangedansapplicationuser = Application.UsableWidth 'à l'ouverture mise en val de départ de la taille de la fenetre de l'application
'OPTION ouverture / A activer si vous ne voulez pas qu'à l'ouverture la plage soit selectionné '<<<<<<<<<<<<<<< OPTION <<<<<<<<<<<<<<<
'ThisWorkbook.ActiveSheet.Range("A1").Select 'A l'ouverture du classeur, le curseur cellule se trouve sur la cellule A1 de la feuille active et évite que l'ensemble du tableau ne soit selectionné
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'2 suite à l'ouverture du fichier, lancement de la macro "Lancement_opensub" après 1 seconde d'attente, géré par le chrono de la macro "Lancement_opensub" (afin d'éviter un bug rendant inactives certaines fonctions Excel)
Lancement_opensub 'lance le chrono d'attente d'1 seconde et de cette macro chrono, lancera la gestion du zoom d'affichage ^^
End Sub
Code se trouvant dans le module Thisworkbook
'Déclaration variables en mode général pour pouvoir reprendre les valeurs de variables et être mises à jour dans plusieurs sub dans le module boucle_principal_ctrle_zoom
'zoommindansapplication = valeur du ZOOM quand en affichage minimale du zoom actif
'zoommaxdansapplication = valeur du DEZOOM quand affichage normal du zoom actif
'zoomchangedansapplicationuser = valeur de la taille de la fenetre de l'application
Dim zoommindansapplication, zoommaxdansapplication, zoomchangedansapplicationuser As Double
'SOMMAIRE
'0. Par gestion d'événement d'ouverture fichier, lance auto. le Point A
'A. Lancenment du controle zoom au bout d'1 seconde
'B. Controle permanent de la taille d'affichage et du zoom dans excel par boucle infinie
'C. Correction exceptionnelle si user touche à la taille de la fenetre de l'application puis retour dans le point B.
'CE. Correction exceptionnelle Si événement classeur de redimensionnement sous fenetre classeur, alors lancement process Workbook_WindowResize
'Info. si user va dans les feuille 2 / 3 / 4 interrupteur s'active et ne fait pas le controle zoom, mais reprend s'il retourne sur feuille 1, voir macro interne à chaque feuille désactivant le ctrle zoom (INTERRUPTEUR dans cellule A1 // 1 pour ON / 0 pour OFF)
'A. Lancenment du controle zoom au bout d'1 seconde
Sub Lancement_opensub()
'1 redéfinition des variables zooms étant donné qu'on change de module dans vba
zoommindansapplication = Windows(1).zoom 'à l'ouverture 1er lancement mise en val de départ du ZOOM quand en affichage minimale du zoom actif
zoommaxdansapplication = Windows(1).zoom 'à l'ouverture 1er lancement mise en val de départ du déZOOM quand affichage normal du zoom actif
zoomchangedansapplicationuser = Application.UsableWidth 'à l'ouverture 1er lancement mise en val de départ de la taille de la fenetre
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'2 Attendre 1 seconde et lance la macro opensub suite à l'ouverture du fichier, permet d'éviter le bug qui rend inactif certains onglet d'outils excel
Application.OnTime Now + TimeValue("0:00:01"), "opensub"
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'B. Controle permanent de la taille d'affichage et du zoom dans excel
Sub opensub()
Dim CEL_SELECT_EN_COURS As Variant 'Déclaration variable pour connaitre la cellule en cours que l'user à selectionnée pour pouvoir garder l'adresse ce cellule
'---------------------------------------------------------------------------------------------------------
'1 lance boucle sans fin (enfin tant que cellule xfc1 vide) de controle de zoom de la fenetre
Do While IsEmpty(ThisWorkbook.Worksheets(1).Range("xfc1")) 'Boucle infinie enfin en théorie, tant que la cellule xfc1 est vide
'---------------------------------------------------------------------------------------------------------
On Error Resume Next 'gestion d'erreur, si erreur passe à ligne suivante sans s'arrêter
'---------------------------------------------------------------------------------------------------------
DoEvents 'ligne de raffraichissement, pour permettre à l'utilisateur de reprendre la main quand besoin d'utiliser excel, sinon excel continu à boucler à l'infinie sur le calcul de la cellule vide xfc1
'---------------------------------------------------------------------------------------------------------
'I Si affichage normal et que le zoom correspond au zoom de départ ou adéquate alors rien, sinon ZOOM
If Application.WindowState = xlMaximized And Windows(1).zoom <> zoommaxdansapplication Then 'Maximised = affichage normal
If ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then 'si utilisateur est ou va sur la feuille 1, alors l'interrupteur prend 1 et la macro teste l'affichage, si l'user est sur une autre feuille, l'interrupteur prend valeur 0 est ne fait pas le test de zoom '<<<<<<<<<<<<<<< Spécifier emplacement de l'interrupteur <<<<<<<<<<<<<<<
CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule selectionné en cours par user au moment du zoom
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
ActiveWindow.zoom = True 'zoom sur selection
zoommaxdansapplication = Windows(1).zoom 'redéfinit la valeur de zoom pour mettre à jour la valeur zoommaxdansapplication lors du prochain passage de boucle lors du test : If Application.WindowState = xlMaximized And Windows(1).Zoom <> zoommaxdansapplication Then
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / Windows(1).Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End If
End If
'---------------------------------------------------------------------------------------------------------
'II Si affichage minimisé et que le zoom correspond au zoom de départ minimale ou adéquate alors rien, sinon ZOOM
If Application.WindowState = xlNormal And Windows(1).zoom <> zoommindansapplication Then 'Minimised = affichage réduit
If ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then 'si utilisateur est ou va sur la feuille 1, alors l'interrupteur prend 1 et la macro teste l'affichage, si l'user est sur une autre feuille, l'interrupteur prend valeur 0 est ne fait pas le test de zoom '<<<<<<<<<<<<<<< Spécifier emplacement de l'interrupteur <<<<<<<<<<<<<<<
CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule selectionné en cours par user au moment du zoom
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
ActiveWindow.zoom = True 'zoom sur selection
zoommindansapplication = Windows(1).zoom 'redéfinit la valeur de zoom pour mettre à jour la valeur zoommindansapplication lors du prochain passage de boucle lors du test : If Application.WindowState = xlNormal And Windows(1).Zoom <> zoommindansapplication Then
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / Windows(1).Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End If
End If
'---------------------------------------------------------------------------------------------------------
'III Si l'user touche à la taille de la fenetre principale, lancement de la macro zoom
If Not Application.UsableWidth = zoomchangedansapplicationuser Then
zoom '1 User à toucher à la taille de la fenetre lance auto la procédure d'adaptation du zoom
zoomchangedansapplicationuser = Application.UsableWidth '2 Puis une fois la macro zoom terminée Redefinition Variable zoomchangedansapplicationuser
End If
'---------------------------------------------------------------------------------------------------------
Loop 'et repart pour une nouvelle boucle si xfc1 est vide
End Sub
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'C. Correction exceptionnelle si utilisateur touche à la taille de la fenetre de l'application puis retour dans le point B.
Sub zoom()
Dim CEL_SELECT_EN_COURS As Variant 'Déclaration variable pour connaitre la cellule en cours que l'user à selectionné
'---------------------------------------------------------------------------------------------------------
On Error Resume Next 'process de gestion d'erreur, si erreur passe la ligne sans arrêter macro
'---------------------------------------------------------------------------------------------------------
DoEvents 'ligne de raffraichissement, pour permettre à l'utilisateur de reprendre la main quand besoin d'utiliser excel, sinon excel continu à boucler à l'infinie sur le calcul de la cellule vide xfc1
'---------------------------------------------------------------------------------------------------------
'00. si utilisateur est ou va sur la feuille 1, alors l'interrupteur prend 1 et la macro teste l'affichage, si l'utilisateur est sur une autre feuille, l'interrupteur prend valeur 0 est ne fait pas le test de zoom
If ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then
CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule selectionné en cours par l'utilisateur au moment du zoom
'---------------------------------------------------------------------------------------------------------
'1 si fenêtre en mode normal ou réduit alors zoom sur selection
If Application.WindowState = xlNormal Then 'Si fenêtre en format réduit agrandit zoom dans application
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom à la selection '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
ActiveWindow.zoom = True 'zoom sur selection
zoommindansapplication = Windows(1).zoom 'redifinit la variable ZOOM zoommindansapplication
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / Windows(1).Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
'---------------------------------------------------------------------------------------------------------
Else
'---------------------------------------------------------------------------------------------------------
'2 si fenêtre en mode maximisé alors zoom sur selection
If Application.WindowState = xlMaximized Then 'si fenêtre en format maximisé alors zoom application
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom à la selection '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
ActiveWindow.zoom = True 'zoom sur selection
zoommaxdansapplication = Windows(1).zoom 'redifinit la variable ZOOM zoommaxdansapplication
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / Windows(1).Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End If
End If
End If
End Sub
5. Masterclass : Utilisation de l'événement classeur : Workbook_open
A chaque ouverture du classeur, Excel va parcourir cet événement.
1 Il faut d'abord lui définir d'ouvrir sur la feuille à zoomer pour éviter un bug.
2 Puis définir définir la zone de zoom.
3 Et enfin zoomer.
'A Procédure d'événement macro en lancement à l'ouverture du classeur si modification affichage de l'application
Private Sub Workbook_Open()
'1 définition des variable zooms
ThisWorkbook.Worksheets(1).Select 'Selection la feuille où se trouve le tableau pour éviter un bug '<< Spécifier la feuille <<
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom pour variables zoom...dansapplication '<< Spécifier zone de zoom <<
ActiveWindow.zoom = True 'zoom sur selection
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'OPTION ouverture / A activer si vous ne voulez pas qu'à l'ouverture la plage soit selectionné '<< OPTION <<
'ThisWorkbook.ActiveSheet.Range("A1").Select 'A l'ouverture du classeur, le curseur cellule se trouve sur la cellule A1 de la feuille active et évite que l'ensemble du tableau ne soit selectionné
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'2 suite à l'ouverture du fichier, lancement de la macro "Lancement_opensub" après 1 seconde d'attente, géré par le chrono de la macro "Lancement_opensub" (afin d'éviter un bug rendant inactives certaines fonctions Excel)
Lancement_opensub 'lance le chrono d'attente d'1 seconde et de cette macro chrono, lancera la gestion du zoom d'affichage ^^
End Sub
8) En gros le jeu d'écriture se fait sur 3 lignes de code, qui servira de base dans toutes les macros pour zoomer :
ThisWorkbook.Worksheets(1).Select << Spécifier la feuille <<
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate << Spécifier zone de zoom <<
ActiveWindow.zoom = True 'activation zoom sur selection
6. Masterclass : Utilisation de l'événement classeur : Workbook_WindowResize
Qui sert non pas à gérer les événements de redimensionnement de la taille de la fenêtre de l'application Excel dans son ensemble
1 Etant donné que pour chaque zoom de plage, le zoom sélectionne l'ensemble des cellules de la plage, il est nécessaire avant de récupérer l'adresse où se trouve l'emplacement de la dernière cellule sélectionnée.
2 Puis définir définir la zone de zoom.
3 Et zoomer.
4 Redéfinir les variables de taille de zoom si vous utiliser une boucle de contrôle infinie
5 Étant donné qu'à ce moment toute la plage A1:T50 est sélectionnée, on resélectionne l'adresse de cellule du point 1.
Code se trouvant dans le module Thisworkbook
'CE Procédure événement de ZOOM si sous fenêtre interne dans application Excel redimenssionné
Private Sub Workbook_WindowResize(ByVal Wn As Window)
Dim CEL_SELECT_EN_COURS As Variant 'Déclaration variable pour connaitre la cellule en cours que l'utilisateur à selectionné pour garder le curseur à cet emplacement
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
DoEvents 'ligne de raffraichissement, pour permettre à l'utilisateur de reprendre la main quand besoin d'utiliser excel, sinon excel continu à boucler à l'infinie sur le calcul de la cellule vide xfc1
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
On Error Resume Next 'Process de gestion d'erreur, si erreur passe la ligne sans arrêter macro
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'1 si utilisateur sur feuille 1 et si fenêtre en mode normal ou réduit alors zoom sur selection tableau
If ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then 'si utilisateur est ou va sur la feuille 1, alors l'interrupteur prend 1 et la macro teste l'affichage, si l'user est sur une autre feuille, l'interrupteur prend valeur 0 est ne fait pas le test de zoom '<<<<<<<<<<<<<<< Spécifier l'emplacement de l'interrupteur <<<<<<<<<<<<<<<
CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule selectionné en cours par lutilisateur au moment du zoom
'----------------------------------------------------------------------------------------------------------------------------
If Application.WindowState = xlNormal Then 'Si fenêtre en format réduit agrandit zoom dans application
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom à la selection '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ActiveWindow.zoom = True 'zoom sur selection
zoommindansapplication = Windows(1).zoom 'redifinit la variable ZOOM zoommindansapplication
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / .Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
Else
If Application.WindowState = xlMaximized Then 'si fenêtre en format maximisé alors zoom application à 80%
ThisWorkbook.Worksheets(1).Range("A1:T50").Activate 'définit la zone de zoom à la selection '<<<<<<<<<<<<<<< Spécifier zone de zoom <<<<<<<<<<<<<<<
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ActiveWindow.zoom = True 'zoom sur selection
zoommaxdansapplication = Windows(1).zoom 'redifinit la variable ZOOM zoommaxdansapplication
'Windows(1).Zoom => windows(1) pour 1 donne objet en cours quand macro démarre / .Zoom donne la valeur du zoom dans l'application, 100 pour normal, 200 pour zoom 200%,...
ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End If
End If
'----------------------------------------------------------------------------------------------------------------------------
End If
End Sub
7. Masterclass : Utilisation de l'événement feuille : Worksheet_Activate
A chaque fois que l'utilisateur activera la feuille en appuyant sur l'onglet feuille, cet événement se lancera, dans la plupart des cas après être sorti et re-rentré dans la dite feuille.
Le code est plus simple, puisque le point 1 étant déjà réalisé, il ne reste que 2 étapes à coder :
1 Puis définir définir la zone de zoom.
2 Et zoomer.
Option, il est possible aussi d'ajouter les lignes de codes pour ne pas rester sur une selection de l'ensemble de la plage.
Private Sub Worksheet_Activate()
'Dim CEL_SELECT_EN_COURS As Variant 'Déclaration variable pour connaitre la cellule en cours que l'utilisateur à selectionné pour garder le curseur à cet emplacement
'CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule selectionné en cours par lutilisateur au moment du zoom
'1 quand user va sur la feuille 2, ZOOM sur la plage
ThisWorkbook.Worksheets(2).Range("A1:V20").Activate '<< Spécifier zone de zoom <<
ActiveWindow.zoom = True 'activation zoom sur selection
'ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End Sub
1 Forcer l'activation de la feuille
2 Définir le zoom
3 Et zoom
With ThisWorkbook.Worksheets(1) 'Forcer l'activation de la feuille
.Visible = xlSheetVisible
.Activate
.Range("A6").Select
End With
ThisWorkbook.Worksheets(1).Range("A1:R6").Activate 'définit la zone de zoom pour variables zoom
ActiveWindow.Zoom = True 'zoom sur selection
8. Masterclass : Utilisation de l'événement feuille : Worksheet_BeforeDoubleClick
Le principe est d'avoir par raccourci double-clic dans une plage, de réajuster le zoom à la demande par ce double-clic.
1 Tout d'abord on définit la plage du double clic, où l'action doit avoir lieu.
2 Puis définir définir la zone de zoom.
3 Et zoomer.
Option, il est possible aussi d'ajouter les lignes de codes pour ne pas rester sur une selection de l'ensemble de la plage.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Dim CEL_SELECT_EN_COURS As Variant 'Déclaration variable pour connaitre la cellule en cours que l'utilisateur à sélectionné pour garder le curseur à cet emplacement
'CEL_SELECT_EN_COURS = ActiveCell.Address 'Définition à l'adresse de la cellule sélectionné en cours par l'utilisateur au moment du zoom
If Not Intersect(Target, ActiveSheet.Range("A1:T50")) Is Nothing Then 'Si l'utilisateur n'a pas cliquer en dehors de la plage tableau, alors zoom
ActiveSheet.Range("A1:T50").Activate '<< Spécifier zone de zoom <<
ActiveWindow.zoom = True 'activation zoom sur selection
'ThisWorkbook.ActiveSheet.Range(CEL_SELECT_EN_COURS).Select 'Pour ne pas rester sur la zone zoomée, retour à la cellule selectionnée précédente
End If
End Sub
Et voilà quelques exemples de codage d'ajustement auto du zoom par V.B.A.