XL 2019 DEFILEMENT

FPT

XLDnaute Nouveau
Bonjour

est il possible de bloquer la partie entourée ( à droite) pour l'avoir toujours en visuel et de faire defiler mon tableau ( à gauche ) vers le bas svp ?

1625663527492.png
 

job75

XLDnaute Barbatruc
Bonjour FTP, Etoto, patricktoulon, le forum,

@Etoto : c'est bien sûr le défilement vertical qu'il faut traiter !

Bon alors il existe une solution qui consiste à faire tourner une macro sans fin en arrière-plan.

Voyez le fichier joint et ce code dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim P As Range, col%, lig&, t#
Set P = [MaZone] 'plage nommée
col = 10 'colonne de destination, à adapter
Do
    lig = ActiveWindow.ScrollRow 'mémorise la ligne
    t = Timer + 0.2 'temporisation de 0.2 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    If ActiveWorkbook.Name = Me.Name Then If ActiveSheet.Name = P.Parent.Name Then _
        If ActiveWindow.ScrollRow <> lig Then P.Cut Cells(ActiveWindow.ScrollRow, col) 'couper-coller
Loop
End Sub
Pour arrêter le processus aller dans VBA (Alt+F11), menu Exécution => Réinitialiser.

Pour relancer le processus fermer et rouvrir le fichier.

A+
 

Pièces jointes

  • Arrière-plan(1).xlsm
    27.7 KB · Affichages: 16

Etoto

XLDnaute Barbatruc
Bonjour FTP, Etoto, patricktoulon, le forum,

@Etoto : c'est bien sûr le défilement vertical qu'il faut traiter !

Bon alors il existe une solution qui consiste à faire tourner une macro sans fin en arrière-plan.

Voyez le fichier joint et ce code dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim P As Range, col%, lig&, t#
Set P = [MaZone] 'plage nommée
col = 10 'colonne de destination, à adapter
Do
    lig = ActiveWindow.ScrollRow 'mémorise la ligne
    t = Timer + 0.2 'temporisation de 0.2 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    If ActiveWorkbook.Name = Me.Name Then If ActiveSheet.Name = P.Parent.Name Then _
        If ActiveWindow.ScrollRow <> lig Then P.Cut Cells(ActiveWindow.ScrollRow, col) 'couper-coller
Loop
End Sub
Pour arrêter le processus aller dans VBA (Alt+F11), menu Exécution => Réinitialiser.

Pour relancer le processus fermer et rouvrir le fichier.

A+
Re,
Super cool ton idée, c'est mieux que la mienne en tout cas.
 

patricktoulon

XLDnaute Barbatruc
re
mais non nouvelle fenêtre que vous placer ou vous voulez et c'est tout
vous le faite en enregistrant la macro et vous arrangez le code avec les donnée taille et position dynamiques
VB:
Sub test()
    t = Application.Top
    h = Application.Height
    w = [G1:k18].Width + 31 '31 c'est 21 pour les heading rows et 10 pous eppaisseur  scrollbar
    l = [A:F].Width + Application.Left + 31
   
    ActiveWindow.NewWindow
    Application.Left = l
    Application.Top = t
    Application.Width = w
    Application.Height = h
    ActiveWindow.ScrollColumn = [G1:k18].Column
  End Sub
demo7.gif

on pourrait même avec l'api setparent(en macro 4 bien sur) atacher la fenêtre 2 a la fenêtre 1 pour qu'elle soit bloquée en position supérieure

et puis c'est tout
pas compliqué vous avez votre tableau 1 et 2 indépendants pour l'affichage ;)
 

patricktoulon

XLDnaute Barbatruc
tenez pour la voir toujours au dessus de la fenêtre de base
VB:
Sub fenetre_independantes()
    hwnd1 = Application.Hwnd
    t = Application.Top
    h = Application.Height
    w = [G1:k18].Width + 31    '31 c'est 21 pour les heading rows et 10 pous la scrollbar
    l = [A:F].Width + Application.Left + 31
    ActiveWindow.NewWindow
    hwnd2 = Application.Hwnd
    ExecuteExcel4Macro ("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & hwnd2 & ", " & -1 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 1 & ")")
    Application.Left = l
    Application.Top = t
    Application.Width = w
    Application.Height = h
    ActiveWindow.ScrollColumn = [G1:k18].Column
End Sub
vous pouvez déplacer les deux fenêtres indépendamment même les réduire ,les maximiser, et tout et tout
bref vous les avez a dispo quand vous voulez
utilisation de l'api setwindowpos avec une macro 4( compatible tout windows/tout office excel ) sans déclaration 32/64
@+ ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Une autre piste (pas trop peaufiné):
  • La zone à afficher a été déplacée en colonne AD
  • La zone à afficher a été nommée "Legende"
Sélectionner successivement une cellule des colonnes A à H (voire une plage). Si besoin, la légende se déplace.

Le code est dans le module associée à la feuille "Feuil1":
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xrg, i&
   If Target.Column > Range("h1").Column Then Exit Sub
   On Error Resume Next
   Me.Shapes("Legende").Delete
   Range("legende").Copy
   ActiveSheet.Pictures.Paste.Name = "Legende"
   Application.CutCopyMode = False
   Set xrg = ActiveWindow.ActivePane.VisibleRange(1, 1)
   Me.Shapes("Legende").Top = Cells(xrg.Row, "i").Top
   Me.Shapes("Legende").Left = Cells(xrg.Row, "i").Left
End Sub
 

Pièces jointes

  • FPT- défilement- v1.xlsm
    77.6 KB · Affichages: 9
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour @mapomme
le tableau n'est pas utilisable comme ça
si c'est juste pour l'avoir a portée des yeux OK
bien entendu il faut pas qu'il fasse plus que le visiblerange.height ;)
sinon une frame dans la feuille et la capture en font de frame et le frame.scrollheight a la dimension de l'image
ça serait bien de tester ça (toujours si c'est simplement pour l'avoir sous les yeux bien sur ;) )
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 069
Membres
103 454
dernier inscrit
Marion devaux