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 :

empêcher affichage de colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut empêcher affichage de colonnes
    Bonjour,

    Un petit problème : je voudrais empêcher l'affichage de colonnes masquées sans protéger une feuille. J'ai essayé diverses procédures événementielles qui provoquent toutes le même résultat qui n'est qu'une demie-réussite : quand l'utilisateur appelle l'affichage des colonnes, celles-ci apparaissent mais disparaissent dès qu'on essaie de choisir une cellule. Y aurait-il une solution pour qu'elles n'apparaissent pas du tout ?...

    Ci-dessous une procédure événementielle possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If ActiveCell.Address <> "" Then
            Columns("A:X").Hidden = True
        End If
        Cancel = True
    End Sub

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut Self-réponse... sûrement perfectible !
    Je viens de trouver une solution que j'indique pour ceux qui seraient intéressés par le problème. Ce n'est en fait qu'une manière détournée de le résoudre et je reste bien sûr en attente si quelqu'un a une autre idée !

    J'ai donc introduit la commande suivante dans la procédure événementielle (activation de la feuille) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = False
    Ceci bloque la commande "Format / Colonne / Afficher".

    Attention : ne pas oublier de remettre la valeur à True dans une procédure événementielle Deactivate pour retrouver la fonction d'affichage dans les autres feuilles du fichier.

  3. #3
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour kikou63,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set ici = Application.Intersect(Target, Range("A:X"))
    If Not ici Is Nothing Then Application.Goto Range("Y1")
    End Sub

    isabelle

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut Merci Isabelle
    Grâce à ta réponse, je viens de découvrir la méthode Intersect. Cela marche de manière fort efficace. En outre, en mettant la plage concernée en variable ceci ouvre bien des possibilités.

    La solution que je proposais fonctionne aussi fort bien tant que la procédure concerne une feuille. En revanche j'ai essayé de bloquer sur l'ensemble d'un fichier et cela génère une erreur 91. Aurais-tu (ou un autre lecteur de cet échange aurait-il) une idée sur la cause de cette erreur ?

  5. #5
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour kikou63,

    essai avec ce code sur la page de thisworkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Set ici = Application.Intersect(Target, Range("A:X"))
    If Not ici Is Nothing Then Application.Goto Range("Y1")
    End Sub
    isabelle

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut Ton code fonctionne sans problème
    Bonjour Isabelle,

    En fait ton premier code fonctionnait sans problème (le second aussi du reste). C'est l'utilisation de l'inhibition de la commande qui marche bien avec une procédure de type Worksheet.Activate (ou Deactivate), mais provoque une erreur 91 quand je l'utilise avec Workbook.Open (ou Deactivate).

  7. #7
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour kikou63,

    je ne comprend pas bien ce que tu veut dire,
    peut tu joindre un petit fichier exemple.

    isabelle

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 20
    Par défaut Exemple
    Bonjour Isabelle,

    Voici le code qui inhibe la commande d'affichage des colonnes dans la feuille où il est placé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Activate()
        CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = False
    End Sub
     
    Private Sub Worksheet_Deactivate()
        CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = True
    End Sub
    Quand un utilisateur accède à la feuille à laquelle l'événement est attaché, la commande d'affichage des colonnes est inactive (elle apparaît en grisée dans la liste Format/Colonne).

    En reprenant le même principe je place le code suivant dans ThisWorkbook et ceci génère une erreur d'exécution '91' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Deactivate()
        CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = True
    End Sub
     
    Private Sub Workbook_Open()
        CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = False
    End Sub

  9. #9
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour kikou63,

    avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        CommandBars(1).Controls("Format").Controls("Colonne").Controls("Afficher").Enabled = False
    End Sub
    par exemple si la colonne A est masquer, cela n'empeche pas l'utilisateur de faire un
    ctrl+t A1, ok
    alt+tol 10, ok

    isabelle

  10. #10
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 562
    Par défaut
    Bonjour

    Et pourquoi pas mettre le contenu de ces colonnes dans un autre onglet masqué ?

    Bricoler l'affichage des commandbars est toujours risqué car en cas de plantage, la situation n'est pas rétablie. De plus rien n'empêche l'utilisateur d'inhiber les macros ou d'utiliser des raccourcis ou barres d'outils persos pour contourner.

Discussions similaires

  1. Affichage par colonne
    Par Louison dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/02/2007, 16h34
  2. [Tableaux] Creation d'un affichage en colonne et ligne
    Par fabien14 dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2006, 13h19
  3. Réponses: 7
    Dernier message: 22/09/2006, 15h52
  4. Réponses: 10
    Dernier message: 20/03/2006, 16h11
  5. DBGrid et format d'affichage des colonnes
    Par jakouz dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2005, 14h10

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