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 ?
@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.
@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.
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
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
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
@+
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
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 )