IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Figer les volets selon la région où l'on se trouve [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Figer les volets selon la région où l'on se trouve
    Bonjour,

    Sur une feuille qui comporte plusieurs tableaux les uns au-dessus des autres, j'aimerais faciliter la navigation en figeant les volets adéquats.

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub test()
            
            Application.ScreenUpdating = True
            
            Dim c As Range      'cellule sélectionnée par l'utilisateur
            Dim c2 As Range     'cellule au coin de la région dont on veut figer les volets
            
            Set c = ActiveCell
            Set c2 = Cells(c.CurrentRegion.Rows(1).row, 1)
    
            ActiveWindow.FreezePanes = False
            Application.Goto c2, True
            ActiveWindow.SplitRow = c2.row + 2
            ActiveWindow.SplitColumn = c2.Column + 5
            ActiveWindow.FreezePanes = True
            
            c.Activate
    
    End Sub
    Le souci, c'est que, d'une part, la ligne 13 du code ne s'exécute a priori pas bien - au pas à pas, la ligne n'est pas fractionnée - et que, d'autre part, une fois la macro exécutée, l'écran ne bouge plus verticalement - seule, la barre de défilement monte et descend sous l'action de la molette.

    Est-ce que vous voyez où pourrait se situer la solution?


    ICI, une discussion au sujet d'un problème que j'avais rencontré pour figer des volets, au cas où cela vous intéresse.

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Dans ton code, tu utilises le fractionnement et la "figeage" des volets.

    Pour moi, la commande figer le volets est suffisante.

    J'ai modifié ton code. Je te laisse voir si c'est mieux pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub test()
     
            Dim c As Range      'cellule sélectionnée par l'utilisateur
            Dim c2 As Range     'cellule au coin de la région dont on veut figer les volets
     
            Set c = ActiveCell
            Set c2 = Cells(c.CurrentRegion.Rows(1).Row, 1)
     
            ActiveWindow.FreezePanes = False
            c2.Offset(2, 5).Select
            ActiveWindow.FreezePanes = True
     
            c.Activate
     
    End Sub
    Pour info, sur mon poste en Win 10 et Excel 2010, ton code fonctionnait ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Merci pour ton retour jerome.vaussenat.

    Sans fractionnement, tu utilises la méthode Select, qui est, c'est un euphémisme, "déconseillée" par les puristes. (à laquelle je fais aussi un peu partie, pas de polémique je vous prie)

    En l'occurrence, je suis aussi revenu à cette méthode et ça a l'air de fonctionner.

    Note que la sélection ramène la cellule vers le milieu de l'écran et le "figeage" se fait à partir de là. La partie visible du volet supérieur figé est alors beaucoup trop haute; raison pour laquelle j'ajoute la méthode Application.GoTo avec l'argument Scroll réglé sur True pour que la cellule au coin de la région s'affiche tout en haut à gauche de l'écran et que n'apparaisse dans le volet supérieur que les en-tête de colonne.

    Voici le code avec la méthode Select:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test
     
            Dim c As Range      'cellule sélectionnée par l'utilisateur
            Dim c2 As Range     'cellule au coin de la région dont on veut figer les volets
     
            Set c = ActiveCell
            Set c2 = Cells(c.CurrentRegion.Rows(1).row, 1)
     
            ActiveWindow.FreezePanes = False
            Application.GoTo c2, True
            c2.Offset(2, 5).Select
            ActiveWindow.FreezePanes = True
     
            c.Activate
     
    End Sub
    Je laisse la discussion irrésolue un temps, car j'ai encore rencontré quelques soucis que je n'arrive pas à reproduire. Je verrai à l'usage.

    Merci encore!

  4. #4
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Voilà, je m'en doutais, petit souci.

    Le fait que les volets soient fractionnés au départ pose apparemment problème, même si ce n'est qu'un fractionnement vertical et le même que celui qu'applique la macro.

    Je désactive donc le fractionnement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub test()
     
            Dim c As Range      'cellule sélectionnée par l'utilisateur
            Dim c2 As Range     'cellule au coin de la région dont on veut figer les volets
     
            Set c = ActiveCell
            Set c2 = Cells(c.CurrentRegion.Rows(1).row, 1)
     
            ActiveWindow.FreezePanes = False
            Application.GoTo c2, True
            c2.Offset(2, 5).Select
            With ActiveWindow
                .SplitColumn = 0
                .SplitRow = 0
                .FreezePanes = True
            End With
     
            c.Activate
     
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Il faut défractionner avant de sélectionner la cellule à partir de laquelle on fige les volets, sinon l'affichage risque de changer et certaines colonnes à gauche d'être cachées une fois les volets figés.

    Code mis à jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub test()
     
            Dim c As Range      'cellule sélectionnée par l'utilisateur
            Dim c2 As Range     'cellule au coin de la région dont on veut figer les volets
     
            Set c = ActiveCell
            Set c2 = Cells(c.CurrentRegion.Rows(1).row, 1)
     
            With ActiveWindow
                .FreezePanes = False
                .SplitColumn = 0
                .SplitRow = 0
            End With
            Application.GoTo c2, True
            c2.Offset(2, 5).Select
            ActiveWindow.FreezePanes = True
     
     
            c.Activate
     
    End Sub
    Discussion résolue. Merci encore pour ton intérêt jerome.vaussenat.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. figer les volets excel
    Par roico dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/05/2007, 16h14
  2. Figer les volets d'un fichier Excel
    Par SylvainJ dans le forum Access
    Réponses: 6
    Dernier message: 08/08/2006, 14h39
  3. [Formulaire][Access] Figer les volets
    Par lito74 dans le forum IHM
    Réponses: 15
    Dernier message: 23/02/2006, 17h37
  4. [VB6]"Figer les volets" dans une feuille Excel
    Par maillardd dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 01/02/2006, 16h41
  5. [VBA] Figer les volets automatiquement
    Par titflocon dans le forum Access
    Réponses: 5
    Dernier message: 21/12/2005, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo