Masquer des lignes si certaines cellules de la ligne sont vides

Bonjour,

Dans la continuité de cette discussion https://forum.excel-pratique.com/excel/masquer-des-lignes-en-fonction-du-contenu-d-une-cellule-145871 comment masquer des lignes si certaines de leurs cellules sont vides ?

par exemple : pour les lignes 1 à 20 si les cellules des colonnes C, D et E sont vides alors les lignes sont masquées. Merci.

Bonjour,

Quelque chose comme cela ?

Sub Masquer_lignes()
For i = 1 To 20
If Cells(i, 3) = "" And Cells(i, 4) = "" And Cells(i, 5) = "" Then Cells(i, 1).EntireRow.Hidden = True
Next
End Sub

Merci JoyeuxNoel,

si j'ai bien compris le code, je l'ai modifié comme ceci :

Sub cacher_no_prod()
For i = 3 To 20
If Cells(i, 5) = "" And Cells(i, 6) = "" And Cells(i, 7) = "" Then Cells(i, 3).EntireRow.Hidden = True
Next
End Sub

pour que cela concerne les lignes 3 à 20 et les colonnes E, F et G, malheureusement cela n'a aucun effet sur les lignes concernées.

Dans ma configuration cela devrait masquer les lignes 10 à 20 car E10, F10, G10... E11, F11, G11... ...E20, F20, G20 sont vides.

Ça marche chez moi.

En fait je comprends que mes cellules ne sont pas réellement vides... elles contiennent une formule de type =ARRONDI(C10*ADMINISTRATION!F68;0) mais comme dans ce cas là C10=0 le résultat est vide, il n'y a pas de 0, la cellule est vide. Est-ce que Excel considère la cellule vide ?

En fait C10 = ADMINISTRATION!H34 et ADMINISTRATION!H34 = 0

C10 devrait afficher 0 ou bien c'est normal que la cellule soit vide ?

Je suis un peu perdu, je ne comprends pas pourquoi C10 n'affiche pas 0 puisque H34=0 et que dans C10 il y'a =$H$34

Il n'y a pas de MFC dans C10

Pas de MFC mais peut-être un format personnalisé qui masque les 0 ? (c'est possible aussi.)

Sinon, remplace dans le code tous les ="" par = 0

Dans format de cellule il n'y a rien de spécial, d''ailleurs si je colle =$H$34 dans n'importe quelle cellule de l'onglet rien ne s'affiche... je suis paumé !

Pas de MFC mais peut-être un format personnalisé qui masque les 0 ? (c'est possible aussi.)

Sinon, remplace dans le code tous les ="" par = 0

j'ai essayé mais en vain, je pense que les cellules sont réellement vides... donc je ne saisis pas bien pourquoi votre code ne fonctionne pas.

EDIT: cela fonctionne ! j'inscrivais "0" au lieu de 0 dans votre code !

Je vous embête encore un peu...

Les cases se retrouvent vides dans l'onglet PROD lorsque je décoche une case sur l'onglet ADMIN. Quand j'active votre code macro dans l'onglet PROD c'est parfait les lignes se masquent bien. Comment faire pour que les lignes réapparaissent si je recoche une case dans l'onglet ADMIN ?

Comment réinitialiser la feuille en exécutant la macro de nouveau ? JE CLIQUE ça masque, JE RECLIQUE ça affiche tout

Désolé de rajouter une question à chaque fois...

Sub cacher_no_prod()
For i = 3 To 20
If Cells(i, 5) = 0 And Cells(i, 6) = 0 And Cells(i, 7) = 0 Then Cells(i, 3).EntireRow.Hidden = True
Next
End Sub

Quelqu'un aurait-il une piste pour que la macro soit réversible ?

Bah c'est un peu pénible ouais, les trucs au compte goutte, surtout sans fichier, en y allant au pif comme ça et en étant sûr à 99% que tu feras changer la solution ensuite.

Donc je te saurais gré de bien vouloir soit poster un fichier exemple, soit préciser les cellules concernées par tout ceci.

Désolé d'être pénible JoyeuxNoel, vous avez raison mais je n'avais pas prévu que l'action ne soit pas réversible, ce n'est pas la peine de préciser au vu de mes différentes questions sur le forum que je débute franchement avec Excel.

Pour moi en demandant comment faire pour masquer les lignes le code allait marcher dans les deux sens. Effectivement je devrais être plus explicite et précis dans mes demandes. Donc voilà je veux juste qu'un clic sur le bouton auquel j'ai affecté votre macro puisse cacher les lignes suivants les conditions expliquées plus haut et qu'un deuxième clic fasse réapparaitre les lignes concernées. Evidemment ce n'est pas toujours les mêmes lignes qui seront concernées mais elles se situeront toujours dans la plage 1:20

Je prends note de votre remarque et ferais plus attention la prochaine fois. Je comprends tout à fait votre agacement et je m'en excuse

Voici le fichier, je voudrais affecter la macro à l'entonnoir en haut à gauche

22classeur1.xlsm (21.82 Ko)

Restons calmes, je n'ai pas dit que j'étais très énervé non plus ;)

Voici le fichier ci-joint. Une idée de code serait le suivant :

Sub cacher_no_prod()
If [k1] = 0 Then
    For i = 3 To 20
        If Cells(i, 5) = 0 And Cells(i, 6) = 0 And Cells(i, 7) = 0 Then Cells(i, 3).EntireRow.Hidden = True
    Next
    [k1] = 1
Else:
    Rows("1:20").EntireRow.Hidden = False
    [k1] = 0
End If
End Sub

Une valeur, 1 ou 0, est inscrite en blanc derrière l'icône du filtre, pour que le code puisse savoir où il en est.

Merci beaucoup, cela fonctionne parfaitement maintenant.

Il y a une chose à laquelle je n'avais pas pensé c'est qu'une fois la feuille verrouillée le code ne fonctionne plus, je suppose parce qu'il ne peut pas lire si les cellules sont à 0 ou pas. Est-ce qu'il y a un moyen de contourner ça ou je suis obligé de déverrouiller le range (E3:G20) ? Ce qui m'ennuierait un peu.

Sub cacher_no_prod()
ActiveSheet.Unprotect

If [k1] = 0 Then
    For i = 3 To 20
        If Cells(i, 5) = 0 And Cells(i, 6) = 0 And Cells(i, 7) = 0 Then Cells(i, 3).EntireRow.Hidden = True
    Next
    [k1] = 1
Else:
    Rows("1:20").EntireRow.Hidden = False
    [k1] = 0
End If
ActiveSheet.Protect
End Sub

Il n'a pas de problème pour "lire" les données, on ne lui demande d'ailleurs pas vraiment. Le souci se situe surtout quand on lui demande d'écrire 0 ou 1 dans la cellule.

Spleeendide !!!

Rechercher des sujets similaires à "masquer lignes certaines ligne vides"