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

XL 2016 VBA - Exact Visible Range

Dudu2

XLDnaute Barbatruc
Bonjour,

VBA nous donne un Window.VisibleRange qui inclut les dernières colonne et ligne pas forcément complètement visibles.
C'est souvent handicapant quand on veut avoir un Window.ExactVisibleRange qui exclut les parties non visibles des dernières colonne et ligne.

J'ai dû faire un code sans trop d'API pour tenter de définir cet ExactVisibleRange mais hélas, j'ai aussi dû utiliser des constantes qui semblent valides chez moi. Mais le sont-elles chez vous ?
VB:
Const VerticalScrollBarBordersPixels As Long = 2 * 2.5    'Borders around the Vertical Scroll Bar
Const HorizontalScrollBarBordersPixels As Long = 2 * 4    'Borders around the Horizontal Scroll Bar
Const StatusBarHeightPixels = 26

Merci par avance de tester ce code pour vérifier qu'en toutes configurations de fenêtre (maximisée et réduite), la Shape Rectangle s'affiche bien aux limites basses de la partie visible.
Si ce n'est pas le cas, un petit screenshot et des infos sur la version Window et Office (versions et bits)



Fichier: voir plus loin
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Merci @TooFatBoy,
J'ai aussi des petits soucis de cet ordre en largeur et hauteur, le trait est non visible mais juste à la limite.
Je ne sais pas d'où ça vient. Comme y a de PointToScreenPixel, il peut y avoir des variations difficiles à contrôler.
Le Zoom n'est pas pris en compte pour l'instant.
 

TooFatBoy

XLDnaute Barbatruc
Ce qui est marrant, c'est qu'avec le classeur affiché en maximisé, le bord droit du carré est bien visible.




[edit]
Oups je viens seulement de voir que tu avais demandé de tester en maximisé.
Il faudrait que j'apprenne à ire les messages jusqu'au bout...
[/edit]
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
La difficulté c'est de choper la Window Width & Height en réduit.
Là j'ai ajusté un paramètre de réduction et chez moi le cadrage V1 fonctionne.

Quant à chez @sylvanu, je n'ai aucune idée de ce qui se passe.
 

Pièces jointes

  • ExactVisibleRangeSize.xlsm
    44 KB · Affichages: 3

Dudu2

XLDnaute Barbatruc
En maximisé j'arrive bien à déterminer les dimensions de la Window. Les 2 méthodes donnent le même résultat de dimension de la Window.

En réduit, bien qu'on ait les propriétés exactes de la Window (Left, Top, Width, Height), elles ne semblent pas refléter la réalité. Je ne sais pas. Une histoire de bordures de la Window en réduit. Peut-être ce -4.4 que j'ai quand elle est maximisée.

Encore un sacré sujet !
 

patricktoulon

XLDnaute Barbatruc
re
VB:
'patricktoulon
#If VBA7 Then
    Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#Else
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
#End If

Private Const SM_CXVSCROLL = 2
Private Const SM_CYHSCROLL = 3
Private Const SM_CXDLGFRAME = 7


Sub testpat()
    Dim PpX#, DepZeroX#, DepZeroY#, Thickframe&
    
    Thickframe = GetSystemMetrics(SM_CXDLGFRAME) * Abs(Application.WindowState = xlMaximized) ' le prendre avec getsystemmetrics
    
    scrowidtht = GetSystemMetrics(SM_CXVSCROLL) ' le prendre avec getsystemmetrics
    scroheight = GetSystemMetrics(3) * 2 ' barre de status + onglet tab le prendre avec getsystemmetrics
  
   PpX = 0.75 ' ou 0.6 'utilise la méthode que tu veux
    
    With ActiveWindow
        DepZeroX = (.PointsToScreenPixelsX(0) * PpX) - Application.Left
        
        ActiveSheet.Shapes("TheShape").Left = _
                            Application.UsableWidth - ActiveSheet.Shapes("TheShape").Width - scrowidtht - DepZeroX + Thickframe
        
        ActiveSheet.Shapes("TheShape").Top = _
                            ((.Application.UsableHeight - ActiveSheet.Shapes("TheShape").Height) - scroheight) - Thickframe
    End With
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…