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 :

Macro masquer une colonne sur deux [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut Macro masquer une colonne sur deux
    Bonjour à tous,

    Je sais que la réponse a déjà été donnée sur ce sujet mais celles que j'ai trouvées ne me conviennent qu'en partie. En effet, j'aimerais masquer une colonne sur deux. J'ai donc fait une macro pour masquer les colonnes impaires à partir de la colonne G. Le problème c'est qu'elle vérifie les colonnes une par une et qu'il y a beaucoup de colonnes. Elle prend donc plusieurs secondes (pas grand chose mais pas super agréable pour l'utilisateur). Y aurait-il une macro qui s'exécuterait plus rapidement ? J'ai déjà essayé les deux macros suivantes qui donnent le résultat attendu mais nécessitent un certain temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub masquergranu2()
      Dim col%
      For col = 7 To 500 Step 2
        Columns(col).Hidden = Not Columns(col).Hidden
      Next col
    End Sub


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub masquergran()
        Dim col As Integer
        ' on affiche tout
     
        For col = 5 To 500
            If col Mod 2 <> 0 Then ' si diviser par 2 il reste 0 c'est que c'est pair, pour impair il faut faire le test <> 0
                Cells(1, col).EntireColumn.Hidden = True
            End If
        Next col
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Essais en gelant l'affichage, chez moi, moins d'une seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub masquergranu2()
      Dim col%
      Application.ScreenUpdating = False
      For col = 7 To 500 Step 2
        Columns(col).Hidden = Not Columns(col).Hidden
      Next col
      Application.ScreenUpdating = True
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    c'est normal tu masque colonne par colonne et donc declanchement a chaque tour des evenements du sheets

    il te faut collectionner les colonnes dans un range avec union et masquer démasquer cet union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub masque(boulboul)
    Dim rng As Range
    For i = 7 To 500 Step 2
    If rng Is Nothing Then Set rng = Cells(1, i) Else Set rng = Union(rng, Cells(1, i))
    Next
    rng.EntireColumn.Hidden = boulboul
    End Sub
    pour tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub masquer()
    masque True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub afficher()
    masque False
    End Sub
    instantané!!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par andrewm Voir le message
    Bonjour,

    Essayez d'utiliser les affichages personnalisés depuis le menu Affichage:

    Pièce jointe 404182

    Vous faites tourner vos programmes pair et impair l'un après l'autre et pour chacun d'entre eux, vous sauvegardez leur nom comme dans le vidage d'écran.
    Ensuite avec l'enregistreur de macro, vous modifiez les vues pour voir le code généré.

    A priori, c'est plus rapide (test sans formules).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut Merci
    Merci beaucoup, toutes vos solutions marchent à merveille !!!

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par andrewm Voir le message
    J'imagine que la solution de Patrick doit être de loin la plus performante. Quel est votre avis ?

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour eric KERGRESSE
    ben il y a que ca en fait
    la tienne aurait un avantage si la plage ne devait pas changée de dimention on enregistre le fichier et on supprime le code on se servirait uniquement de application.overview
    pour la mienne on pourrait mettre rng en public et mettre une condition sur nothing et faire sauter la boucle si elle a deja été efectuée avant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Salut Patrick,

    J'ai bien noté ta solution.

    Ps : Bonjour à Theze.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 5
    Par défaut
    Toutes les solutions fonctionnaient mais c'est la solution de Theze que j'ai utilisée (en prenant un nombre de colonnes que je suis sûr de ne jamais atteindre). Plus rapide que celle de Patrick qui tournait longtemps avant de m'afficher les colonnes souhaitées. Votre solution était encore plus rapide sur la réactivité après clic Eric, mais plus longue à mettre en oeuvre (relance de la macro pour masquer les colonnes, affichage personnalisé, enregistrement de macro...).

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par andrewm Voir le message
    Merci pour votre retour et bravo Theze.

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    a voir avec les timer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub masquer_afficher()
        Dim rng As Range
        t = Timer
        Application.ScreenUpdating = False
        For i = 7 To 500 Step 2
            If rng Is Nothing Then Set rng = Cells(1, i) Else Set rng = Union(rng, Cells(1, i))
        Next
        rng.EntireColumn.Hidden = Not rng.EntireColumn.Hidden    'boulboul
        MsgBox "temps d'execution :" & Timer - t
        Application.ScreenUpdating = True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub masquergranu2()
        Dim col%
        t = Timer
        Application.ScreenUpdating = False
        For col = 7 To 500 Step 2
            Columns(col).Hidden = Not Columns(col).Hidden
        Next col
        MsgBox "temps d'execution :" & Timer - t
        Application.ScreenUpdating = True
    End Sub
    la solution de theze moins gourmante en memoire certainement mais temps identiques
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Toujours avoir le réflexe d'éviter (en faire l'économie) une condition If (en boucle) avec Union lorsque l'on sait établir une plage de départ -->> la procédure de patricktoulon devient alors ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub masque(boulboul)
     Dim rng As Range
     Set rng = Columns(7)
     For i = 9 To 500 Step 2
      Set rng = Union(rng, Columns(i))
     Next
     rng.EntireColumn.Hidden = boulboul
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/05/2014, 12h38
  2. VB.Net 2008 Express ComboBox qui cache une colonne sur deux.
    Par angelevil dans le forum Windows Mobile
    Réponses: 6
    Dernier message: 12/01/2009, 03h22
  3. Highlight une colonne sur deux
    Par ThierryLefort dans le forum BIRT
    Réponses: 11
    Dernier message: 18/09/2008, 15h16
  4. Réponses: 2
    Dernier message: 13/12/2007, 16h56
  5. Réponses: 4
    Dernier message: 23/12/2006, 16h55

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