Comment créer une Macro pour masquer des lignes selon la valeur cellule

Bonjour,

ça fait plusieurs jours que j'essaye de trouver comment faire une macro pour masquer des lignes selon la valeur d'une cellule en particulier.

Vous pouvez trouver mon tableau en pièce jointe. J'ai besoin d'une macro qui dit que la ligne16 à 24 doivent ce masquer si dans la cellule D17 il est inscrit 0. je veux faire de même pour : ligne de 43 à 51, avec la cellule D44 / lignes 70 à 78, avec la cellule D71 / lignes 79 à 87, avec la cellule D80 / lignes 88 à 96, avec cellule D89 et lignes 97 à 105, avec cellule D98.

Merci d'avance

Bonjour,

Dans quelle feuille voulez vous faire cela ?

Cordialement

dans la feuille Emyx SVP

Ok mais l'information du zéro provient d'un autre fichier.

Qu'y a-t-il dans votre cellule lorsque vous avez un 0. actuellement je vois "1 pour 0,0125 jours"

c'est exactement ça, cette feuille est lier aux 2 autres feuille. Puis si on regarde les autres rectangle y en a qui est écrit 0 pour 0 jour(s).

Si vous regardez votre fichier vous avez fait des copier-coller. Du coup, les formules font référence à un fichier inconnu.

1. défusionnez les cellules concernées par le 0 (donc D17, D44, .....)

2. Placez ce code dans la feuille EMyx

Private Sub Worksheet_Activate()
Dim i As Integer 'définition de variable - i va correspondre a une ligne
For i = 17 To 71 Step 27 'on boucle de la ligne 17 a la ligne 71 par pas de 27
    If Left(Range("D" & i), 1) = 0 Then 'on verifie que le premier caractere en colonne D de la ligne i est nul
        Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = True 'si oui on masque les lignes
    Else: Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = False 'si non on affiche les lignes
    End If
Next i 'on passe a la ligne suivante - donc ligne i + 27
For i = 80 To 98 Step 9 'on boucle de la ligne 80 a la ligne 98 par pas de 9
    If Left(Range("D" & i), 1) = 0 Then
        Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = True
    Else: Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = False
    End If

Next i
End Sub

Pour le placer :
- click droite sur l"onglet Emyx
- Choisir "Visualiser le code"
- Coller le code dans la fenêtre
- enregistrer votre fichier au format XLSM (pour accepter les macros)

Le code va agir chaque fois que vous activez la feuille Emyx en venant d'une autre feuille.

3. faites un test comme ceci :
- allez sur la feuille "Cost-Ecobrick"
- supprimez les données dans les cellules V17 à V19
- cliquez sur l'onglet Emyx

Si ok -->

Cordialement


edit : modifié ligne For i = 80 to 90 step 9 en For i = 80 to 98 step 9

Je ne comprends rien de l'écriture de Macro, est-ce que vous auriez un livre sur le langage de macro à me conseiller?

Je ne comprends rien de l'écriture de Macro

Je peux vous ajouter un commentaire dans chaque ligne de code si vous le voulez. Dites moi

est-ce que vous auriez un livre sur le langage de macro à me conseiller

Déjà vous pourriez utilisez le cours donné sur ce site --> https://www.excel-pratique.com/fr/vba

Voyez aussi mon intervention ici --> Livre VBA

Sinon pensez aussi à l'enregistreur automatique puis ensuite on peut modifier le code. Mon ami Th. Pourtier (Ti sur les forums - une référence !!), décédé aujourd'hui, m'a dit il y a des années qu'il utilisait très souvent cette méthode et adaptait ensuite.

Crdlt

Merci beaucoup c'est très gentil, je vais aller voir le tout.

salut Dan, merci tu m'as beaucoup aider, mais mon boss me demande une autre complication.

Donc j'ai besoin quand dans l'onglet Emyx les lignes 16 à 24 se masque si dans l'onglet INFO-Projet sous "échantillon?" "nettoyage" est inscrit non et les laisser afficher s'il est écrit oui.

La même chose ou presque pour: lignes 43 à 51 masquer si la case en dessous de "échantillon?" "teinture" est inscrit non et afficher si inscrit oui.

Puis le reste c'est comme demander au départ:

Lignes 25 à 33 masquer si la case D26 est a 0 et afficher si 1

lignes 34 à 42 masquer si case D35 à o et afficher si 1

Lignes 52 à 60 même chose case D53

Lignes 61 à 69 case D62

lignes 70 à 78 case D71

Lignes 79 à 87 case D80

Lignes 88 à 96 case D89

Lignes 97 à 105 case D98

19classeur1.xlsx (111.32 Ko)

Bonjour

Puis le reste c'est comme demander au départ:
Lignes 25 à 33 masquer si la case D26 est a 0 et afficher si 1
.....

Heu, les conditions ont changé là ? avant c'était D17 juste ?

Si oui, remplacez le code précédent par celui-ci :

Private Sub Worksheet_Activate()
Dim i As Integer

For i = 26 To 98 Step 9
    If Left(Range("D" & i), 1) = 0 Then
        Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = True
    Else: Range("D" & i - 1 & ":D" & i + 7).EntireRow.Hidden = False
    End If
Next i

With Sheets("INFO-Projet")
    If UCase(.Range("G8")) = "NON" Then
        Rows("16:24").Hidden = True
    Else: Rows("16:24").Hidden = False
    End If

    If UCase(.Range("G9")) = "NON" Then
        Rows("41:51").Hidden = True
    Else: Rows("41:51").Hidden = False
    End If
End With
End Sub

merci beaucoup

cela ne fonctionne pas???

C'est à dire ?

la partie qui dit que si "0" cacher les lignes fonctionne mais celles qui fait référence aux case dans la feuille "INFO-Projet" ne fonctionnes pas, que dois-je faire?

mais celles qui fait référence aux case dans la feuille "INFO-Projet" ne fonctionnes pas, que dois-je faire?

Bizarre cela fonctionne chez moi pourtant.
Les NON et OUI sont bien en G8 et G9 ?

oui ce sont les bonne case G8 et G9, bizarre moi j'essaye en inscrivant oui a un et non sur l'autre et ça affiche toujours touts peux importe si c'est oui ou non.

La ça fonctionne je sais pas pourquoi, mais tout à coup ça fonctionne, bizarre

Merci beaucoup c'est très gentil, j'apprécie vraiment.

Rechercher des sujets similaires à "comment creer macro masquer lignes valeur"