VBA masquer les lignes/ automatisation

Bonjour à tous !

Je suis stagiaire et je travaille sur Excel 2016 en anglais. Une collègue m a demandé de lui construire une macro qui permet de masquer les lignes qui ont été modifiées, je m explique:

Il s agit d un fichier de budget dans lequel les dépenses affectés á chaque produit sont détaillés, et le détail du budget de chaque produit est ensuite masqué. Par exemple, la ligne 34 concerne le budget total du produit C et ensuite les lignes 35 à 135 le détail du budget, et ces lignes peuvent etre masquées si bien que l on voit seulement le budget de chaque produit.

Une fois toutes les lignes ouvertes (macro déjà enregistrée), ma collègue va modifier chaque semaine manuellement les postes de budget qu il y a besoin d actualiser. Le but de la macro est le suivant: fermer les lignes correspondants aux produits dont le budget a été modifié ce qui permettra de faire une synthèse des budgets des produits modifiés. Par exemple, si la ligne 124 est modifié, l'ensemble des lignes 35 à 135 est masqué (le bouton pour masquer les lignes est déjà présent dans le fichier).

J espére etre assez clair, je ne peux malheureusement pas charger le fichier comme il est confidentiel.

A tester puis à adapter selon tes besoins

19fcarpentier.xlsm (16.68 Ko)

Merci bien !

ou dois je exactement mettre les lignes concernées dans la macro, par exemple si la ligne 2 est la synthése et les lignes 3 à 8 le détail ?

sachant que l opération concerne plusieurs produits, 9 au total

Alor le code est comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)

For Each c In Range("A35", "A135")
If c.Row = Target.Row Then Range("35:135").EntireRow.Hidden = True
Next

End Sub

Pour rajouter un groupe de ligne il faut ajouter une boucle. Par exemple tu veux en plus que les lignes 137 a 148 se masquent en cas de modif :

Private Sub Worksheet_Change(ByVal Target As Range)

For Each c In Range("A35", "A135")
If c.Row = Target.Row Then Range("35:135").EntireRow.Hidden = True
Next

For Each c In Range("A137", "A148")
If c.Row = Target.Row Then Range("137:148").EntireRow.Hidden = True
Next

End Sub

Voilà, avec ces deux exemples je pense que tu as compris la syntaxe.


PS : Pour accéder au code : Clique droit sur ton onglet Feuil1 en bas, puis visualiser le code.

okay merci beaucoup c'est très clair, je vais essayer cela

et comment dois je ensuite faire pour l éxécuter, j appuie sur "run", je fais une modif' pour tester mais rien ne se passe...

merci !

Tu l'as bien mis dans le code de la feuille, en évènementielle Worksheet_Change ?

(je précise également que c est la première vba que je fais)

oui je le vois bien sur ma feuille quand je fais clic droit et "view code"

Rechercher des sujets similaires à "vba masquer lignes automatisation"