Menu

Liste déroulante et colonnes masquées [Résolu]

lilas - 18 mai 2017 à 16:12 - Dernière réponse :  lilas
- 19 mai 2017 à 15:25
Bonjour,

J'ai une liste déroulante (dans la cellule B16 de ma feuille "Structure") où 15 choix sont possibles.

Si on choisit le choix 1, certaines colonnes sont masquées.

Le problème est le suivant: dès que je clique sur choix 1 ou 2 ou ..., le code ne fonctionne pas je dois à chaque fois re exécuter la macro en question pour que les colonnes voulues soient masquées.

Voilà mon code:

Sub nb_t()

If Sheets("Structure").Range("B16") = "1" Then
Sheets("Méthode Exposition").Columns("R:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("R:DI").Hidden = False
End If

End Sub
Sub nb_t2()

If Sheets("Structure").Range("B16") = "2" Then
Sheets("Méthode Exposition").Columns("Y:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("Y:DI").Hidden = False
End If

End Sub

Sub nb_t3()

If Sheets("Structure").Range("B16") = "3" Then
Sheets("Méthode Exposition").Columns("AF:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("AF:DI").Hidden = False
End If

End Sub

Sub nb_t4()

If Sheets("Structure").Range("B16") = "4" Then
Sheets("Méthode Exposition").Columns("AM:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("AM:DI").Hidden = False
End If

End Sub

Sub nb_t5()

If Sheets("Structure").Range("B16") = "5" Then
Sheets("Méthode Exposition").Columns("AT:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("AT:DI").Hidden = False
End If

End Sub

Sub nb_t6()

If Sheets("Structure").Range("B16") = "6" Then
Sheets("Méthode Exposition").Columns("BA:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("BA:DI").Hidden = False
End If

End Sub

Sub nb_t7()

If Sheets("Structure").Range("B16") = "7" Then
Sheets("Méthode Exposition").Columns("BH:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("BH:DI").Hidden = False
End If

End Sub

Sub nb_t8()

If Sheets("Structure").Range("B16") = "8" Then
Sheets("Méthode Exposition").Columns("BO:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("BO:DI").Hidden = False
End If

End Sub

Sub nb_t9()

If Sheets("Structure").Range("B16") = "9" Then
Sheets("Méthode Exposition").Columns("BV:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("BV:DI").Hidden = False
End If

End Sub

Sub nb_t10()

If Sheets("Structure").Range("B16") = "10" Then
Sheets("Méthode Exposition").Columns("CC:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("CC:DI").Hidden = False
End If

End Sub

Sub nb_t11()

If Sheets("Structure").Range("B16") = "11" Then
Sheets("Méthode Exposition").Columns("CJ:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("CJ:DI").Hidden = False
End If

End Sub

Sub nb_t12()

If Sheets("Structure").Range("B16") = "12" Then
Sheets("Méthode Exposition").Columns("CQ:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("CQ:DI").Hidden = False
End If

End Sub

Sub nb_t13()

If Sheets("Structure").Range("B16") = "13" Then
Sheets("Méthode Exposition").Columns("CX:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("CX:DI").Hidden = False
End If

End Sub

Sub nb_t14()

If Sheets("Structure").Range("B16") = "14" Then
Sheets("Méthode Exposition").Columns("DE:DI").Hidden = True
Else: Sheets("Méthode Exposition").Columns("DE:DI").Hidden = False
End If

End Sub

Sub nb_t15()

If Sheets("Structure").Range("B16") = "15" Then
Sheets("Méthode Exposition").Columns("K:DI").Hidden = False
Else: Sheets("Méthode Exposition").Columns("K:DI").Hidden = False
End If

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45


Comment faire ?? Merci d'avance
Afficher la suite 

3 réponses

Répondre au sujet
ThauTheme 4338 Messages postés mardi 21 octobre 2014Date d'inscription 6 septembre 2017 Dernière intervention - 18 mai 2017 à 17:35
0
Utile
Bonjour Lilas, bonjour le forum,

Essaie avec la macro événementielle Change à placer dans l'onglet Structure :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim O As Worksheet
Dim CD As Integer
Dim CL As String

Set O = Worksheets("Méthode Exposition")
If Target.Address <> "$B$16" Then Exit Sub
CD = IIf(Target.Value = "1", 18, 18 + (CInt(Target.Value) - 1) * 7)
CL = Split(Columns(CD).Address(0, 0), ":")(0)
O.Columns.Hidden = True
O.Columns(CL & ":DI").Hidden = False
If Target.Value = "15" Then
    O.Columns.Hidden = True
    O.Columns("K:DI").Hidden = False
End If
End Sub

C'est plus court mais normalement tout aussi efficace (si je ne me suis pas planté)...
Commenter la réponse de ThauTheme
jordane45 20652 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 26 avril 2018 Dernière intervention - 18 mai 2017 à 17:36
0
Utile
Bonjour,

Dans ton fichier excel, tu peux déclencher l'appel à une macro en utilisant Private Sub Worksheet_Change(ByVal Target As Range)

NB: Code à placer dans l'objet Worsheet correspondant ....


Un truc du genre :
Private Sub Worksheet_Change(ByVal Target As Range)

  If Target.Address = "$B$16" Then
       ' de là .. tu peux appeller ton code pour afficher/masquer tes colonnes
        Dim sh_b16 As Worksheet
        Dim sh_expo As Worksheet
        Dim b16Val As Integer
        Dim colVisible As String
        
        'Définit la taille du tableau
         Dim listCol(15) As String
        
         'Alimente les éléments du tableau (dans l'ordre des valeurs de la liste déroulante...)
         listCol(0) = "R:DI"
         listCol(1) = "Y:DI"
         listCol(2) = "AF:DI"
         listCol(3) = "AM:DI"
         'etc...
         
         'maintenant on affiche toutes les colonnes par défaut
         Set sh_expo = Worksheets("Méthode Exposition")
         For i = 0 To UBound(listCol)
          If listCol(i) <> "" Then
            sh_expo.Columns(col) = True
          End If
         Next
         
         'On affiche les colonnes voulues en fonction du choix en b16
          Set sh_b16 = Worksheets("Structure")
          sh_expo.Columns(sh_b16.Range("B16").Value - 1) = True
         
   End If
End Sub

Commenter la réponse de jordane45
0
Utile
un grand merci à vous deux :)
Commenter la réponse de lilas