Afficher/Masquer ligne VBA

Bonjour à toutes et à tous

Après avoir lu la plupart des posts sur le sujet, je me permets de vous exposer mon problème

Module 1:

Sub Masque_lig()

Application.ScreenUpdating = False

Dim cellule As Range

For Each cellule In Range("D42:D47")

If cellule.Value = "0" Then

cellule.EntireRow.Hidden = True

Else

cellule.EntireRow.Hidden = False

End If

Next cellule

End Sub

Feuill 1:

Private Sub Worksheet_Change(ByVal Target As Range)

Call Masque_lig

End Sub

("D42:D47") = les valeurs des cellules D42,43,44,45,46,47 changent en fonction du choix que l'on fait sur une liste déroulante dans une second feuille.

L'idée est la suivante: quand D42=0 masquer la ligne 42. Inversement lorsque la valeur de D42 change suite à un changement de séléction dans liste déroulante (sur une autre feuille), alors la ligne 42 s'affiche. Idem jusque la ligne 47.

Mon code marche à moitié, si je l'éxécute à partir de Visual Basic cela marche coup par coup. Cependant si je change mon choix dans la liste déroulante, tout plante. Voyez-vous où j'ai pu faire une erreur ?

Je sais que d'habitude il est préférable de mettre un fichier type. Mes données sont confidentielles et je n'ai pas eu le temps d'en faire un dépourvu de données sensibles. Si la réponse est évidente pour vous tant mieux, sinon je ferai un fichier simplifié dès demain.

Merci d'avance !

Excellente fin de journée.

Bonsoir,

Oui fournir un fichier SVP.

A+

Bonjour

Cette macro dans un module

Adaptes le nom de la feuille à traiter

Sub Masque_lig()
  Application.ScreenUpdating = False
  Dim cellule As Range
  With Sheets("Feuil2")     ' Nom de la page dans laquelle on masque les lignes
    For Each cellule In .Range("D42:D47")
      If cellule.Value = 0 Then
        cellule.EntireRow.Hidden = True
      Else
        cellule.EntireRow.Hidden = False
      End If
    Next cellule
  End With
End Sub

Cette macro dans le module de la feuille contenant les listes déroulantes qui influent les cellules D42:D47 de l'autre page

Private Sub Worksheet_Change(ByVal Target As Range)
  Call Masque_lig
End Sub

Bonjour Galopin, Bonjour Banzaï,

Alors Banzaï j'ai testé ta macro, si je l'éxécute ça marche, les lignes à 0 sont bien cachées mais après ce n'est pas automatique (je dois certainement faire quelque chose de pas bien, je commence juste à comprendre/apprendre le VBA).

Je joins donc un fichier simplifié à ce post. Quand je change de responsable, les lignes ne bougent plus alors que je souhaite que cela soit dynamique. Si avant il y avait deux vendeurs, deux lignes, mais si je choisis un responsable avec trois vendeurs cela ne change pas dans mon fichier, j'observe toujours deux vendeurs.

Merci pour vos réponses et merci d'avance pour celles qui vont suivre =D.

Bonne journée,

Garmin.

Bonjour

Tu supprimes la macro qui est dans le module de la feuille "VDB" (inutile)

Ensuite dans la page "Graphique" clic droit sur la liste déroulante ---> Affecter une macro

Choisir (la seule macro) "Masque_lig" ---> ok

C'est fini

Un grand merci Banzaï, cela marche bien sur mon fichier test.

Le détail qui me manquait était l'affectation de la macro au bouton (ce qui parait pourtant tellement logique haha).

Je vais essayer d'appliquer cela à mon fichier de base. Je reviens vers toi si par malheure ça ne marche toujours

Et ce qui devati arriver, arriva.

Il y a une subtilité dans le copier/coller d'un code d'un module vers un autre module ?

J'ai bien changé le le nom de la feuille, la plage concernée. J'ai affecté la macro au bouton. Dans l'autre fichier ça marche niquel mais là j'ai message d'erreur: "L'indice n'appartient pas à la selection". L'erreur se trouve sur: With Sheets("VDeB") pourtant c'est le bon nom sur l'autre fichier.

Merci encore

Bonjour

Vérifies le nom de la page "VDeB" dans

With Sheets("VDeB")

Mais sans le fichier pas évident ......

J'ai trouvé !

J'avais un espace + VDB dans le titre de la feuille donc la macro ne trouvait jamais la feuille...

ça marche niquel.

Merci beaucoup pour ta patience Banzaï

Rechercher des sujets similaires à "afficher masquer ligne vba"