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
Re,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 :
Pour arrêter le processus aller dans VBA (Alt+F11), menu Exécution => Réinitialiser.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 relancer le processus fermer et rouvrir le fichier.
A+
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
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
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