Bug Macro VBA Masquer les tableaux en fonction du mois

Bonjour,

j'ai crée un fichier Excel avec un tableau par mois pour les 12 mois de l'année. Dans la cellule A1, j'ai crée une liste déroulante me permettant de renseigner le mois.

J'ai créer un code VBA qui permet de masquer tous les tableaux, sauf celui du mois en cellule A1. Voici le code :

Sub MasquerTableaux()
Dim mois As String
mois = Range("A1").Value

If mois = "Janvier" Then
Range("B2:BV45").EntireRow.Hidden = False
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Février" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = False
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Mars" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = False
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Avril" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = False
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Mai" Then
Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = False
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Juin" Then
Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = False
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Juillet" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = False
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Août" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = False
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Septembre" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = False
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Octobre" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = False
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Novembre" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = False
Range("B507:BV552").EntireRow.Hidden = True

ElseIf mois = "Décembre" Then

Range("B2:BV45").EntireRow.Hidden = True
Range("B46:BV91").EntireRow.Hidden = True
Range("B92:BV139").EntireRow.Hidden = True
Range("B140:BV183").EntireRow.Hidden = True
Range("B184:BV229").EntireRow.Hidden = True
Range("B230:BV276").EntireRow.Hidden = True
Range("B277:BV322").EntireRow.Hidden = True
Range("B323:BV368").EntireRow.Hidden = True
Range("B369:BV414").EntireRow.Hidden = True
Range("B415:BV460").EntireRow.Hidden = True
Range("B461:BV506").EntireRow.Hidden = True
Range("B507:BV552").EntireRow.Hidden = False

ElseIf mois = "Pas de mois sélectionné" Then

Range("B2:BV45").EntireRow.Hidden = False
Range("B46:BV91").EntireRow.Hidden = False
Range("B92:BV139").EntireRow.Hidden = False
Range("B140:BV183").EntireRow.Hidden = False
Range("B184:BV229").EntireRow.Hidden = False
Range("B230:BV276").EntireRow.Hidden = False
Range("B277:BV322").EntireRow.Hidden = False
Range("B323:BV368").EntireRow.Hidden = False
Range("B369:BV414").EntireRow.Hidden = False
Range("B415:BV460").EntireRow.Hidden = False
Range("B461:BV506").EntireRow.Hidden = False
Range("B507:BV552").EntireRow.Hidden = False

End If

End Sub

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Le code marche parfaitement, j'ai inséré un bouton pour pouvoir l'exécuter. Sauf pour le mois de Mai. Quand je clique sur le bouton, absolument rien ne se passe et je n'ai pas de messages d'erreur dans mon code.

Pourriez vous m'aider à résoudre ce problème ?

Cordialement,

Loïc Lamps

Bonjour Loïc

1) merci de relire la charte, il y est indiqué de mettre le code entre balises avec la fonctionnalité (bouton) </>

2) Je ne vois pas comment le code peut marcher, ce sont toutes les mêmes plages

Edit : pas les mêmes lignes masquées

A+

Bonjour,

oui ce sont les même plage car les plages correspondent à des tableaux, je veux donc masquer les tableaux en fonction du mois dans la cellule A1. Le code marche parfaitement sauf pour le mois de mai, je trouve cela étrange.

Cordialement,

Loïc Lamps

Re

A+

Bonjour Loïc Lamps, BrunoM45, le forum,

En l’absence de fichier, je me suis permis d’adapter un de mes fichiers, avec un risque d’erreur lors de l’application des modifications (une solution parmi d’autres).

Bonne journée à tous,

Cordialement,

Bernard

9loic-lamps.xlsm (52.84 Ko)

Bonjour Loïc, bbb38

Voici une possibilité de code

Sub MasquerTableaux()
  Dim TabMois As Variant, LeMois As String
  Dim Ind As Integer
  TabMois = Split("Janvier,Février,Mars,Avril,Mais,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", ",")
  LeMois = Range("A1").Value
  ' Quel indice de mois est choisi
  For Ind = 1 To 12
    If LeMois = TabMois(Ind - 1) Then Exit For
  Next Ind
  ' Afficher le mois, masquer le reste
  Range("B2:BV45").EntireRow.Hidden = Not Ind = 1
  Range("B46:BV91").EntireRow.Hidden = Not Ind = 2
  Range("B92:BV139").EntireRow.Hidden = Not Ind = 3
  Range("B140:BV183").EntireRow.Hidden = Not Ind = 4
  Range("B184:BV229").EntireRow.Hidden = Not Ind = 5
  Range("B230:BV276").EntireRow.Hidden = Not Ind = 6
  Range("B277:BV322").EntireRow.Hidden = Not Ind = 7
  Range("B323:BV368").EntireRow.Hidden = Not Ind = 8
  Range("B369:BV414").EntireRow.Hidden = Not Ind = 9
  Range("B415:BV460").EntireRow.Hidden = Not Ind = 10
  Range("B461:BV506").EntireRow.Hidden = Not Ind = 11
  Range("B507:BV552").EntireRow.Hidden = Not Ind = 12
End Sub

Nota 1 : je n'avais pas fait attention que les mois dans votre feuille sont affichés par groupe de lignes

Nota 2 : dommage que chaque zones de mois n'est pas le même nombre de lignes, le code aurait été plus court encore

A+

Bonjour,

n'étant pas un expert VBA. Je n'ai pas très bien compris le code que vous avais envoyé. Cependant, j'ai essayé de le rentrer dans VBA et cela me donne exactement le même résultat que pour le code que j'avais écris par moi même. Tous les mois fonctionnent sauf le mois de Mai. J'avoue que j'ai du mal à comprendre pourquoi.

Cordialement,

Loïc Lamps

Re,

Pour expliquer code, désolé :
1) je créé un tableau des mois
2) je fais une boucle sur ce tableau pour connaitre l'indice du mois choisi : Mois du tableau = Mois de la cellule A1
3) Si le mois n'est pas de l'indice "Ind", le groupe de ligne est masquée

En ce qui concerne Mai, êtes vous certain que la plage "B184:BV229" soit la bonne ?
Est qu'il n'y a pas un espace après le "i" ?

Ne pouvez vous pas déposer un fichier anonymisé ?

A+

Bonjour. Merci pour votre aide. Il y avait en effet un espace après le mois de Mai dans ma liste déroulante.

J'ai donc gardé mon code qui fonctionne, même si il est un peu long !

Cordialement,

Loïc Lamps

Rechercher des sujets similaires à "bug macro vba masquer tableaux fonction mois"