Ranger

bonjour,

peut t'on faire plus simple pour ranger et que ça reste sur la ligne que j'ai indiqué

cordialement

jean Yves

le code est un peut compliqué il y a peut être plus simple !!

36essai.xlsm (25.13 Ko)

Bonjour,

Ce n'est pas que que le système utilisé soit très compliqué, mais la méthode prend des chemins détournés pour arriver au résultat, soit faire en sorte que la cellule active soit approximativement au centre de la fenêtre de l'application...

Tu as donc tout à fait raison en pensant qu'on peut faire plus simple !

La cellule supérieure gauche de la fenêtre peut être définie par les propriétés ScrollColumn et ScrollRow. En calculant directement la colonne et la ligne de cette cellule pour que la cellule active soit centrée, il suffit d'affecter les valeurs calculées aux propriétés pour obtenir le résultat.

Pour avoir le nombre de colonnes à gauche et le nombre de lignes au-dessus de la cellule active, on prend la moitié du nombre de colonnes et de lignes visibles dans la fenêtre (partie entière) et on retranche 1 pour éviter un déport excessif vers la droite ou le bas.

On retranche ces valeurs calculées de la colonne et de la ligne de la cellule active pour obtenir colonne et ligne de la cellule supérieure gauche de la fenêtre.

Code affecté à l'évènement SelectionChange, la chose se fait automatiquement.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim x%, xx%, y%, yy%
    With ActiveWindow
        With .VisibleRange
            xx = Int(.Columns.Count / 2) - 1
            yy = Int(.Rows.Count / 2) - 1
        End With
        x = Target.Column - xx
        y = Target.Row - yy
        .ScrollColumn = IIf(x > 0, x, 1)
        .ScrollRow = IIf(y > 0, y, 1)
    End With
End Sub

Pour l'affecter à un bouton, si on ne veut le faire que sur commande, mettre le code dans une autre procédure affectée au bouton et remplacer Target par ActiveCell.

Cordialement.

13benoist-essai.xlsm (22.50 Ko)

re bonjour,

j'ai pas très bien compris pourrait tu me le faire sur un exemple en enlevant mes codes

merci

Qu'est-ce que tu ne comprends pas ?

Essaie de reconstituer le calcul manuellement !

Tu regardes ton écran, la fenêtre d'affichage de la feuille : tu comptes les lignes visibles et les colonnes visibles ; une ligne ou une colonne partiellement visible compte pour 1, par contre si tu as figé les volets, les lignes figées (et éventuellement les colonnes figées) ne comptent pas.

Tu divises le nombre de colonnes trouvées par 2, mais tu ne gardes que la partie entière du résultat. Par exemple, 18 col. visibles te donnera 9, 19 col. visibles également 9. Tu retranches 1 (ce qui tient compte de la colonne dans laquelle tu te trouves). Tu vas donc obtenir 8.

Supposons que tu te trouves positionné en col. M, soit 13. Tu fais 13 - 8 = 5, soit E : ta cellule du coin haut gauche doit donc être en colonne E pour que ta cellule active soit centrée en colonne sur l'écran.

Même chose pour les lignes, tu as mettons 25 lignes visibles dans ton volet actif ; divisé par 2 = 12 ; -1 = 11. Tu te trouves positionné ligne 83 : 83 -11 = 72. C'est donc la cellule E72 qui doit se trouver à l'angle supérieur gauche de ton volet actif (ou de la fenêtre si pas de volet figé).

La macro ne fait que mettre cette cellule à cet emplacement pour que ta position soit centrée sur l'écran.

Bien évidemment, si le résultat de la soustraction finale était inférieur à 1, les colonnes ou lignes concernées n'existant pas, elle ramènerait le résultat à 1 pour qu'il corresponde à une cellule existante.

Cordialement.

merci pour toutes ses explications !

cordialement .

jean Yves

Rechercher des sujets similaires à "ranger"