Compilation de 2 macros de masquage/affichage de colonnes/lignes Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 3 avril 2019, 19:40

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.
TRAME DEVIS 2.1.xlsm
(111.9 Kio) Téléchargé 8 fois
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 744
Appréciations reçues : 61
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 4 avril 2019, 11:27

Bonjour,

Je suppose que la "deuxième" macro commence à :
 If Target.Address = "$C$2" Then
Dans cette partie, Raws correspond à quoi ?
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 4 avril 2019, 20:03

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.
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 9 avril 2019, 20:14

Bonjour,

Désolé de paraître chiant,

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

Cordialement
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 744
Appréciations reçues : 61
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 10 avril 2019, 10:33

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
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 10 avril 2019, 10:57

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?
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 10 avril 2019, 11:03

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
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 744
Appréciations reçues : 61
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 10 avril 2019, 11:13

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 ?
B
BaptisteO
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 19 décembre 2018
Version d'Excel : Excel 365

Message par BaptisteO » 10 avril 2019, 11:28

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.
A
AlgoPlus
Membre dévoué
Membre dévoué
Messages : 744
Appréciations reçues : 61
Inscrit le : 27 février 2019
Version d'Excel : 2007

Message par AlgoPlus » 10 avril 2019, 11:46

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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message