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. bonjour
    pour centrer ses tout simple

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


    A+
    0
    1. 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
      0
      1. Ah d'accord merci pour l'explication!!
        0
        1. moi ca me place B4 en premiere cellule, une histoire d'arrondi?
          0
      2. 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
        0
        1. Ah c'est bon ca marche, merci!!

          Cordialement.
          0
        2. De rien

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

          Bonne journée
          0