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 :

Fige les volets au mauvais endroit, bonne cellule sélectionnée mais résultat aberrant [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 Fige les volets au mauvais endroit, bonne cellule sélectionnée mais résultat aberrant
    Bonjour,

    J'ai la joie et la bonne humeur d'ouvrir ma première discussion sur Developpez.com! Je suis heureux comme un code qui marche

    Sauf que celui-là à un petit défaut lorsque je le fais fonctionner sur Windows, alors qu'il marche très bien sur mon Mac avec Excel 2011:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub RéorgFeuilles()
    
    'Réorganise toutes les feuilles brutes
        
            Application.ScreenUpdating = False
            'Réduit le temps d'exécution
            
            Application.DisplayAlerts = False
        Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
        Application.DisplayAlerts = True
            'Supprime les 3 dernières feuilles vides sans demander de confirmation
            
    Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
    
    ws.Activate
    
            Range("A5:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
            'Supprime les lignes vides
            
            Range("A65536").End(xlUp).Select
        Do While ActiveCell.Row > Range("A5").Row
        If ActiveCell = "À supprimer" Then
        ActiveCell.EntireRow.Delete
        End If
        ActiveCell.Offset(-1, 0).Select
        Loop
            'Supprime les lignes dont la première cellule est "À supprimer"
        
            Columns("B:B").Delete shift:=xlToLeft
        Range("A4").ClearContents
        Range("D2").ClearContents
            'Supprime la colonne B et le contenu de deux cellules
            
            Range("C1:C3").Cut Destination:=Range("B1:B3")
            'Déplace les infos d'en-tête
            
            Columns("C:C").EntireColumn.AutoFit
            'Redimensionne la colonne C
            
            Columns("C:E").NumberFormat = "#,##0.00"
            'Formate les nombres
            
            Range("F6").Select
        ActiveWindow.FreezePanes = True
            'Fige les volets
        
            Dim No As String
            
            No = "No" & Mid(Range("B1"), 8, 1) & " " & Mid(Range("B2"), 6, 1)
        ActiveSheet.Name = No
            'Renomme les feuilles
        
    Next ws
    
            Dim X As Variant
            Dim I As Variant
        
            For Each X In ActiveWorkbook.Sheets
        For I = 0 To ActiveWorkbook.Sheets.Count - 1
        Sheets(1).Move after:=Sheets(Sheets.Count - I)
        Next
        Next
            'Inverse l'ordre des feuilles
    
    End Sub
    Dans toutes les feuilles, les panneaux sont bien figés à partir de la cellule F6, mais dans la dernière feuille (qui devient la première à la fin), les panneaux figés ne sont pas les bons. La cellule F6 est bien sélectionnée, mais les panneaux figés sont beaucoup plus larges comme s'ils l'avaient été depuis la cellule J62, 6 lignes après la dernière ligne de données…

    Avez-vous une idée de ce qui peut provoquer un tel résultat? Y a-t-il une erreur dans mon code? Ou est-ce que ça peut être les réglages dans Excel 2010 sur Windows qui sont différents de Excel 2011 sur Mac?

    Je me réjouis de vos contributions

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Essaie comme ça, sans Select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ActiveWindow.SplitRow = 6
        ActiveWindow.SplitColumn = 5
        ActiveWindow.FreezePanes = True
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  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 ta suggestion AlainTech.

    Le résultat est presque le même: au lieu de la cellule J62, c'est la cellule F47 qui délimite les panneaux. Autrement dit, bonne colonne, mauvaise ligne.

    Note que j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.SplitRow = 5
    et non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.SplitRow = 6
    pour avoir les 5 premiers rangs figés

    Note aussi qu'avec le pas à pas, ça fonctionne.

    J'ai lu sur un autre forum que ça peut venir du fait que j'ai désactivé le rafraîchissement d'écran (ScreenUpdating). Je vais essayer en l'activant et vous tiens au courant.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    J'ai découvert que si les lignes/colonnes à figer ne sont pas visibles, le résultat est, effectivement, aberrant.
    Ajoute ceci avant se figer tes volets.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  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
    Bonjour,

    Merci pour ta nouvelle réponse AlainTech!

    La bonne nouvelle, c'est que tu as bien identifié le problème. En tout cas, j'ai pu reproduire le résultat aberrant sur mon Mac. Lorsque le rafraîchissement d'écran (ScreenUpdating) est désactivé, il semblerait que VBA fige les volets seulement à partir des cellules visibles. Par exemple, si la première cellule visible est A101 au lieu de A1, les volets seront figés à partir de la cellule F106, au lieu de F6. Parfois cependant, je ne m'explique pas le résultat.

    La mauvaise nouvelle, c'est que
    ne fonctionne pas avec le rafraîchissement d'écran désactivé

    Notez que si j'active le rafraîchissement juste avant de figer les volets, ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Application.ScreenUpdating = True
        ActiveWindow.SplitRow = 5
        ActiveWindow.SplitColumn = 5
        ActiveWindow.FreezePanes = True
        Application.ScreenUpdating = False
            'Fige les volets
    Mais si j'ajoute en plus la commande d'AlainTech, ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Application.ScreenUpdating = True
        Cells(1, 1).Show
        ActiveWindow.SplitRow = 5
        ActiveWindow.SplitColumn = 5
        ActiveWindow.FreezePanes = True
        Application.ScreenUpdating = False
            'Fige les volets
    Est-ce que c'est parce que ça donne le temps au rafraîchissement de se remettre en place? Je ne sais pas.

    En conclusion, une solution serait de ne pas désactiver le rafraîchissement d'écran. L'autre solution serait de le réactiver juste avant de figer les volets comme dans le code précédent, pour le désactiver après afin de malgré tout gagner du temps dans l'exécution du code.

    Quelqu'un-e aurait-il/elle une autre suggestion afin de conserver le rafraîchissement d'écran et éviter ce bricolage?

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.ScreenUpdating = True
    DoEvents
    Ca marche?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. La saisie ne se fait pas dans les bonnes cellules
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/08/2010, 10h14
  2. [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
  3. [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