Centrer une cellule, explication

simonsimon1 Messages postés 9 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
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. archer
     
    bonjour
    pour centrer ses tout simple

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


    A+
    0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  3. simonsimon1 Messages postés 9 Statut Membre
     
    Ah d'accord merci pour l'explication!!
    0
    1. simonsimon1 Messages postés 9 Statut Membre
       
      moi ca me place B4 en premiere cellule, une histoire d'arrondi?
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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. simonsimon1 Messages postés 9 Statut Membre
       
      Ah c'est bon ca marche, merci!!

      Cordialement.
      0
    2. ccm81 Messages postés 11033 Statut Membre 2 434
       
      De rien

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

      Bonne journée
      0