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

Microsoft 365 Bloquer défilement de la feuille selon hauteur de ligne

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une beau dimanche

J'en ai une petite pour ce dimanche lol

Je cherche à bloquer le défilement de la feuille (haut/bas - droite/gauche) si une ligne est à hauteur 200.
Par exemple :
Si clic sur la ligne 10, elle se met en hauteur 200 et passe en 1ère ligne visible.
Je souhaite qu'on ne puisse pas bouger l'affichage de cette ligne qui doit rester en 1ère ligne visible.

Il y a bien ce fil : https://www.excel-downloads.com/threads/figer-defilement-feuille-excel.215646/
mais ce n'était pas suffisant.

Pour l'instant je n'ai pas trouvé comment le coder mais je continue ) tester et à chercher.
Auriez-vous le bon code ?
Je joins un p'tit fichier test

Remerciements du dimanche
lionel,
 

Pièces jointes

  • ligne pas bouger.xlsm
    19.5 KB · Affichages: 9
Dernière édition:
Solution
Le clic droit est une bonne solution mais ceci va bien aussi :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
If r.Row = 1 Then Exit Sub
If r.Column = 1 Then
    r.RowHeight = 150
    Application.Goto Cells(r.Row, 1), True
    Me.ScrollArea = Rows(r.Row).Address 'bloque la ligne
Else
    r.RowHeight = 18
    Me.ScrollArea = ""
End If
End Sub

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour

Il y a le blocage possible des barres :
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

Mais cela ne résout pas le défilement avec la souris.
Je continue mes recherches
 

Pièces jointes

  • ligne pas bouger2.xlsm
    19.7 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour Lionel,

Avec une macro tournant en arrière-plan dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, Me.CodeName & ".Bloque" 'lance le processus
End Sub

Private Sub Bloque()
Dim t#, r As Range
Do
    t = Timer + 0.1 'temporisation 0.1 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    For Each r In ActiveSheet.UsedRange
        If r.RowHeight >= 200 Then
            ActiveWindow.ScrollRow = r.Row
            ActiveWindow.ScrollColumn = 1
            Exit For
        End If
    Next
Loop
End Sub
Pour arrêter le processus, dans VBA menu Exécution => Réinitialiser.

A+
 

Pièces jointes

  • ligne pas bouger(1).xlsm
    18.3 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
ActiveSheet.ScrollArea ne permettra pas de faire ce que tu souhaites.

Note bien qu'au poste #3 j'ai ajouté Exit For pour que ce soit la 1ère ligne trouvée qui soit traitée.
 

job75

XLDnaute Barbatruc
Regarde quand même ce que donnent ces 2 macros :
VB:
Sub Bloquer()
'se lance par les touches Ctrl+B
Dim r As Range
For Each r In ActiveSheet.UsedRange
    If r.RowHeight >= 200 Then
        Application.Goto r.Cells(1), True
        ActiveSheet.ScrollArea = r.Cells(1).Address
        Exit For
    End If
Next
End Sub

Sub Debloquer()
'se lance par les touches Ctrl+D
ActiveSheet.ScrollArea = ""
End Sub
La 1ère macro bloque le défilement mais aussi la sélection.
 

Pièces jointes

  • ligne pas bouger(2).xlsm
    18.4 KB · Affichages: 5

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour
Suite au #post 8, je tente de simuler en senkey les Touches Ctrl+B et touches Ctrl+D.
J'ai tenté plusieurs fois mais sans succès.
J'en suis à ça :
- CreateObject("wscript.shell").SendKeys "+(^{b})"
- CreateObject("wscript.shell").SendKeys "+(^{d})"
Auriez-vous le bon code ?
Merci à toutes et à tous,
lionel
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bingo :
ActiveSheet.ScrollArea = ActiveWindow.VisibleRange.Address
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…