Masquer/afficher des lignes automatiquement selon la valeur de des cellules

Bonjour cher forum!

Je vous expose ma problématique. J'ai un document d'estimation d'un une feuille de présentation avec seulement les informations pertinente (je vous met le classeur en pièce jointe).

Mon problème ce situe à partir de la ligne 35. Nous avons plusieurs poste budgétaire et tout dépendamment du projet il peut ou non y avoir des coûts relié. Ce que j'aimerais c'est que quand le poste budgétaire est à zéro que la ligne avec le montant ainsi que la ligne au-dessus et au-dessous se masquer sinon qu'elles s'affiche et que le tous ce face automatiquement sans cliquer sur un bouton pour activer la macro.

Exemple : Si à ma Cellule F39 où se trouve le montant du poste budgétaire "CONDITIONS GÉNÉRALES" est égale à 0 donc masquer les lignes 38, 39 et 40 et ainsi de suite pour chacun des postes suivant.

J'ai créer une partie du code et j'ai de la difficulté à bien le faire fonctionner automatique première des choses, toute fois je ne sais pas comment faire pour faire un code qui ne serait pas trop lourd pour aller chercher chacun des postes.

Merci pour votre aide! :)

15classeur1.xlsm (36.99 Ko)

Hello,

Une proposition :

fonction à mettre dans un module standard :

Function masque(CelluleVide As Range, ValeurCellule As Long)
    If CelluleVide.Value2 = ValeurCellule Then Rows(CelluleVide.Offset(-1).Row & ":" & CelluleVide.Offset(1).Row).EntireRow.Hidden = True
End Function

Appel de la fonction dans l'événement change :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("F39")) Is Nothing Then Call masque(Range("F39"), 0)
    If Not Application.Intersect(Target, Range("F48")) Is Nothing Then Call masque(Range("F48"), 10)
End Sub

L'appel ci-dessus masque les lignes 38,39,40 si la valeur de F39 = 0

masque les lignes 47,48,49 si la valeur de F48 = 10

Tu peux donc paramétrer la valeur de la cellule comme tu veux.

Bonjour!

Merci pour ta réponse très rapide!

J'arrive à comprendre la fonction et c'est l'évènement que je n'arrive pas à changer la valeur on dirait.

En d'autre mot par exemple la cellule F39 va représenter un chiffre en valeur monétaire. Si cette valeur est 0.00$ alors masquer les lignes, toute fois il y aura toujours quelque chose dans cette cellule puisqu'elle fait la somme d'une tableau dans une autre feuille de calcule. J'essaie de modifier le "Nothing" mais rien de ne se passe ni quand je laisse la formule tel quelle.

Également, une fois la macro appelé je ne comprends pas ce que représente "... , 0)" et "... , 10)"?

Bonsoir, Rag02700

la valeur en F39 est issue "d'une formule", ou plutôt de la recherche d'une valeur dans un autre document, est-ce que son changement provoque l'événementiel "Change" ? Sur une formule non, mais sur un appel extérieur je ne sais pas.

Quid de l'importation d'une valeur autre que "0" dans cette cellule après l'importation d'un "0" ? En début de fonction il faudrait afficher les lignes 38,39 et 40 puis les masquer en fonction de la valeur.

@ bientôt

LouReeD

Bonsoir LouReeD,

J'ai tenté le code suivant au début dans la fonction dans le module :

Rows("35:157").EntireRow.Hiddean = False

Toute fois rien ne semble arrivé. Je comprends ce que tu veux dire pour la formule. J'ai uniquement mis une feuille du classeur puisque le reste contient des données personnelles de sous-traitant.

La formule vient calculer le tableau dans une autre feuille du même classeur. Si je n'ajoutes aucun montant dans le tableau de l'autre feuille bien la valeur reste à zéro et c'est dans ce cas que je voudrais que les lignes se masque.

C'est ce que je dis : l'événement "Change" est déclenché lorsqu'une cellule au moins voit son contenu modifié ou "revalidé" mais il n'est pas déclenché suite à un changement de valeur du résultat de formule. En effet, seul la partie visible change mais la formule dans la cellule ne change pas...

@ bientôt

LouReeD

Je comprends, merci!

Qu'elle serait alors ma solution pour que ça se fasse automatiquement?

Il faudrait utiliser la surveillance événementielle de la feuille dont les sources changent, et de là faire les modification de masquage sur la feuille voulue.
ou bien utiliser l'évènementiel "Calculate" de la feuille, oui je crois que cela sera mieux, si la formule se recalcul alors l'événement sera lancé (normalement).

@ bientôt

LouReeD

Hum, malheureusement ça ne fonctionne pas. Je joints le fichier avec la feuille de référence.

J'ai de la difficulté à comprendre comment faire pour être, je suis perdu je crois haha

11classeur1.xlsm (208.59 Ko)
Private Sub Worksheet_Calculate()

    Call masque(Range("F36"), 0)
'    Call masque(Range("F39"), 0)
'    Call masque(Range("F42"), 0)
'    Call masque(Range("F45"), 0)
'    Call masque(Range("F48"), 0)

End Sub

Function masque(CelluleVide As Range, ValeurCellule As Long)

    Range("35:157").EntireRow.Hidden = False
    If CelluleVide.Value ="" Then Rows(CelluleVide.Offset(-1).Row & ":" & CelluleVide.Offset(1).Row).EntireRow.Hidden = True

End Function

Il n'y a pas de paramètre dans Calculate, il faut laisser les instruction d'origine.
Le soucis vient de la valeur renvoyée, si elle est égale à Zéro alors dans votre feuille il n'y a rien, pour s'en convaincre, lorsque vous faites format cellule et que vous choisissez nombre, la case représentative est vide, c'est pourquoi j'ai mis ="". A tester.

@ bientôt

LouReeD

Ça ne fonctionne pas plus, j'ai essayer de changer la valeur, mais rien ne se passe...

Je vais réessayer de faire des recherches sur internet! Merci pour ton aide très apprécié!

Bonsoir,

sur un fichier "simple" le code ci dessous fonctionne :

Private Sub Worksheet_Calculate()
    Range("A9:A11").EntireRow.Hidden = False
    If Range("F10") = 0 Then Range("A9:A11").EntireRow.Hidden = True
End Sub

Il est à mettre sur la feuille dont vous voulez masquer les lignes, sur une autre se trouve les données qui en fonction de leur modifications vont modifier la valeur de la cellule F10 de celle qui est surveillée par "Calculate".

Le fichier :

10essai-masquage.xlsm (14.40 Ko)

Maintenant reste à l'adapter à vos fichiers

@ bientôt

LouReeD

Bonsoir à tous,

A tester comme ceci :

Private Sub Worksheet_Calculate()
    On Error GoTo GestErr
    Application.EnableEvents = False
    Call masque(Range("F36"), 0)
    Call masque(Range("F39"), 0)
    Call masque(Range("F42"), 0)
    Call masque(Range("F45"), 0)
    Call masque(Range("F48"), 0)
GestErr:
    Application.EnableEvents = True
End Sub
Function masque(CelluleVide As Range, ValeurCellule As Long)
    If CelluleVide.Value2 = ValeurCellule Then
        Rows(CelluleVide.Offset(-1).Row & ":" & CelluleVide.Offset(1).Row).EntireRow.Hidden = True
    Else: Rows(CelluleVide.Offset(-1).Row & ":" & CelluleVide.Offset(1).Row).EntireRow.Hidden = False
    End If
End Function

Ça fonctionne bien merci Rag02700!

Bonsoir,

pour résumer, il n'y a pas de déclenchement "Change" sur un résultat de formule ! J'dis ça j'dis rien !

Merci pour votre retour !

@ bientôt

LouReeD

Rechercher des sujets similaires à "masquer afficher lignes automatiquement valeur"