Macros pour masquer des colonnes selon critère

Résolu
Dddiaz -  
Dddiaz Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je voudrais masquer plusieurs colonnes dans une feuille selon critères d'une autre feuille du même classeur.
Bonjour,

J'ai fait un fichier "Devis" pour mon épouse qui est couturière.
Ce fichier comporte plusieurs onglets. "Fiche Technique" Et "Devis"
Maintenant je voudrais si c17 de fiche technique comporte "Store" que les colonnes H et I soit masquer dans la feuille "Devis".
La même chose lorsqu'il est marquer "Rideaux" toujours en c17 de la fiche technique mais que les colonnes G et I soit masquer de la feuille "Devis"
Et enfin toujours C17 "Overgordijn" mais cette fois les colonnes G et H soit masquer.

Chaque macro commandés par un bouton respectivement "Store" "Rideaux" "Overgordijn".

PS: je commence tout doucement an VBA mais ça c'est encore un peu trop difficile pour moi.

En vous remerciant de votre aide.

7 réponses

  1. benol3 Messages postés 718 Statut Membre 87
     
    Salut,

    Tu peux te servir de l'enregistreur de macro pour apprendre le VBA...

    Voici comment masquer/afficher des colonnes :
    Column("H:J").hide 'Masque les colonnes de H à J
    Column("H:J").show 'Affiche les colonnes de H à J 


    Ensuite, il suffiet juste e teste la valeur en C17 avec un SI (IF en vba) comme ceci :
     IF range("C17").value="Devis" THEN
    'On masque les colonnes
    End if


    Fais attention, si C17 et les colonnes à masquer sont dans des feuilles dfférentes, il faut preciser le nom de la feuille devant le nom de ta colonne/cellule

    Exemple :
    sheets("feuil1").range("C17")
    Sheets("Devis").column("H:J")


    Pourquoi utiliser un bouton pour chaque cas ? Faire un programme qui se déclenche à chaque modifcation de C17 traitant tous les cas , serait plus approprié...
    0
  2. Dddiaz Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonjour Benol 3

    En effet serait plus approprier de faire une macro qui se déclenche automatiquement.
    L'enregistreur de macro, j'ai déjà utiliser pour des truc simple, mais pour faire ça je ne sais pas trop comment m'y prendre.
    feuille "Fiche technique" en C17: soit
    1° "Store" alors les colonnes H et I doivent disparaître dans le feuille "Devis"
    2° "Rideaux" alors les colonnes G et I doivent disparaître dans la feuille "Devis"
    3° "Overgordijn" alors les colonnes G et H doivent disparaître dans la feuille "Devis"

    D'avance merci de votre temps
    0
  3. benol3 Messages postés 718 Statut Membre 87
     
    Re,

    A mettre dans le code de la feuille "Fiche technique"

    Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.Address="$C$17" Then 'Après chaque modification de la cellule C17
    
    'Affiche toutes les colonnes déjà masquées dans la feuille Devis
    sheets("Devis").column("G:J").show
    
    'Masque les colonnes en fonction de la valeur de C17       
    SELECT case range("C17").value
           Case "Devis" : sheets("Devis").column("H:J").hide
           Case "Rideaux" : sheets("Devis").column("G:I").hide
           Case "Overgordijn" : sheets("Devis").column("G:H").hide
    END SELECT
    
    End If
    End Sub


    Il se peut qu'il y ai des erreurs dans le code, je ne l'ai pas testé... Redonne moi le message d'erreur et la ligne de code qui pose problème...

    N'hésite pas à me poser des questions si tu ne comprends pas le code
    0
  4. Dddiaz Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonsoir,

    J'ai effectivement un message d'erreur.
    Erreur d'exécution(9)
    L'indice n'appartient pas a la sélection.

    Voici le lien de mon fichier.

    https://www.cjoint.com/c/EBuwjR3l2tb

    Je comprend assez bien le code, j'ai juste mis les noms des onglet correcte. malgré ça j'ai encore le code d'erreur.

    Bien à toi
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maurice
     
    Bonjour

    Modification de ta Macro
    Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = "$C$17" Then 'Après chaque modification de la cellule C17
       'Affiche toutes les colonnes déjà masquées dans la feuille Cible
          With Sheets(Feuil3.Name)
              .Cells.EntireColumn.Hidden = False
          'Masque les colonnes en fonction de la valeur de C17
             Select Case Range("C17").Value
                Case "Store"
                   .Columns("H:J").EntireColumn.Hidden = True
                Case "Rideaux"
                   .Columns("G:I").EntireColumn.Hidden = True
                Case "Overgordijn"
                   .Columns("G:H").EntireColumn.Hidden = True
             End Select
             .Range("A1").Select
          End With
       End If
    End Sub
    

    A+
    Maurice
    0
  7. Dddiaz Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   1
     
    Bonsoir,

    Cela commence a fonctionner sauf que pour "Rideaux" il me masque les colonnes de (G) a (I) alors que la colonne (H) devrais rester visible.

    Pas grand chose, je suppose, a modifier.
    0
  8. Dddiaz Messages postés 33 Date d'inscription   Statut Membre Dernière intervention   1
     
    Re,

    j'ai trouver pour sectionner 2 colonnes non adjacente il faut remplacer Columns ("G:I") Par Range ("G:G, I:I"). un bon début non :).

    Encore merci a vous deux Benol3 et Maurice.

    Bien à vous.
    0