Compilation de 2 macros de masquage/affichage de colonnes/lignes

Bonjour amis programmeurs,

Je suis toujours novice dans les macros, et c'est pourquoi j'ai encore besoin de vous. Maintenant que j'ai réussi à mettre en place sur la feuille d'un classeur une macro pour afficher des colonnes et en masquer d'autres selon la valeur d'une liste déroulante, mon souhait est de réaliser la même macro sur la même feuille pour afficher ou masquer des groupes de lignes en fonction de la valeur d'une 2e liste déroulante. Ces groupes de lignes seraient en fait des tableaux (mises en forme de tableaux, donc désignation de lignes sous le nom du tableau dans la macro), qui correspondent à des catégories (d'où le nom de la liste déroulante associée).

Mon problème, c'est que la compilation des 2 macros ne fonctionne pas. Je sais que seule, la première macro fonctionne très bien, mais quand je rajoute la 2e à la suite, avec ma "logique", ca ne fonctionne pas. Voici le code :

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Address = "$C$1" Then
        Columns("H:BO").Hidden = True
        Select Case Target.Value
            Case Sheets("DEVIS").Range("A10")
                Columns("H:I").Hidden = False
            Case Sheets("DEVIS").Range("A11")
                Columns("J:K").Hidden = False
            Case Sheets("DEVIS").Range("A12")
                Columns("L:M").Hidden = False
            Case Sheets("DEVIS").Range("A13")
                Columns("N:O").Hidden = False
            Case Sheets("DEVIS").Range("A14")
                Columns("P:Q").Hidden = False
            Case Sheets("DEVIS").Range("A15")
                Columns("R:S").Hidden = False
            Case Sheets("DEVIS").Range("A16")
                Columns("T:U").Hidden = False
            Case Sheets("DEVIS").Range("A17")
                Columns("V:W").Hidden = False
            Case Sheets("DEVIS").Range("A18")
                Columns("X:Y").Hidden = False
            Case Sheets("DEVIS").Range("A19")
                Columns("Z:AA").Hidden = False
            Case Sheets("DEVIS").Range("A20")
                Columns("AB:AC").Hidden = False
            Case Sheets("DEVIS").Range("A21")
                Columns("AD:AE").Hidden = False
            Case Sheets("DEVIS").Range("A22")
                Columns("AF:AG").Hidden = False
            Case Sheets("DEVIS").Range("A23")
                Columns("AH:AI").Hidden = False
            Case Sheets("DEVIS").Range("A24")
                Columns("AJ:AK").Hidden = False
            Case Sheets("DEVIS").Range("A25")
                Columns("AL:AM").Hidden = False
            Case Sheets("DEVIS").Range("A26")
                Columns("AN:AO").Hidden = False
            Case Sheets("DEVIS").Range("A27")
                Columns("AP:AQ").Hidden = False
            Case Sheets("DEVIS").Range("A28")
                Columns("AR:AS").Hidden = False
            Case Sheets("DEVIS").Range("A29")
                Columns("AT:AU").Hidden = False
            Case Sheets("DEVIS").Range("A30")
                Columns("AV:AW").Hidden = False
            Case Sheets("DEVIS").Range("A31")
                Columns("AX:AY").Hidden = False
            Case Sheets("DEVIS").Range("A32")
                Columns("AZ:BA").Hidden = False
            Case Sheets("DEVIS").Range("A33")
                Columns("BB:BC").Hidden = False
            Case Sheets("DEVIS").Range("A34")
                Columns("BD:BE").Hidden = False
            Case Sheets("DEVIS").Range("A35")
                Columns("BF:BG").Hidden = False
            Case Sheets("DEVIS").Range("A36")
                Columns("BH:BI").Hidden = False
            Case Sheets("DEVIS").Range("A37")
                Columns("BJ:BK").Hidden = False
            Case Sheets("DEVIS").Range("A38")
                Columns("BL:BM").Hidden = False
            Case Sheets("DEVIS").Range("A39")
                Columns("BN:BO").Hidden = False
            Case Is <> ""
                Columns("H:BO").Hidden = True
        End Select
    If Target.Address = "$C$2" Then
        Raws("Tableau_TARIFS_SOCODA").Hidden = True
        Raws("Tableau_TARIFS_HRANIPEX").Hidden = True
        Select Case Target.Value
            Case Sheets("OUVRAGES").Range("C2")
                Raws("Tableau_TARIFS_SOCODA").Hidden = False
            Case Sheets("OUVRAGES").Range("C3")
                Raws("Tableau_TARIFS_HRANIPEX").Hidden = False
            Case Is <> ""
                Columns("H:BO").Hidden = True
        End Select
    End If
End Sub

Si quelqu'un pouvait donc me donner la bonne formule pour compiler parfaitement les 2 macros, ce serait le top. Pour plus de compréhension, je joins le fichier en question, en analysant les différentes pages et en visualisant le codevous devriez comprendre le principe (le but de ce fichier est de créer une trame de chiffrage, pour le préciser quand même) et ce que je souhaite faire.

29trame-devis-2-1.xlsm (111.90 Ko)

Bonjour,

Je suppose que la "deuxième" macro commence à :

 If Target.Address = "$C$2" Then

Dans cette partie, Raws correspond à quoi ?

Bonjour AlgoPlus,

"Raws" correspond aux lignes des tableaux formatés, d'après mes recherches sur internet et différents forums, c'est comme ça qu'il m'a semblé qu'il fallait faire.

Bonjour,

Désolé de paraître chiant,

Mais quelqu'un saurait-il m'aider dans mon problème? ...

Cordialement

L'aide excel est parfois bien utile!

Raws n'est pas une fonction VBA. Il faudrait utiliser Rows

Dans:

Raws("Tableau_TARIFS_SOCODA").Hidden = True

Que représente "Tableau_TARIFS_SOCODA".?

Ce n'est ni une plage nommée, ni un tableau structuré (du moins pas dans le classeur joint). Dans cette situation ce n'est qu'une chaine de caractères inexploitable.

Si c'est une plage nommée, il aurait fallu:

Range("Tableau_TARIFS_SOCODA").Rows.Hidden = True

Bonjour Algoplus,

"Tableau_TARIFS_SOCODA" est une connexion avec un tableau d'un autre fichier. Je ne voulais pas que toutes les bases de données des différents fournisseurs se retrouvent sur le même fichier, pour une meilleure gestion des mises à jours de tarifs.

Le problème de compilation des 2 macros viendrait donc de ce problème de dénomination?

Je viens de remplacer les dénominations dont tu m'a parlé, mais maintenant quand j'essaie de lancer la macro j'ai le message suivant : "Erreur de compilation : Bloc If sans End If"

Voila le code modifié :

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Address = "$C$1" Then
        Columns("H:BO").Hidden = True
        Select Case Target.Value
            Case Sheets("DEVIS").Range("A10")
                Columns("H:I").Hidden = False
            Case Sheets("DEVIS").Range("A11")
                Columns("J:K").Hidden = False
            Case Sheets("DEVIS").Range("A12")
                Columns("L:M").Hidden = False
            Case Sheets("DEVIS").Range("A13")
                Columns("N:O").Hidden = False
            Case Sheets("DEVIS").Range("A14")
                Columns("P:Q").Hidden = False
            Case Sheets("DEVIS").Range("A15")
                Columns("R:S").Hidden = False
            Case Sheets("DEVIS").Range("A16")
                Columns("T:U").Hidden = False
            Case Sheets("DEVIS").Range("A17")
                Columns("V:W").Hidden = False
            Case Sheets("DEVIS").Range("A18")
                Columns("X:Y").Hidden = False
            Case Sheets("DEVIS").Range("A19")
                Columns("Z:AA").Hidden = False
            Case Sheets("DEVIS").Range("A20")
                Columns("AB:AC").Hidden = False
            Case Sheets("DEVIS").Range("A21")
                Columns("AD:AE").Hidden = False
            Case Sheets("DEVIS").Range("A22")
                Columns("AF:AG").Hidden = False
            Case Sheets("DEVIS").Range("A23")
                Columns("AH:AI").Hidden = False
            Case Sheets("DEVIS").Range("A24")
                Columns("AJ:AK").Hidden = False
            Case Sheets("DEVIS").Range("A25")
                Columns("AL:AM").Hidden = False
            Case Sheets("DEVIS").Range("A26")
                Columns("AN:AO").Hidden = False
            Case Sheets("DEVIS").Range("A27")
                Columns("AP:AQ").Hidden = False
            Case Sheets("DEVIS").Range("A28")
                Columns("AR:AS").Hidden = False
            Case Sheets("DEVIS").Range("A29")
                Columns("AT:AU").Hidden = False
            Case Sheets("DEVIS").Range("A30")
                Columns("AV:AW").Hidden = False
            Case Sheets("DEVIS").Range("A31")
                Columns("AX:AY").Hidden = False
            Case Sheets("DEVIS").Range("A32")
                Columns("AZ:BA").Hidden = False
            Case Sheets("DEVIS").Range("A33")
                Columns("BB:BC").Hidden = False
            Case Sheets("DEVIS").Range("A34")
                Columns("BD:BE").Hidden = False
            Case Sheets("DEVIS").Range("A35")
                Columns("BF:BG").Hidden = False
            Case Sheets("DEVIS").Range("A36")
                Columns("BH:BI").Hidden = False
            Case Sheets("DEVIS").Range("A37")
                Columns("BJ:BK").Hidden = False
            Case Sheets("DEVIS").Range("A38")
                Columns("BL:BM").Hidden = False
            Case Sheets("DEVIS").Range("A39")
                Columns("BN:BO").Hidden = False
            Case Is <> ""
                Columns("H:BO").Hidden = True
        End Select
    If Target.Address = "$C$2" Then
        Range("Tableau_TARIFS_SOCODA").Rows.Hidden = True
        Range("Tableau_TARIFS_HRANIPEX").Rows.Hidden = True
        Select Case Target.Value
            Case Sheets("OUVRAGES").Range("C2")
                Range("Tableau_TARIFS_SOCODA").Rows.Hidden = False
            Case Sheets("OUVRAGES").Range("C3")
                Range("Tableau_TARIFS_HRANIPEX").Rows.Hidden = False
            Case Is <> ""
                Range("Tableau_TARIFS_SOCODA").Rows.Hidden = True
                Range("Tableau_TARIFS_HRANIPEX").Rows.Hidden = True
        End Select
    End If
End Sub

A priori il n'y a pas de problème de compilation de deux macros. Il y a juste une partie de code qui ne fonctionne pas.

Vous avez déjà testé la première macro seule (If Target.Address = "$C$1" Then ... ?) et ça fonctionne.

Essayez de tester la deuxième seule ( If Target.Address = "$C$2" Then... ?) il y a toutes les chances(?) pour que ça ne fonctionne pas!

vous dites "Ca ne fonctionne pas", mais il y a certainement un message d'erreur (lequel ?) et une ligne de code surlignée en jaune (laquelle?)

"Tableau_TARIFS_SOCODA" est une connexion avec un tableau d'un autre fichier

"Tableau_TARIFS_SOCODA" n'est qu'une chaine de caractère qui ne fait référence à rien et même si ça pouvait fonctionner, quel intérêt de masquer les lignes d'un autre classeur ?

cet autre classeur est-il bien ouvert ?

Quand je teste la deuxième seule, ça marche aussi ^^ Mais quand je teste les 2 ensemble, le message suivant apparaît :

"Erreur de compilation : Bloc If sans End If"

et c'est la première ligne qui se surligne en jaune :

Private Sub Worksheet_Change(ByVal Target As Range)

Et pour l'utilité de la macro, en fait les classeurs fournisseurs servent uniquement à la mise à jour des tarifs. Je crée une connexion avec tous mes classeurs fournisseurs sur ce classeur la, car c'est sur celui-ci que je renseigne toutes mes quantités. Et donc quand à l'utilité de masquer des lignes de tableaux sur ce fichier, c'est parce que j'aurai des feuilles sur ce classeur qui comprendront une dizaine de tableaux comportant chacun une centaine de lignes. C'est donc pour une lecture et une utilisation plus ergonomiques, et éviter d'avoir à scroller sans arrêt.

Avec le message d'erreur ça va tout de suite mieux, mais j'aurais dû le voir puisque il manque un end if depuis le début:

Vous devriez avoir cette structure:

If Target.Address = "$C$1" Then
       .../...
End If   '<= celui qui manque à rajouter
If Target.Address = "$C$2" Then
      .../...
End If

Bonne suite

Super, merci à toi, ca marche niquel avec cette modification! j'étais pourtant persuadé qu'il ne devait y avoir qu'un Enf If! ^^

Rechercher des sujets similaires à "compilation macros masquage affichage colonnes lignes"