Macro masquer colonnes - valeur cellule

Résolu
gber1 Messages postés 45 Statut Membre -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

J'aimerais que quelqu'un me réfère une macro qui me permettrait de masquer des colonnes en fonction de la valeur d'une cellule de la feuille.

Par exemple, j'ai une feuille qui possède un tableau de 30 colonnes représentant des années, l'année 1 débutant à la colonne Q.

Je voudrais que les colonnes des années supérieures à la valeur de la cellule H13 soient masquées. Donc si la valeur de H13 est de 8, je voudrais que les colonnes Y à AT soient cachées.

Merci de bien vouloir m'aider

Gilles

7 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Colles ce code dans un module et associe le à un bouton

    Sub colonne ()
    'MasquerColonnes
    Dim i As Variant
    Application.ScreenUpdating = False
    [Q1:AT1].EntireColumn.Hidden = False
    For col = 17 To 47
    With Feuil1.Cells(1, col)
    If .Value > [H13] Then Columns(col).Hidden = True
    End With
    Next col
    Application.ScreenUpdating = True
    End Sub
    0
    1. gber1 Messages postés 45 Statut Membre 1
       
      Merci Mike-31,

      mais ça ne fonctionne pas. Je n'ai peut-être pas été assez précis !

      Mon fichier contient 40 onglets et je voudrais que chacun des onglets soit indépendant un de l'autre, de telle sorte que la cellule H13 d'un onglet déclenche le masquage des colonnes de cet onglet.

      Donc je crois que je ne peux pas mettre la macro dans un module et je ne veux pas associer celle-ci à un bouton mais plutôt au contenu de cellule H13.

      J'espère être compréhensible

      Gilles
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    non, le code que je t'ai donné est applicable dans toutes les feuilles, il suffit de le coller dans un module (Alt et touche F11) ou clic droit sur l'onglet de feuille concernée/Visualiser le code, Insérer un module et coller le code

    Sub colon()
    'MasquerColonnes
    Dim i As Variant
    Application.ScreenUpdating = False
    [Q1:AT1].EntireColumn.Hidden = False
    For col = 17 To 47
    With Feuil1.Cells(1, col)
    If .Value > [H13] Then Columns(col).Hidden = True
    End With
    Next col
    Application.ScreenUpdating = True
    End Sub

    ensuite à partir de la barre d'outils formulaire (affichage/Barre d'outils/Formulaire) créer un bouton et Associer à la macro
    ou encore avec la barre contrôle du Visual Basic créer un commanButton
    dans ce cas le contrôle du bouton sera dans les propriétés de la feuille, coller le nom de la macro "colon" exemple

    Private Sub CommandButton1_Click()
    colon
    End Sub

    ou tu optes pour un déclenchement automatique lorsque la valeur de la cellule H13 change, dans ce cas , dans la propriété de la feuille tu colles ce code qui fait référence à la macro colon

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$13" Then
    colon
    End If
    End Sub

    tu répètes l'option retenue dans la propriété de tes feuilles, qui utiliseront le même code "colon"

    si tu as besoin d'un exemple on verra ça demain
    0
    1. gber1 Messages postés 45 Statut Membre 1
       
      Merci de t'occuper de moi Mike-31

      Je crois avoir suivi ta procédure mais j'ai probablement mal fait quelque chose puisque ça ne fonctionne pas.

      J'aimerais t'envoyer mon fichier mais je ne sais pas comment joindre un fichier à un "post"
      0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Pour joindre un fichier, s'il ne contient pas de note confidentielles soit dans un post ou dans un message perso en cliquant sur le pseudo du membre à qui tu souhaites l'envoyer
    clic sur ce lien/Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille
    0
    1. gber1 Messages postés 45 Statut Membre 1
       
      Excuses mon ignorance mais lorsque je clique sur ton pseudo (Mike-31), je suis dirigé sur ton profil d'où je ne vois pas où je peux faire "clic sur ce lien/Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille "

      Bye

      Gilles
      0
  4. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Excuse, j'ai oublié de mettre le lien.
    Donc clic sur ce lien

    https://www.cjoint.com/

    et /Parcourir pour sélectionner le fichier/Créer le lien/Autoriser l'accès et colle le lien généré en haut de la feuille
    soit sur un post ou sur un message privé, dans ce cas clic sur le pseudo du membre à qui tu souhaites l'envoyer et message privé
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Remplace le code sur le module par celui ci

    Sub colon()
    'MasquerColonnes
    Dim i As Variant
    Application.ScreenUpdating = False
    [Q1:AT1].EntireColumn.Hidden = False
    For col = 17 To 47
    With Cells(8, col)
    If .Value > [H13] Then Columns(col).Hidden = True
    End With
    Next col
    Application.ScreenUpdating = True
    End Sub

    Par contre si tu souhaites afficher les colonnes, il y a un problème avec la Validation que tu as limité à 20, ce qui limite l'utilisation de la macro à 20

    le code si dessus masque toute le colonnes de Q à At si en H13 il n'y a aucune valeur, si tu saisis 20 s'affichent les colonnes dont la valeur est inférieure ou égale à 20 et le colonnes avec valeur supérieure à 20 reste masquées et ne peuvent et inaccessible du à la validation

    ou on ajoute une ligne par exemple si H13 est vide on affiche toute les lignes, avec ce code

    Sub colon()
    'MasquerColonnes
    Dim i As Variant
    Application.ScreenUpdating = False
    [Q1:AT1].EntireColumn.Hidden = False
    For col = 17 To 47
    With Cells(8, col)
    If .Value > [H13] Then Columns(col).Hidden = True
    If [H13] = "" Then Columns(col).Hidden = False
    End With
    Next col
    Application.ScreenUpdating = True
    End Sub

    ou tu modifies la Validation et tu sélectionnes Avertissement à la place d'Arrêt sur l'onglet Alerte d'erreur

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. gber1 Messages postés 45 Statut Membre 1
       
      Merci mille fois, pour tous tes bons conseils.

      Tout fonctionne à merveille, encore merci

      Gilles
      0
  7. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Content de t'avoir rendu service.

    J'y pense dans la cellule H13, à la place de mettre une restriction limitant la saisie à 20, tu peux faire une liste de validation dans source saisis
    =$Q$8:$AJ$8
    0