Ligne de cellule active: toujours au centre

Bonjour le forum!

Comme le titre peut être mal interprété je vais de ce pas préciser ma demande.

En effet j'aimerai garder la ligne ou j'ai sélectionné une cellule en permanence au milieux de ma feuille ou plutôt à une certaine hauteur.

Par exemple si je sélectionne la cellule A10 mais que celle-ci et à ce moment au bas de ma feuille et bien que l'affichage fasse en sorte de mettre la ligne 10 (A10 étant la cellule que j'ai sélectionné sur la ligne 10 même si j'aurai pu prendre B10/C10/D10 etc...) au centre de ma feuille (donc au milieu par rapport au bas de la feuille visible et le bas du volet figé).

Je ne sais pas si c'est faisable par macro mais si tel est le cas il serait aussi fort sympathique que cet "actualisation d'affichage" ne se fasse QUE lorsque je clique sur une cellule car si je me met à scroll et que l'affichage s'actualise en permanence pour faire revenir la ligne 10 (ayant sélectionné A10) au centre cela risque d'être problématique.

En revanche si je sélectionne les premières cellules (A16 dans mon fichier) cela risque d'être compliqué d'afficher celle-ci au centre car on ne pas pas remonter d'avantage l'affichage donc dans ce cas peut être ne rien faire pour les premières lignes visibles sans scroll (dans mon fichier ligne 16 à 33).

De plus il faudrait que cette même "actualisation" se fasse sur plusieurs feuilles, plus précisément "Sommaire" "DL" "Prévisions" dans le fichier ci-joint.

32test.xlsm (185.89 Ko)

En espérant que cette manipulation/macro est réalisable de manière automatisée. Dans l'attente je reste à votre dispo pour plus de précisions si je me suis mal exprimé.

Bonjour Zayx,

à tester, j'ai appliqué le code sur les feuilles "Sommaire", "Prévisions" et "DL".

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nc%, nr%, c&, r&
c = Target.Column
r = Target.Row
With ActiveWindow.ActivePane
With .VisibleRange
nc = Int(.Columns.Count / 2)
nr = Int(.Rows.Count / 2)
End With
.ScrollColumn = IIf(c > nc, c - nc, 1)
.ScrollRow = IIf(r > nr, r - nr, 1)
End With
End Sub

Cordialement

73copie-de-test.xlsm (112.81 Ko)

Bonjour,

Dans le module du classeur avec ta ligne de code :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    With ActiveWindow.VisibleRange

        On Error Resume Next
        ActiveWindow.ScrollRow = .Rows(1).Row + Target.Row - Int(.Rows(1).Row + (.Rows(.Rows.Count).Row - .Rows(1).Row) / 2)

    End With

    Ligne = Target.Row: Colonne = Target.Column

End Sub

Hervé.

Bonjour Ednoork, Theze et merci pour vos réponses.

@Ednoork: J'ai testé et j'approuve, c'est totalement ce qu'il me faut. Je l'ai appliqué sur mon fichier et cela marche du tonnerre.

Je ne pensais pas aussi bien me faire comprendre en fait .

@Theze: Si je ne m'abuse ce que tu me donne c'est un code pour "Workbook" donc en gros la totalité des feuilles du classeur. J'avoue avoir oublié de préciser que le fichier test n'est pas représentatif du fichier original en ma possession. J'ai des 10ène d'autres feuilles que ces trois la dedans et je ne veux pas que cet actualisation d'affichage se fasse sur toute les feuilles mais uniquement sur ces trois "Sommaire" "DL" "Prévisions". Si jamais le code est modifiable pour, je le prendrai également, ça peut toujours servir.

En tout cas mon soucis est résolu, je met le sujet en tant que tel et je reviendrai si jamais j'ai des soucis dessus!

Encore une fois merci de vous être penché sur mon problème et je vous souhaite une excellente journée!

Bonjour le forum,

Je reviens vers toi Ednoork pour une légère modification.

Actuellement cela me centre horizontalement (bas/haut) et verticalement (gauche/droite).

J'aimerai que cela ne se centre QUE horizontalement. Le centrage vertical me dérange plus qu'autre chose.

Que dois-je modifier/supprimer dans ton code pour résoudre le problème?

En espérant que tu jettes toujours un oeil au sujet, amicalement!

Bonsoir,

modifie le code de la manière suivante :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim nc%, nr%, c&, r&
c = Target.Column  ' <--suppression de la ligne ou un apostrophe en début de ligne
r = Target.Row
With ActiveWindow.ActivePane
With .VisibleRange
nc = Int(.Columns.Count / 2)  ' <--suppression de la ligne ou un apostrophe en début de ligne
nr = Int(.Rows.Count / 2)
End With
.ScrollColumn = IIf(c > nc, c - nc, 1) ' <--suppression de la ligne ou un apostrophe en début de ligne
.ScrollRow = IIf(r > nr, r - nr, 1)
End With
End Sub

Bonjour Ednoork, le forum.

Code modifié et fonctionnel.

Encore une fois merci et bonne journée!

Amicalement.

Rechercher des sujets similaires à "ligne active centre"