XL 2019 Zoom automatique selon la résolution ou la taille écran

pat66

XLDnaute Impliqué
Bonjour à tous

Ma résolution est 1366 x 768 et récemment j'ai testé un fichier sur un écran plus petit, malheureusement l'affichage n'était pas optimisé, il était trop petit , il fallait donc zoomer chaque feuilles

est il possible, grâce à une macro, d'optimiser l'affichage de chaque feuille sachant qu'elles n'occupent pas toujours le même nombre de colonnes ni de lignes, et que chacune a donc besoin d'un zoom différent ?

l'idéal serait qu'à l'ouverture du classeur, excel détecte la résolution de l'écran et optimise l'affichage en plein écran, peut être en tenant compte de ma résolution et des zooms du fichier original

un grand merci à tous

Patrick
 
Solution
tiens on prend en compte la presence ou non de la scroll verticale
VB:
Sub test()
    zooming_columns Range("A:I")
End Sub
Function zooming_columns(rng As Variant)
    Dim p_topx, marge#
    Dim coeff#
    With ActiveWindow
        .Zoom = 100
        p_topx = (.ActivePane.PointsToScreenPixelsX(72) - .ActivePane.PointsToScreenPixelsX(0)) / 72
        marge = ((.ActivePane.PointsToScreenPixelsX(0) / p_topx) - Application.Left) * (1 + (Abs(ActiveWindow.DisplayVerticalScrollBar)))
        If TypeName(rng) = "Range" Then
            coeff = (Application.UsableWidth - marge) / rng.Width
            .Zoom = 100 * coeff
        Else
            .Zoom = 100
        End If
    End With
    [A1].Select
   End Function
enjoy:)

patricktoulon

XLDnaute Barbatruc
je comprend pas ta demande en fait tout du moins je soupçonne
ca serait pas le fait que quand tu es dans une feuille et que tu reparts dans une autre tu voudrais qu'il n'y ait pas cet effet quand tu reviens dessus c'est ca ?
la réponse est simple tu teste le zoom si il n'est pas a 100 ca veut dire que ca a deja été fait

te reste plus a englober cette condition dans zooming
 

patricktoulon

XLDnaute Barbatruc
mais non c'est simple
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    With Sh
        Select Case Sh.Name
        Case "Feuil1": zooming_columns .Range("A:I"): .ScrollArea = "A1:h42"
        Case "Feuil2": zooming_columns .Range("A:m"): .ScrollArea = "A1:l20"
        Case "Feuil3": zooming_columns .Range("A:f"): .ScrollArea = "A1:e18"
         End Select
    End With
End Sub
Function zooming_columns(rng As Variant)
    Dim p_topx, marge#
    Dim coeff#
    With ActiveWindow
        '****************************************'
        If .Zoom <> 100 Then Exit Function
        '****************************************'
        '.Zoom = 100
        p_topx = (.ActivePane.PointsToScreenPixelsX(72) - .ActivePane.PointsToScreenPixelsX(0)) / 72
        marge = ((.ActivePane.PointsToScreenPixelsX(0) / p_topx) - Application.Left) * (1 + (Abs(ActiveWindow.DisplayVerticalScrollBar)))
        If TypeName(rng) = "Range" Then
            coeff = (Application.UsableWidth - marge) / rng.Width
            .Zoom = 100 * coeff
        Else
            .Zoom = 100
        End If
    End With
    [A1].Select
End Function
 

pat66

XLDnaute Impliqué
Bonjour PatrickToulon,

Excuse moi de te harceler mais j'ai vraiment besoin de ton expertise
De temps en temps le zoom ne fonctionne pas correctement, il zoome trop certains onglets, je suis donc obliger d'activer une autre feuille et de revenir sur la feuille concernée pour que le zoom fonctionne ??

Alors j'ai testé cette macro sur chaque feuille et je n'ai pas eu de bug
Feuil1
'Private Sub Worksheet_Activate()
' Range("A:I").Select
' ActiveWindow.Zoom = True
' ScrollArea = "A1:h42"
' Range("A1").Select
' End Sub

Feuil2
'Private Sub Worksheet_Activate()
' Range("A:M").Select
' ActiveWindow.Zoom = True
' ScrollArea = "A1:L20"
' Range("A1").Select
' End Sub

etc..........

Alors pourrais tu m'expliquer la différence entre cette macro et ta macro ci dessous ?
et est t'il possible d'utiliser ta macro dans le Workbook_SheetActivate(ByVal Sh As Object), mais de l'adapter avec ActiveWindow.Zoom = True,

Mon souhait en clair
- ne plus utiliser le zooming_columns puisque finalement toutes mes feuilles ont des zoom différents et aucune n'est à 100%, alors zooming_columns ne sert à rien puisque "If .Zoom <> 100 Then Exit Function"

- adapter ActiveWindow.Zoom = True avec ta macro dans Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
With Sh
Select Case Sh.Name
Case "Feuil1": zooming_columns .Range("A:I"): .ScrollArea = "A1:h42"
Case "Feuil2": zooming_columns .Range("A:m"): .ScrollArea = "A1:l20"
Case "Feuil3": zooming_columns .Range("A:f"): .ScrollArea = "A1:e18"
End Select
End With
End Sub

Merci d'avance et belle journée à toi

Patrick66
 

pat66

XLDnaute Impliqué
Bonjour,

désolé je ne pouvais te répondre plus tôt

Je comprends bien mais tu précises que le zooming_columns n'agit si le zoom est = 100 ou <> de 100 et je te rappelle que toutes mes feuilles ont des zooms différents de 100 pour un affichage optimum, donc :

"If .Zoom <> 100 Then Exit Function" indique bien que si le zoom est <> de 100, on annule la macro et comme toutes mes pages ont des zooms <> de 100, elle ne sert plus à rien ?
et si le zoom = 100, c'est idem puisque elles sont toutes différentes de 100

J'ai essayé avec <> 100, avec = 100 et même en désactivant les deux (<> 100 et = 100)
et je te confirme que certaines feuilles, qui ont été zommées pour une raison ou une autre, ne récupèrent pas le bon zoom lors de leur réactivation (affichage)

Je souhaite donc que chaque feuille activée se réaffiche avec le zoom qu'on lui demande, exemple ;
Case "Feuil1": zooming_columns .Range("A:I"): .ScrollArea = "A1:h42"
Case "Feuil2": zooming_columns .Range("A:m"): .ScrollArea = "A1:l20"
Case "Feuil3": zooming_columns .Range("A:f"): .ScrollArea = "A1:e18"

peut on aménager zooming_columns pour cela ?

merci
 

patricktoulon

XLDnaute Barbatruc
re
je souhaite donc que chaque feuille activée se réaffiche avec le zoom qu'on lui demande,

heu.... normalement c'est ce qu'elle est sensé faire
et pourquoi voudrais tu en ré affichant une feuille quelle re zoom quand c'est fait en changeant de feuille et en revenant le zoom doit être resté ,si c'est pas le cas tu a un gros problème
la fonction zooming ne doit agir qu'une fois sur chaque feuille si ton zoom ne reste pas quand tu change de feuille et que tu reviens sur une feuille zoomée c'est qu'il y a un truc qui la dé zoom
 

Statistiques des forums

Discussions
311 730
Messages
2 081 978
Membres
101 854
dernier inscrit
micmag26