Masquer une ligne sous conditions [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015
-
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015
-
Bonjour,

Je souhaiterais créer une macro qui me permettrai de masquer une ligne si la réponse à la question précédent est non.

Exemple : dans la cellule B4 j'ai le choix de sélectionner "Oui" ou "Non", Si B4 = "Non" je voudrais que la ligne 5 (en entier) soit masquée.

Problème je ne sais pas créer de macro ... j'ai bien fait des recherches mais je n'y arrive pas ...

Si vous pouviez m'aider, ça m'arrangerait beaucoup !

D'avance merci !

6 réponses

Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
41
Bonjour,

Pour automatiser tout ça :

Sub TEST()

Dim DL As Long, i As Long

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'A adapter, 1 est la colonne de référence pour savoir quelle est ta dernière ligne (mettre le numéro de colonne qui est remplie le plus bas du tableau)

For i = 1 To DL 'A adapter également, 1 est le numéro de la ligne où commence le code

If Range("B" & i) = "Non" Then 'Si la cellule B de la ligne i est égale à "Non" alors...

    Rows(i).Hidden = True 'Masquer la ligne concernée (i)

End If

Next i

End Sub


Cordialement.
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015

Merci beaucoup Kuartz !
J'ai encore une question, y-a-t-il une solution pour que cela se fasse automatique, c'est à dire que à chaque que je choisisse le "Non" dans ma cellule B4, la ligne se masque et que je n'ai donc pas besoin d'activer la macro ?
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
41
Oui bien sûr.

Dans l'éditeur VBA, vous double cliquez sur votre feuille. Vous cliquez ensuite sur (Général) en haut et vous mettez "Worksheet". A droite sera normalement écrit "SelectionChange" sinon, le mettre.

Ensuite, écrire la macro dessous.

Exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim DL As Long, i As Long

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'A adapter, 1 est la colonne de référence pour savoir quelle est ta dernière ligne (mettre le numéro de colonne qui est remplie le plus bas du tableau)

For i = 1 To DL 'A adapter également, 1 est le numéro de la ligne où commence le code

If Range("B" & i) = "Non" Then 'Si la cellule B de la ligne i est égale à "Non" alors...

    Rows(i).Hidden = True 'Masquer la ligne concernée (i)

End If

Next i

End Sub


Cordialement.
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015

Bonjour,

Merci de votre réponse mais je n'arrive pas à la mettre en application ...
Dans la liste déroulante où il y a (Général) je dois pouvoir choisir (worksheet) ? parce que ça n'apparaît pas, je n'ai d'ailleurs la possibilité que de prendre (Général) ...
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
41
Oui normalement vous pouvez choisir (Worksheet). Mais peu importe, double cliquez sur votre feuille (dans le panneau de gauche (Feuil1 normalement)). Ensuite copiez collez le dernier code que je vous ai indiqué dans le cadre du dessous et le tour est joué.
Messages postés
16315
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
30 novembre 2020
3 082
bonjour,

Option Explicit
'-----------------

Private Sub Worksheet_Change(ByVal Target As Range)
'worksheet_change ne réagit que lorsqu'une saisie est effectuée _
contrairement à "slection_change" qui réagit lorsqu'on ckique sur B4

If Target.Address = "$B$4" Then 'limite l'action au changement dans B4
If Range("B4") = "Non" Then Rows(5).Hidden = True 'ligne 5 cachée
If Range("B4") = "Oui" Then Rows(5).Hidden = False
End If
'si B4 vide: aucune action
End If
End Sub


pour installer
copier ce code
sur la feuille concernée clic droit sur le nom d'onglet
visualiser le code
coller le code
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015

Merci de vos réponses mais en recopiant vos codes (et les adaptant à mon fichier bien sûr) ça ne fonctionne pas ... Alors que ça fonctionnait avant, même si je devais l'exécuter manuellement ...

A quoi cela peut-il être du ?
Quand j'ouvre l'ensemble des macros, ma macro a même disparue ...
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
41
La macro n'a pas disparu. Il ne s'agit pas d'une macro, en fait pas d'un module. Il s'agit d'un code exécuté à chaque changement de sélection sur la feuille.

Dans l'onglet "Développeur", cliquer sur "Visual Basic". Double cliquez sur votre feuille dans le panneau de gauche en haut. En dessous de Microsoft Excel Objects (Feuil 1 normalement).

Copier le code suivant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim DL As Long, i As Long

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'A adapter, 1 est la colonne de référence pour savoir quelle est ta dernière ligne (mettre le numéro de colonne qui est remplie le plus bas du tableau)

For i = 1 To DL 'A adapter également, 1 est le numéro de la ligne où commence le code

If Range("B" & i) = "Non" Then 'Si la cellule B de la ligne i est égale à "Non" alors...

    Rows(i).Hidden = True 'Masquer la ligne concernée (i)

End If

Next i

End Sub


Le coller dans la partie blanche de droite.

Sortir et essayer. (le code s'exécute à chaque fois que vous sélectionnez n'importe quelle cellule de la feuille).

Cordialement.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
41
Si ca ne marche pas, je vous propose de m'envoyer un fichier anonymé via le site www.cjoint.com.

Cordialement.
Messages postés
16315
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
30 novembre 2020
3 082
je ne sais pas si c'est à moi que tu répondais (bonjour, michel?)
j'ai rectifié un truc ou deux (end if supprimé) mais je viens de tester avec succès ma proposition suivant ta demande:
dans la cellule B4 j'ai le choix de sélectionner "Oui" ou "Non", Si B4 = "Non" je voudrais que la ligne 5 (en entier) soit masquée.
le code modifié
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$B$4" Then 'limite l'action au changement dans B4
    If Target = "Non" Then Rows(5).Hidden = True 'ligne 5 cachée
    If Target = "Oui" Then Rows(5).Hidden = False
    'si B4 vide: aucune action
End If
End Sub
Messages postés
5
Date d'inscription
lundi 3 août 2015
Statut
Membre
Dernière intervention
4 août 2015

Bonjour et merci Kuartz et Michel,
mon problème semble résolu ! (pour l'instant!)

J'essaye d'appliquer cela dans mes différentes situations !
Merci encore