Démasquer une ligne en fonction valeur cellul
Résolu/Fermé
A voir également:
- Démasquer une ligne en fonction valeur cellul
- Fonction si et - Guide
- Aller à la ligne dans une cellule excel - Guide
- Partager photos en ligne - Guide
- Vente en ligne particulier - Guide
- Test performance pc en ligne - Guide
15 réponses
Pitu
Messages postés
1441
Date d'inscription
jeudi 3 octobre 2002
Statut
Contributeur
Dernière intervention
5 janvier 2013
125
27 mars 2012 à 15:33
27 mars 2012 à 15:33
Bonjour,
Ton code ne marche QUE pour le couple de lignes 25 et 26, on est d'accord ?
Pour moi, il te manque le "else" de ta condition, qui te permettra de masquer la ligne 26 si la condition en $P$25 n'est pas remplie.
Ce qui donnerait :
Ton code ne marche QUE pour le couple de lignes 25 et 26, on est d'accord ?
Pour moi, il te manque le "else" de ta condition, qui te permettra de masquer la ligne 26 si la condition en $P$25 n'est pas remplie.
Ce qui donnerait :
Private Sub Worksheet_Change(ByVal Target As Range) 'si modification d'une autre cellule que P25 quitte cette macro If Target.Address <> "$P$25" Then Exit Sub If Target.Value = "288166530" Then 'si la cellule=288166530 Rows("26:26").Select Selection.EntireRow.Hidden = False 'Affiche la ligne 26 Else Selection.EntireRow.Hidden = True 'masque la ligne 26 End If End Sub
bonjour
ton code ne traite que la cellule P25 uniquement si elle est modifiée; les autres cellules(P27, P29....) ne sont pas testées .
Faut-il que le code soit exécuter une seule fois pour mettre à jour de la ligne 26 à la dernière?
Faut-il prévoir que le fichier évolue (mise à jour des cellules P... impaires ) et que la modification doive masquer ou afficher la ligne paire ?
A+
ton code ne traite que la cellule P25 uniquement si elle est modifiée; les autres cellules(P27, P29....) ne sont pas testées .
Faut-il que le code soit exécuter une seule fois pour mettre à jour de la ligne 26 à la dernière?
Faut-il prévoir que le fichier évolue (mise à jour des cellules P... impaires ) et que la modification doive masquer ou afficher la ligne paire ?
A+
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
28 mars 2012 à 09:50
28 mars 2012 à 09:50
Bonjour pseudomi,
Votre problème est-il résolu ?
Votre problème est-il résolu ?
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
28 mars 2012 à 11:07
28 mars 2012 à 11:07
Bonjour pseudomi,
Essayez cette procédure :
Essayez cette procédure :
Private Sub Worksheet_Change(ByVal Target As Range) Set its = Application.Intersect(Target, Range("P25:P250")) If Not its Is Nothing And Application.IsOdd(Target.Row) = True Then MsgBox "addresse ok : " & Target.Address If Target.Value = "288166530" Or Target.Value = "288166548" Then Rows(Target.Row + 1 & ":" & Target.Row + 1).EntireRow.Hidden = False Else Rows((Target.Row + 1) & ":" & (Target.Row + 1)).Select Selection.EntireRow.Hidden = True End If Else MsgBox "Différent de colonne [P] ou ligne paire!" End If End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Le Pingou,
heureuse de voir votre réponse...
bon, j'ai pas mal avancée sur le projet, je vous fais suivre ci dessous le code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B25:B25"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Rows("26:26").Select
Selection.EntireRow.Hidden = True
Application.EnableEvents = True
ElseIf Target.Value = "ULTIMATE" And Range("P25").Value = "288166530" Or Range("P25").Value = "288166548" Then 'si la cellule=288166530
Rows("26:26").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
ElseIf Range("P25") = "" Then
Rows("26:26").Select
Selection.EntireRow.Hidden = True
ElseIf Range("B25:D25").Select And Range("P25").Value = "288166530" Or Range("P25").Value = "288166548" Then 'si la cellule=288166530
Rows("26:26").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
End If
If Not Intersect(Range("B27:B27"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Application.EnableEvents = True
Rows("28:28").Select
Selection.EntireRow.Hidden = True
ElseIf Target.Value = "ULTIMATE" And Range("P27").Value = "288166530" Or Range("P27").Value = "288166548" Then 'si la cellule=288166530
Rows("28:28").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
ElseIf Range("P27") = "" Then
Rows("28:28").Select
Selection.EntireRow.Hidden = True 'naffiche pas les lignes 26
ElseIf Range("B27:D27").Select And Range("P27").Value = "288166530" Or Range("P27").Value = "288166548" Then 'si la cellule=288166530
Rows("28:28").Select
Selection.EntireRow.Hidden = False
End If
ect jusqu'à ligne 41.
J'aimerai maintenant pouvoir lui dire que la plage de cellule A1:N22 n'est pas concernée par ce programme.. car dés que je clic dans une cellule il me lance le programme. Je ne sais pas ou insérer le code ci dessous
If Selection.Range("A1:N23") Then Exit Sub
Merci d'avance à vous
heureuse de voir votre réponse...
bon, j'ai pas mal avancée sur le projet, je vous fais suivre ci dessous le code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("B25:B25"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Rows("26:26").Select
Selection.EntireRow.Hidden = True
Application.EnableEvents = True
ElseIf Target.Value = "ULTIMATE" And Range("P25").Value = "288166530" Or Range("P25").Value = "288166548" Then 'si la cellule=288166530
Rows("26:26").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
ElseIf Range("P25") = "" Then
Rows("26:26").Select
Selection.EntireRow.Hidden = True
ElseIf Range("B25:D25").Select And Range("P25").Value = "288166530" Or Range("P25").Value = "288166548" Then 'si la cellule=288166530
Rows("26:26").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
End If
If Not Intersect(Range("B27:B27"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Application.EnableEvents = True
Rows("28:28").Select
Selection.EntireRow.Hidden = True
ElseIf Target.Value = "ULTIMATE" And Range("P27").Value = "288166530" Or Range("P27").Value = "288166548" Then 'si la cellule=288166530
Rows("28:28").Select
Selection.EntireRow.Hidden = False 'affiche les lignes 26
ElseIf Range("P27") = "" Then
Rows("28:28").Select
Selection.EntireRow.Hidden = True 'naffiche pas les lignes 26
ElseIf Range("B27:D27").Select And Range("P27").Value = "288166530" Or Range("P27").Value = "288166548" Then 'si la cellule=288166530
Rows("28:28").Select
Selection.EntireRow.Hidden = False
End If
ect jusqu'à ligne 41.
J'aimerai maintenant pouvoir lui dire que la plage de cellule A1:N22 n'est pas concernée par ce programme.. car dés que je clic dans une cellule il me lance le programme. Je ne sais pas ou insérer le code ci dessous
If Selection.Range("A1:N23") Then Exit Sub
Merci d'avance à vous
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
28 mars 2012 à 17:56
28 mars 2012 à 17:56
Bonjour pseudomi,
Merci.
Je ne vais pas déchiffrer tout votre code sans aucunes explications car j'ai l'impression, qu'au regard de certaine condition il y a du mélange... !
Que voulez-vous réaliser exactement ?
Merci.
Je ne vais pas déchiffrer tout votre code sans aucunes explications car j'ai l'impression, qu'au regard de certaine condition il y a du mélange... !
Que voulez-vous réaliser exactement ?
Je suis completement découragée.. cela fait 2 jours que je bosse dessus et y a rien qui fonctionne.
En fait j'ai un tableau à partir de la ligne 25 à qui s'incrémente par liste ou recherche V qui sont des produits , qtés prix et service commandés.. Mon pb est que suivant les choix selectionnés je masque ou démasque des lignes... les condition sont celles décrites ci dessus. Bon ca ca marche à peu près.
je souhaite maintenant faire une macro RAZ lancée par un bouton.
lors de l enregistrement de la macro, dés que je supprime le contenu des cellules comprises entre les lignes 1 à 25 j'ai une erreur execution 13 .
je ne comprends pas pourquoi
En fait j'ai un tableau à partir de la ligne 25 à qui s'incrémente par liste ou recherche V qui sont des produits , qtés prix et service commandés.. Mon pb est que suivant les choix selectionnés je masque ou démasque des lignes... les condition sont celles décrites ci dessus. Bon ca ca marche à peu près.
je souhaite maintenant faire une macro RAZ lancée par un bouton.
lors de l enregistrement de la macro, dés que je supprime le contenu des cellules comprises entre les lignes 1 à 25 j'ai une erreur execution 13 .
je ne comprends pas pourquoi
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
28 mars 2012 à 20:20
28 mars 2012 à 20:20
Bonjour,
Eh oui, je vous comprends.
Pour bien commencez avez-vous testé la procédure (28 mars 2012 à 11:07) que j'ai posté concernant :
Les lignes paires sont masquées et celles-ci doivent s'afficher qu'à la condition que la cellule de la colonne P de la ligne juste au-dessus ait comme valeur "288166530 ou 288166548"
ex si P25 = 288166530 alors démasque ligne 26, si P27 est 30 alors ne pas démasquer ligne 28, si P29 est 288166548 alors démasquée ligne 30... etc.Est-ce que cela fonctionne correctement Oui / Non ?
Eh oui, je vous comprends.
Pour bien commencez avez-vous testé la procédure (28 mars 2012 à 11:07) que j'ai posté concernant :
Les lignes paires sont masquées et celles-ci doivent s'afficher qu'à la condition que la cellule de la colonne P de la ligne juste au-dessus ait comme valeur "288166530 ou 288166548"
ex si P25 = 288166530 alors démasque ligne 26, si P27 est 30 alors ne pas démasquer ligne 28, si P29 est 288166548 alors démasquée ligne 30... etc.Est-ce que cela fonctionne correctement Oui / Non ?
Bonjour Le Pingou,
merci de vous occuper de mon pb...
Alors je viens de tester la procédure que vous avez posté hier, cela ne fonctionne pas ... quelque soit la cellule que je change sur ligne 25 j'ai votre msg box qui apparait mai pas de démasque ligne 26.
En fait je ne sais pas si j'ai pris le pb dans le bon sens.
Je remplis un bon de commande , au dessus de ligne 25 coordonnées client,etc...
a partir de la ligne 25
colonne B : liste deroulante par validation des données (choix famille produit)
colonne C Liste deroulante liée à B (choix produit)
colonne D recherchev via valeur de B (coe produit)
colonnes E à H saisie manuelle et calcul (qté * prix)
colonne I Liste deroulante non liée par validation des données (choix contrat)
colonne J à N saisie manuelle et calcul (prix et durée et calcul CA)
A partir de ca, si je remplis une condition des listes deroulantes des colonnes C et I alors je souhaite qu'une ligne s'insere automatiquement en desous. Celle ci doit se remplir comme ceci :
C26 : recherchev concaténée de C25&I25 (nom du produit)
G26=G25 (qté produit)
L26 : SI(L2(<=36;36;60 (durée du contrat)
par contre si les conditions C et I ne sont pas ok alors la ligne "visible" après la ligne 25 doit etre identique à la Ligne 25 soit avec des menus déroulants...
dans mon code précédent, j'avais ajouté le code ci dessous qui permet que dés que je change une des listes deroulantes sur une meme ligne, les valeurs se remettent à 0 et biensur ligne 26 se remasque..
If Not Intersect(Range("B25:B25"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Rows("26:26").Select
Selection.EntireRow.Hidden = True
Application.EnableEvents = True
Merci à vous
merci de vous occuper de mon pb...
Alors je viens de tester la procédure que vous avez posté hier, cela ne fonctionne pas ... quelque soit la cellule que je change sur ligne 25 j'ai votre msg box qui apparait mai pas de démasque ligne 26.
En fait je ne sais pas si j'ai pris le pb dans le bon sens.
Je remplis un bon de commande , au dessus de ligne 25 coordonnées client,etc...
a partir de la ligne 25
colonne B : liste deroulante par validation des données (choix famille produit)
colonne C Liste deroulante liée à B (choix produit)
colonne D recherchev via valeur de B (coe produit)
colonnes E à H saisie manuelle et calcul (qté * prix)
colonne I Liste deroulante non liée par validation des données (choix contrat)
colonne J à N saisie manuelle et calcul (prix et durée et calcul CA)
A partir de ca, si je remplis une condition des listes deroulantes des colonnes C et I alors je souhaite qu'une ligne s'insere automatiquement en desous. Celle ci doit se remplir comme ceci :
C26 : recherchev concaténée de C25&I25 (nom du produit)
G26=G25 (qté produit)
L26 : SI(L2(<=36;36;60 (durée du contrat)
par contre si les conditions C et I ne sont pas ok alors la ligne "visible" après la ligne 25 doit etre identique à la Ligne 25 soit avec des menus déroulants...
dans mon code précédent, j'avais ajouté le code ci dessous qui permet que dés que je change une des listes deroulantes sur une meme ligne, les valeurs se remettent à 0 et biensur ligne 26 se remasque..
If Not Intersect(Range("B25:B25"), Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Rows("26:26").Select
Selection.EntireRow.Hidden = True
Application.EnableEvents = True
Merci à vous
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 713
29 mars 2012 à 09:22
29 mars 2012 à 09:22
bonjour,
Au lieu de poster sur plusieurs sujets doublons, tu ferais mieux de regarder et installer les réponses correctes que l'on t'a données au lieu de tester toutes les élucubrations que tu nous mets.
Ceux qui essaient de te t'aider, vont rapidement se rendre compte qu'ils perdent leur temps...
Au lieu de poster sur plusieurs sujets doublons, tu ferais mieux de regarder et installer les réponses correctes que l'on t'a données au lieu de tester toutes les élucubrations que tu nous mets.
Ceux qui essaient de te t'aider, vont rapidement se rendre compte qu'ils perdent leur temps...
Bonjour,
je suis désolée et je ne souhaite vraiment pas vous faire predre votre temps.
Je suis connectée au travail et je n'ai pas toutes les autorisations sur le net ainsi que dans la messagerie... bref lorsque j'ai posté hier les 2 messages, le 1 er ne m'apparaissait pas j 'ai donc cru qu'il n'était pas passé.. de plus je n'ai reçu aucun e mail me signalant des réponses d'ou le non retour de ma part. En ce qui concerne les "élucubrations" dont tu parles, je suis novice en vba et j'ai cru pouvoir essayer seule avant de venir vers le forum.
Voila
je suis désolée et je ne souhaite vraiment pas vous faire predre votre temps.
Je suis connectée au travail et je n'ai pas toutes les autorisations sur le net ainsi que dans la messagerie... bref lorsque j'ai posté hier les 2 messages, le 1 er ne m'apparaissait pas j 'ai donc cru qu'il n'était pas passé.. de plus je n'ai reçu aucun e mail me signalant des réponses d'ou le non retour de ma part. En ce qui concerne les "élucubrations" dont tu parles, je suis novice en vba et j'ai cru pouvoir essayer seule avant de venir vers le forum.
Voila
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 mars 2012 à 18:28
29 mars 2012 à 18:28
Bonjour pseudomi,
Je suis un peu étonné de votre réponse concernant ma procédure car elle fonctionne parfaitement, les lignes paires sont affichées ou masquées conformément à la valeur de la colonne [P] des lignes impaires et ceci depuis la ligne 25.
Toutefois je vais relire vos dernières informations et essayer de me construire un exemple pour voir si une solution est possible.
Votre fichier exemple serait un atout ... !
Je suis un peu étonné de votre réponse concernant ma procédure car elle fonctionne parfaitement, les lignes paires sont affichées ou masquées conformément à la valeur de la colonne [P] des lignes impaires et ceci depuis la ligne 25.
Toutefois je vais relire vos dernières informations et essayer de me construire un exemple pour voir si une solution est possible.
Votre fichier exemple serait un atout ... !
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
29 mars 2012 à 22:33
29 mars 2012 à 22:33
Bonjour pseudomi,
Premier constat :
Pour : si je remplis une condition des listes déroulantes des colonnes C et I
Et pour : par contre si les conditions C et I ne sont pas ok
Les conditions manques !
Pour : alors la ligne "visible" après la ligne 25 doit être identique à la Ligne 25 soit avec des menus déroulants...
Que comprendre... il n'y a qu'une ligne 25 .... !
Pour : L26 : SI(L2(<=36;36;60 (durée du contrat)
Les indications ne sont pas correctes !
Impossible de réaliser quoique ce soit avec ces indications.
Premier constat :
Pour : si je remplis une condition des listes déroulantes des colonnes C et I
Et pour : par contre si les conditions C et I ne sont pas ok
Les conditions manques !
Pour : alors la ligne "visible" après la ligne 25 doit être identique à la Ligne 25 soit avec des menus déroulants...
Que comprendre... il n'y a qu'une ligne 25 .... !
Pour : L26 : SI(L2(<=36;36;60 (durée du contrat)
Les indications ne sont pas correctes !
Impossible de réaliser quoique ce soit avec ces indications.
Bonjour Le Pingou,
en effet votre code fonctionne si je viens saisir manuellement les cellules P impaires : si je rentre un des 2 codes, la ligne juste au dessous se démasque", si je supprime ou rentre un autre code alors la ligne juste au dessous se masque.
Le pb est que je ne viens jamais ecrire manuellement dans les cellules de la colonne P. Les cellules P se remplissent en fonction des choix des menus deroulants.
il faudrait je pense modifier le code, en si changement dans les 3 menus déroulants ( soit colonne B-C-I) et que P = 288166530 ou 288166548 alors demasque L26 sinon rien
Est ce que vous pensez que c'est possible svp ?
Un grand merci à vous
en effet votre code fonctionne si je viens saisir manuellement les cellules P impaires : si je rentre un des 2 codes, la ligne juste au dessous se démasque", si je supprime ou rentre un autre code alors la ligne juste au dessous se masque.
Le pb est que je ne viens jamais ecrire manuellement dans les cellules de la colonne P. Les cellules P se remplissent en fonction des choix des menus deroulants.
il faudrait je pense modifier le code, en si changement dans les 3 menus déroulants ( soit colonne B-C-I) et que P = 288166530 ou 288166548 alors demasque L26 sinon rien
Est ce que vous pensez que c'est possible svp ?
Un grand merci à vous
Le Pingou
Messages postés
12227
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 janvier 2025
1 454
Modifié par Le Pingou le 30/03/2012 à 11:30
Modifié par Le Pingou le 30/03/2012 à 11:30
Bonjour,
Merci pour l'information.
Il est vraiment très difficile d'avoir les réponses aux questions posées !
Concernant le code il n'est pas utilisable dans ce cas puisque l'événement [Change] ne se produit pas sur la colonne [P].
Je vous le redis encore une fois: votre fichier exemple avec une dizaine de lignes (depuis la 25) serait un atout ... !
En plus : pourquoi la ligne 26 doit être masquée ou visible !
Salutations.
Le Pingou
Merci pour l'information.
Il est vraiment très difficile d'avoir les réponses aux questions posées !
Concernant le code il n'est pas utilisable dans ce cas puisque l'événement [Change] ne se produit pas sur la colonne [P].
Je vous le redis encore une fois: votre fichier exemple avec une dizaine de lignes (depuis la 25) serait un atout ... !
En plus : pourquoi la ligne 26 doit être masquée ou visible !
Salutations.
Le Pingou
Bonjour Le Pingou,
ai été un peu longue à répondre mais pas dispo hier...
Voici le code final qui fonctionne
ces modif ont été faites à partir de votre code.
Encore un grand merci à vous pour votre aide efficace.
Private Sub Worksheet_Change(ByVal Target As Range)
'Suis je en dehors de la plage qui nous interresse ? ...
If Intersect(ActiveCell, Range("B25:N41")) Is Nothing Then
'Si oui, je ne fais rien
Else
If Intersect(ActiveCell, Range("B25:B41")) Is Nothing Then
Else
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Application.EnableEvents = True
End If
'Si non, je prepare mes données, ligne enventuel à masquer
ThisRow = Target.Row
ThisRow = ThisRow + 1
If Cells(Target.Row, 16).Value = "" Then
'La cellule nous interessant est vide, alors je masque
Rows(ThisRow & ":" & ThisRow).Hidden = True
Else
'La cellule nous interressant s'est vu affécter une valeur, je demasque
Rows(ThisRow & ":" & ThisRow).Hidden = False
End If
End If
'End If
End Sub
ai été un peu longue à répondre mais pas dispo hier...
Voici le code final qui fonctionne
ces modif ont été faites à partir de votre code.
Encore un grand merci à vous pour votre aide efficace.
Private Sub Worksheet_Change(ByVal Target As Range)
'Suis je en dehors de la plage qui nous interresse ? ...
If Intersect(ActiveCell, Range("B25:N41")) Is Nothing Then
'Si oui, je ne fais rien
Else
If Intersect(ActiveCell, Range("B25:B41")) Is Nothing Then
Else
Application.EnableEvents = False
Target.Offset(0, 1) = Empty
Application.EnableEvents = True
End If
'Si non, je prepare mes données, ligne enventuel à masquer
ThisRow = Target.Row
ThisRow = ThisRow + 1
If Cells(Target.Row, 16).Value = "" Then
'La cellule nous interessant est vide, alors je masque
Rows(ThisRow & ":" & ThisRow).Hidden = True
Else
'La cellule nous interressant s'est vu affécter une valeur, je demasque
Rows(ThisRow & ":" & ThisRow).Hidden = False
End If
End If
'End If
End Sub