Lors de l’utilisation de plusieurs feuilles de calcul, Chris se demande s’il existe un moyen de «verrouiller» le défilement de toutes les feuilles de calcul. Par exemple, s’il fait défiler vers le bas et sur la feuille Sheet1 jusqu’à ce que les lignes 100 à 140 et les colonnes G à P soient visibles, alors quand il passe à Sheet2 (ou à toute autre feuille de calcul), il aimerait que les mêmes lignes et colonnes soient affichées sur ces feuilles de travail.

La seule façon d’accomplir cette tâche consiste à utiliser des macros. Ce qui doit se passer, c’est que la macro doit déterminer quelles lignes et colonnes sont visibles lorsqu’une feuille est désactivée (à gauche), puis définir l’affichage de la feuille activée (celle que vous allez) sur les mêmes lignes et colonnes. Les macros suivantes, ajoutées au module ThisWorkbook, exécutent exactement cette tâche.

Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If TypeName(ActiveSheet) = "Worksheet" Then         On Error Resume Next         With ActiveWindow             Sh.Range(grngSelection.Address).Select             .ScrollColumn = gintScrollColumn             .ScrollRow = glngScrollRow         End With     End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim oSheet As Object     If TypeName(Sh) = "Worksheet" Then         Set oSheet = ActiveSheet         Application.EnableEvents = False         Sh.Activate         With ActiveWindow             gintScrollColumn = .ScrollColumn             glngScrollRow = .ScrollRow             Set grngSelection = .RangeSelection         End With         oSheet.Activate         Application.EnableEvents = True     End If End Sub

Notez l’utilisation des variables en dehors des gestionnaires d’événements. Ces variables sont utilisées pour transmettre les valeurs de la colonne, de la ligne et de la zone sélectionnée du gestionnaire SheetDeactivate au gestionnaire SheetActivate.

Bien sûr, vous ne voudrez peut-être pas une solution automatique. Au lieu de cela, vous souhaiterez peut-être que l’utilisateur effectue une étape spécifique pour déterminer si les feuilles de calcul sont synchronisées. Cela peut être fait en ajoutant la macro suivante à un module normal de votre classeur:

Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean

Public Sub WindowLock()

If Not WindowSyncOn Then         WindowScrollRow = ActiveWindow.VisibleRange.Row         WindowScrollCol = ActiveWindow.VisibleRange.Column         Application.StatusBar = "WindowSync: ON"

Else         Application.StatusBar = ""

End If     WindowSyncOn = Not WindowSyncOn End Sub

Tout ce que fait cette macro est de vérifier l’état de la variable globale WindowSyncOn. Si la valeur est False, les paramètres actuels de la ligne visible supérieure et de la colonne visible la plus à gauche sont stockés dans des variables globales. Le paramétrage de ces variables est ensuite utilisé par le gestionnaire d’événements suivant, ajouté au module ThisWorkbook:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If WindowSyncOn Then         If Not ActiveWindow Is Nothing Then             ActiveWindow.ScrollRow = WindowScrollRow             ActiveWindow.ScrollColumn = WindowScrollCol         End If     End If End Sub

La macro vérifie simplement le réglage de la variable WindowSyncOn, et si elle est True (elle a été définie), alors la macro définit quelle ligne et colonne se trouvent en haut et à gauche de la fenêtre active.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (3860) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.