Centrer une cellule, explication

Bonjour,

J'ai ce premier code :

Private Sub CommandButton1_Click()


Sheets("feuil2").Select
Range("B4").Select

Set rcible = Range("B4")
Run ("CentrerCellule")

End Sub


Et celui là :

Sub CentrerCellule()


Dim iRow As Integer
Dim iCol As Integer

iRow = rcible.Row - ActiveWindow.VisibleRange.Rows.Count / 2
If iRow < 1 Then iRow = 1
iCol = rcible.Column - ActiveWindow.VisibleRange.Columns.Count / 2
If iCol < 1 Then iCol = 1
ActiveWindow.ScrollColumn = iCol
ActiveWindow.ScrollRow = iRow
End Sub


Je comprends ce que fais le code à la fin (centrer sur B4) mais j'aurais aimé savoir si il était possible de m'expliquer exactement ce que fais exactement cette ligne : ActiveWindow.VisibleRange.Rows.Count / 2
(et les autres au passage, notamment ActiveWindow.ScrollColumn)
Ils entendent quoi exactement par cellules visibles car si c'était toutes les cellules de la feuille, ça me renverrai à chaque fois 1 et donc pas la cellule B4 au final..

Voilà, j'espère que quelqu'un pourra m'éclairer

Merci!!

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

4 réponses

  1. Une ligne/colonne ne peut pas être "partagée"
    Vérifies combien tu as de lignes/colonnes visibles (même à peine) avant et après la cellule cible.

    Cdlmnt
    1. Ah c'est bon ca marche, merci!!

      Cordialement.
    2. De rien

      Si c'est fini, peux tu mettre le sujet à résolu (en haut à droite, la roue dentée)

      Bonne journée
  2. Ah d'accord merci pour l'explication!!
    1. moi ca me place B4 en premiere cellule, une histoire d'arrondi?
  3. Bonjour

    Dim rcible As Range
    
    Sub CentrerCellule()
    Dim iRow As Integer
    Dim iCol As Integer
    Set rcible = Range("H20")
    iRow = rcible.Row - ActiveWindow.VisibleRange.Rows.Count \ 2
    If iRow < 1 Then iRow = 1
    iCol = rcible.Column - ActiveWindow.VisibleRange.Columns.Count \ 2
    If iCol < 1 Then iCol = 1
    ActiveWindow.ScrollColumn = iCol
    ActiveWindow.ScrollRow = iRow
    End Sub


    Cette procédure centre la cellule rcible dans la feuille (visible)

    Exemple

    En supposant qu'au départ
    - la 1° cellule visible est A1
    - les colonnes visibles vont de A à K (11 colonnes)
    - les lignes visibles vont de 1 à 31 (31 lignes)
    - la cellule rcible a pour adresse H20

    iRow et iCol seront calculées comme les coordonnées de la 1° cellule (en haut à gauche) de fenêtre visible centrée sur rcible

    rcible.Row renvoie le numéro de ligne de rcible (20)
    ActiveWindow.VisibleRange.Rows.Count : renvoie le nombre de lignes visibles dans la feuille (31)
    ActiveWindow.VisibleRange.Rows.Count \ 2 renvoie donc 15
    rcible.row est le numéro de ligne de la cellule rcible
    iRow = rcible.Row - ActiveWindow.VisibleRange.Rows.Count \ 2 donnera 5 (1° ligne de la fenêtre vivible)

    idem pour le calcul de iCol qui vaudra 8-11\2 = 3 (colonne C)

    ActiveWindow.ScrollRow : définit le numéro de la 1° ligne de la fenêtre visible

    idem pour ActiveWindow.ScrollColumn = iCol

    et la 1° cellule (en haut à gauche) de la fenêtre sera C5

    Cdlmnt
    1. bonjour
      pour centrer ses tout simple

      Sub Macro1()
      Sheets("Feuil2").Range("B4").HorizontalAlignment = xlCenter
      End Sub


      A+