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 :

Masquer colonnes sur condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Traductrice
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Traductrice

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut Masquer colonnes sur condition
    Bonjour !

    Me revoici, avec une nouvelle question à laquelle je suis sûre que la solution est très simple... mais elle m'échappe.

    J'ai enregistré une macro qui masque des colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub SourceFR_CibleEN_MasquerColonnes()
    '
    ' SourceFR_CibleEN_MasquerColonnes Macro
    ' Dans l'onglet de destination, masque les colonnes qui ne sont pas FR & EN.
    '
     
    '
        Sheets("A").Select
        Columns("D:E").Select
        Selection.EntireColumn.Hidden = True
    End Sub
    Le hic, c'est que j'ai besoin qu'elle s'active sous condition : uniquement lorsque l'utilisateur arrive sur l'onglet concerné depuis l'onglet "Synthèse FR&EN" (s'il arrive depuis un autre onglet, je devrai masquer d'autres colonnes).

    Par ailleurs, je ne suis pas sûre du meilleur endroit où enregistrer cette macro : sur le code de la feuille cible elle-même, ou sur la feuille "Synthèse FR&EN" ?

    Pas si simple, le VBA au tout début !
    Ingrid

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu peux te créer une variable qui se met à jour à la désactivation d'une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' dans un module Standard
    Public shAvant As Worksheet
     
    ' dans Thisworkbook
    Private Sub Workbook_SheetDeactivate(ByVal sh As Object)
        Set shAvant = sh
    End Sub
    Ensuite il te suffit de regarder shAvant.Name avec un Select Case par exemple pour savoir d'où tu viens et faire le traitement voulu.
    Ton code doit se trouver dans le Worksheet_Activate() de ta feuille
    eric

  3. #3
    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
    Ma manière de répondre et laisser s'y mettre (trop simple) --->>
    - Une variable publique nommée depuis, à laquelle tu attribues la feuille/onglet que tu ouvres (évènement activate de la feuille ouverte)
    - dans l'évènement activate de ta feuille "A" : -->>
    ----- si la variable depuis est la feuille Synthèse FR&EN, tu masques comme tu l'entends



    Si réactions différentes selon les feuilles -->> instruction Select case pour gérer les différents cas

    Voilà. A toi de t'y mettre un peu, quand même, sur ces bases très simples.

    EDIT : salut Eric. Croisés. J'ai quant à moi choisi d'orienter et de donner la recette, plutôt que de "remplir l'assiette"

  4. #4
    Membre à l'essai
    Femme Profil pro
    Traductrice
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Traductrice

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut
    Bonjour et merci à vous deux

    Je crois que vous surestimez très largement mon niveau, tous les deux... Explications :
    - je viens de passer 1h à chercher à quoi correspond la syntaxe "ShAvant", mais sans succès. Je suppose que cela signifie "Sheet avant", mais je ne sais pas à quoi doit ressembler une syntaxe avec cette condition.
    - j'ai donc essayé plusieurs versions de code, qui ne donnent rien. Le code proposé par Eric, même sans aucune modification, ne produit aucun résultat visible.

    J'ai ensuite passé pas mal de temps à essayer de comprendre la différence entre les différentes variables et leur emplacement.
    Du coup, j'en suis venue à penser que quelque chose comme ceci pourrait être pas mal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub testsuppression()
        Worksheets("Feuilb").Activate
        Columns("B:C").Select
        Selection.EntireColumn.Hidden = True
    End Sub
    Sauf que ça ne fonctionne pas du tout. Et je n'en suis même pas encore à déterminer une condition pour masquer les colonnes, juste à essayer de les masquer tout court. La macro fonctionne si je l'attribue à un objet (un bouton par exemple), mais pas automatiquement sur activation de l'onglet.

    Et je suis noyée... Il faut maintenant que je retourne m'occuper de mes enfants - et j'ai peur de ne pas réussir à avancer beaucoup si je continue à passer des heures pour capter les notions les plus simples ! Avez-vous un conseil pour les archi-débutants, un endroit où comprendre les syntaxes de base ? L'aide VBA est utile, mais pleine de termes qui renvoient à des connaissances dont je ne dispose pas.

    Unparia, en tant que prof, je ne peux que cautionner ton approche didactique - mais là je suis en train de couler dans le grand bain sans avoir eu de cours de natation avant... une petite bouée ne serait pas de refus !
    Eric : mille merci pour ces conseils précis.... mais qui sont déjà trop experts pour moi. Par exemple, le ShAvant est une syntaxe que je n'ai pas retrouvée sur l'aide VBA, seulement sur des forums d'aide qui parlent de filtrage et de tris de données, la syntaxe est donc différente (des plages et des conditions dont je n'ai pas besoin), et je n'ai pas réussi à en déduire la syntaxe "de base".

  5. #5
    Membre à l'essai
    Femme Profil pro
    Traductrice
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Traductrice

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Par défaut
    Encore une heure de macro grapillée à mes enfants - voici une proposition, mais qui ne fonctionne encore pas... Help ?

    Cette fois, j'essaie de modifier le paramétrage du texte sur désactivation de l'onglet précédent...

    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
    Private Sub Worksheet_DeActivate()
    ' masquerTexte Macro
    Sheets("A).Activate
    With Worksheets("A")
        Columns("C:F").Select
        Application.CutCopyMode = False
        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        With Selection.Font
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        Range("A1").Select
    End Sub
    J'ai l'impression de tourner en rond

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    ShAvant est juste le nom de la variable, tu la nommes comme tu veux, feuilPrécédente si tu préfères.
    VBA parait nébuleux au début. Il faut perséverer et au fil des semaines des déclics se produisent.
    Un doc pas mal pour commencer : http://bidou.developpez.com/article/VBA Cours VBA

    Première chose à faire : dans l'éditeur VBA 'Outils / Options' cocher 'Déclaration obligatoire des variables'
    Au début ça parait fastidieux, inutile et ch..., mais au final ça t'évite beaucoup d'erreurs parfois difficile à trouver.
    Donc déclare toutes tes variables, et types-les au plus près du besoin.
    Si tu as besoin d'un entier c'est As Long, pas As Double ou As variant qui fonctionneraient tout aussi bien.

    Ensuite, cherche des tutos sur les variables (type, portée, etc), et sur le débogage en VBA. C'est la base de beaucoup de chose et permet de mieux progresser.
    eric

Discussions similaires

  1. masquer colonnes selon conditions
    Par chouchouboy dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/10/2010, 19h39
  2. [VxiR2] masquer colonne sur webi
    Par amineman dans le forum Webi
    Réponses: 4
    Dernier message: 21/01/2009, 11h55
  3. Masquer des lignes sur condition
    Par marc56 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 06/03/2008, 02h11
  4. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01
  5. [Oracle] Update sur 1 colonne avec condition existence (SUBSTR)
    Par magic charly dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2006, 13h57

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