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 :

Afficher colonnes avec Workbook


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut Afficher colonnes avec Workbook
    Bonjour,

    Je cherche à réinitialiser une feuille Excel à son ouverture

    J'ai réussi à supprimer les filtres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
     With ThisWorkbook.Worksheets("Ma Feuille")
     If .FilterMode Then .ShowAllData
     End With
     End Sub
    Mais je n'y arrive pas pour les colonnes et/ou lignes masquées

    Merci de l'intérêt que vous y porterez

  2. #2
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour,

    Dans un nouveau classeur, masquez quelques colonnes.
    Puis lancez l'enregistreur de macros, sélectionnez toute la feuille, faîtes un clic droit sur les entêtes de colonnes et cliquez sur "Afficher".
    Arrêtez l'enregistreur de macros et allez voir le code qui a été créé.
    Vous pourrez alors nettoyez ce code pour obtenir ce que vous voulez.

    Réitérez avec les lignes si l'adaptation n'est pas évidente.

    Cela devrait vous permettre de trouver la bonne syntaxe

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci Ben_L de ton aide c'est très apprécié.

    je ne suis vraiment pas expert mais je tente d'apprendre à chaque fois.

    Le code qui ressort de la manipulation est

    Selection.EntireColumn.Hidden = False

    je ne sais pas trop comment l'appliquer dans le Workbook

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci Ben_L, je ne connaissais pas l'outil enregistreur de macro, cela m'a dirigé vers une réponse fonctionnel

    La voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
    With ThisWorkbook.Worksheets("Ma Feuille")
    If .FilterMode Then .ShowAllData
        Columns("A:ZZ").Select
        Selection.EntireColumn.Hidden = False
    End With
    End Sub

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Et plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Open()
    With ThisWorkbook.Worksheets("Billets 17-18")
    If .FilterMode Then .ShowAllData
        Columns("A:ZZ").Hidden = False
    End With
    End Sub

  6. #6
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Il est souvent plus pratique et plus rapide d'utiliser l'enregistreur de macros...
    Reste ensuite, effectivement, à apprendre à extraire la partie importante du code généré automatiquement.
    De façon générale, on peut dire que le plus important pour nettoyer le code de l'enregistreur, c'est de supprimer toutes les actions de sélection ainsi que les références aux objets actifs.

    Une autre remarque importante concernant le code que vous proposez ici : l'utilisation de Columns sans qualificateur (càd sans préciser la référence de l'objet auquel appartient cette méthode) est équivalente à l'appel ActiveSheet.Columns.
    Dans la mesure où vous appelez la méthode Columns à l'intérieur d'un With qui fait référence à la feuille qui vous intéresse, il serait préférable d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Open()
        With ThisWorkbook.Worksheets("Billets 17-18")
            If .FilterMode Then .ShowAllData
            .Columns.Hidden = False
            .Rows.Hidden = False
        End With
    End Sub

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup Ben_L

    Comment puis-je appliquer ce code à l'ensemble du classeur? Car tel quel si le classeur n'ouvre pas et donc n'a pas été sauvegardé sur l'onglet "Billet 17-18" la macro ne s'exécute pas.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Bonjour

    Voici ce que j'essaie sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
     
    Dim Ws As Worksheet
     
    For Each Ws In ThisWorkbook.Worksheets
             If .FilterMode Then .ShowAllData
                .Columns.Hidden = False
                .Rows.Hidden = False
     
    Next Ws
    End Sub

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    évite s'il te plait ce genre d'expression :
    Voici ce que j'essaie sans succès
    alors que tu as un message d'erreur. C'est le message reçu et la ligne en cause, qu'il faut rapporter, pas simplement que tu as "essayé sans succès" !

    Les "." devraient correspondre à un bloc With que tu n'utilises pas !
    Remplace-les par "Ws."
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci unparia

    Code utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_Open()
     
    Dim Ws As Worksheet
     
    For Each Ws In ThisWorkbook.Worksheets
             If Ws.FilterMode Then Ws.ShowAllData
                Ws.Columns.Hidden = False
                Ws.Rows.Hidden = False
    Next Ws
    End Sub
    Génère l'erreur

    Erreur d'exécution '1004':
    Impossible de définir la propriété Hidden de la classe Range

  11. #11
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour Gonteur,

    Impossible pour moi de reproduire cette erreur, qui est probablement liée au contenu de votre classeur.
    Si j'en crois le post disponible à ce lien, le problème provient :
    1. soit de la présence de commentaires dans certaines cellules,
    2. soit de la présence d'objet dessinés qui ne sont pas redimensionnés avec les cellules,
    3. soit d'une protection appliquée au classeur ou à l'une des feuilles.

    La 3ème solution paraît peu probable (j'imagine que si votre classeur était protégé, vous seriez au courant...).

    Dans l'idéal, commencez par identifier la cause réelle du problème.
    Il sera ensuite possible d'envisager une solution de contournement.

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    La 3ème solution paraît peu probable (j'imagine que si votre classeur était protégé, vous seriez au courant...).
    Salut Ben !

    C'est souvent celle-ci à penser en premier !     Surtout avec l'erreur 1004 …

    ___________________________________________________________________________________________________________
    Je suis Paris, Mogadicio, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci à vous,

    Oui, effectivement certaines feuilles sont protégées et provoquait l'erreur..

    Ce code est fonctionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
       Dim Sh As Worksheet
       For Each Sh In Sheets
            Sh.Unprotect
           If Sh.FilterMode Then Sh.ShowAllData
           Sh.Cells.Rows.Hidden = 0:  Sh.Cells.Columns.Hidden = 0
       Next
    End Sub
    Comment soustraire les feuilles protéger de cette vérification car je ne veux pas que leur contenu soit modifiés par le code? Soit qu'à l'ouverture le code s'applique à toutes les feuilles non protégées?

    Merci!

  14. #14
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    La vérification que souhaitez faire peut s'effectuer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
        Dim Sh As Worksheet
        For Each Sh In Sheets
            If Not Sh.ProtectContents Then
                If Sh.FilterMode Then Sh.ShowAllData
                Sh.Cells.Rows.Hidden = 0:  Sh.Cells.Columns.Hidden = 0
            End If
        Next
    End Sub

  15. #15
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 136
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup Ben_L, Marc-L & unparia

    Tout est ok

    Votre aide est très apprécié

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

Discussions similaires

  1. Afficher plusieurs colonnes avec fonction MAX
    Par koolshenntm dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/07/2014, 15h28
  2. Masquer/afficher colonne automatiquement avec condition
    Par sebing dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/09/2010, 20h21
  3. afficher des elements en colonne avec un height ?!
    Par oceane751 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 21/08/2009, 23h49
  4. [Visual Web] Afficher une colonne avec une image
    Par david71 dans le forum NetBeans
    Réponses: 1
    Dernier message: 05/12/2007, 16h20
  5. [XPath] Afficher données en colonnes avec bris
    Par iDaaX dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/12/2006, 20h54

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