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
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
Désolé, j'y comprends rien car maintenant ça fonctionne :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
    If Not Intersect(activecell, Range("a2:zz20000")) Is Nothing Then
        If r.RowHeight = 18 Then
        Application.EnableEvents = False
        activecell.RowHeight = 150
        ActiveWindow.ScrollRow = Selection.Row
        CreateObject("wscript.shell").SendKeys "^b"
        'ActiveSheet.ScrollArea = ActiveWindow.VisibleRange.Address
       [a1].Select
        Application.EnableEvents = True
        Else
        Application.EnableEvents = False
        r.RowHeight = 18
        ActiveSheet.ScrollArea = ""
        [a1].Select
        Application.EnableEvents = True
        End If
    End If
End Sub
 

Pièces jointes

  • ligne pas bouger.xlsm
    26.1 KB · Affichages: 4

job75

XLDnaute Barbatruc
Et pourquoi multiplier les Application.EnableEvents qui ne servent à rien ? Ce code suffit :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
    If Intersect(ActiveCell, Range("a2:zz20000")) Is Nothing Then Exit Sub
    If r.RowHeight = 18 Then
        ActiveCell.RowHeight = 150
        Application.OnTime 1, "Bloquer"
    Else
        r.RowHeight = 18
        ActiveSheet.ScrollArea = ""
    End If
End Sub
Bonne nuit.
 

Usine à gaz

XLDnaute Barbatruc
Ha vraiment merci Gérard
Bonne nuit
 

job75

XLDnaute Barbatruc
Bonjour Lionel, le forum,

Le fichier joint est quand même plus cohérent :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
If r.Row = 1 Then Exit Sub
Application.ScreenUpdating = True
r.RowHeight = 150
Application.Goto Cells(r.Row, 1), True
Me.ScrollArea = Cells(r.Row, 1).Address 'bloque la sélection
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal r As Range, Cancel As Boolean)
If r.RowHeight = 150 Then Cancel = True: r.RowHeight = 18: Me.ScrollArea = "": [A1].Select
End Sub

A+
 

Pièces jointes

  • ligne pas bouger(1).xlsm
    20.5 KB · Affichages: 3

Usine à gaz

XLDnaute Barbatruc
Bonjour Gérard
Bonjour à toutes et à tous

Merci Gérard vraiment d'une telle rigueur
Mais lol, j'allais demander une p'tite amélioration mais je ne sais pas si c'est possible :
Le ScrollArea bloque tout et c'est très bien mais j'aurais besoin de garder la possibilité de cliquer uniquement dans la ligne active qui "du coup" éviterait le clic droit qui est interdit (bloqué) dans mon "usine à gaz" .... est-ce possible ?
lol
lionel,
 

job75

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

Pièces jointes

  • ligne pas bouger(2).xlsm
    20.3 KB · Affichages: 1

Discussions similaires

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