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

Usine à gaz

XLDnaute Barbatruc
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
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
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
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:

Discussions similaires

Statistiques des forums

Discussions
314 776
Messages
2 112 845
Membres
111 676
dernier inscrit
Mwanakumu