Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Calcul des hauteur et largeur des Headings (pour les forts en thème)

Dudu2

XLDnaute Barbatruc
Bonjour,

J'ai fait un code qui permet de calculer (du moins je le pense) la hauteur du Heading horizontal et la largeur du Heading vertical.
Ce calcul fonctionne apparemment bien en toutes occasions...SAUF SI le Zoom n'est pas à 100% ET QUE le ScrollRow ou le ScrollColumn ne sont pas à 1.

Je me suis cassé les dents sur ce calcul pour trouver la cause du non fonctionnement sous cette condition que j'ai contourné par un Scroll en 1/1 (A1) sous ScreenUpdating = False.
Mais évidemment ce n'est pas très satisfaisant.

Pour tester le calcul qui foire sans le Scroll salvateur, modifier la constante pré-processeur à #Const USE_SCROLL = False

Attention ! Le facteur Zoom n'a pas à être introduit dans le calcul actuel car aussi bien PointsToScreenPixelsX/Y que VisibleRange.Left/Top tiennent déjà compte du Zoom.
Sous un zoom donné il y a une progression du décalage proportionnelle à la Width des colonnes et la Height des lignes prédédant la 1ère cellule du VisibleRange.
Je n'ai pas trouvé les éléments de calcul qui permettraient de les déterminer. C'est du lourd !
 

Pièces jointes

  • Calcul des largeur et hauteur des Headings.xlsm
    38.8 KB · Affichages: 3

Dudu2

XLDnaute Barbatruc
Bonjour @patricktoulon,

Si on est à -X à gauche .WindowState ne peut pas être xlMaximized.
C'est seulement le .WindowState = xlMaximized qui nous pose problème avec ses .Left et .Top qui ne sont pas à zéro (-4.4 chez moi).

De toutes façons j'ai testé et ça fonctionne.
A moins que tu trouves un cas où ça ne fonctionne pas que je n'aurais pas vu.
 

patricktoulon

XLDnaute Barbatruc
bon j'ai regardé en effet les resultats sont faux mais pas tout a fait en fait
je ne devrait pas dire le heading fait
je devrait dir le heading se trouve à xxx du points(0)
car le userform est toujours afficher correctement au points(0) de la grille)
 

Dudu2

XLDnaute Barbatruc
le -X à gauche dont je parle, c'est un vrai -X, pas un -X dû à l'état de la fenêtre maximisée.
C'est pour ça que dans ton code je teste le WindowState pour différencier un "vrai" -X d'un -X de maximisation.
 

patricktoulon

XLDnaute Barbatruc
re
je ne vois pas de quoi tu parles (vrai/faux X )
je le redis quand excel est maximisé le left et/ou top ne sont pas à zero
ça c'est un fait

pour information voila les captures du heading maximisé et non maximisé
peut être te faudra il mettre un coup de loup pour voir ce qui se passe
maximisé et capturable


non maximisé capturé


en grossissant le truc pour la non maximisé
on voit bien la partie supplémentaire a droite du trait noir
 

patricktoulon

XLDnaute Barbatruc
re
il y a en effet un effet illogique dans le mode windowstate xlmaximized
VB:
Sub testxx()
    Dim P1#, P2
    With ActiveWindow.Panes(1)

        P1 = (.PointsToScreenPixelsX(.Parent.VisibleRange.Cells(1).Left) * 0.75)
        With Application
            If Application.Left < 0 Then

                ' j annule la reduction du left negatif de app  si le mode windowstate est xlmaximized
                If .WindowState = xlMaximized Then ML = 0 Else ML = Application.Left

                P2 = P1 - ML
            Else
                P2 = P2 - Application.Left
            End If
        End With
    End With

    MsgBox "l 'application est à " & Application.Left & " de left " & vbCrLf & _
            "donc le calcul devrait être " & vbTab & P1 & " moins " & Application.Left & vbCrLf & _
            "le calcul réellement effectué est :" & vbTab & P1 & " moins " & ML & vbCrLf & _
            "le HeadingWeight = " & P2 & " Point"

End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…