Démasquer une ligne en fonction valeur cellul

Résolu/Fermé
pseudomi - 27 mars 2012 à 15:19
 pseudomi - 3 avril 2012 à 13:14
Bonjour,

Apres avoir essayé tout un tas de macros je viens vers vous pour avoir votre aide:
sur ma feuille1 les lignes visibles sont les lignes impaires à partir de la ligne 25.
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

voici le code (trouvé plusieurs fois ds les forums) que j'ai mis dans module
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 'masque les lignes 26
End If
End Sub

ce code ne fonctionne pas.
Si vous pouviez me trouver une solution...
Merci à vous
A voir également:

15 réponses

Pitu Messages postés 1440 Date d'inscription jeudi 3 octobre 2002 Statut Contributeur Dernière intervention 5 janvier 2013 125
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 :

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
0
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+
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
28 mars 2012 à 09:50
Bonjour pseudomi,
Votre problème est-il résolu ?
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
28 mars 2012 à 11:07
Bonjour pseudomi,
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
0

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
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
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 ?
0
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
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
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 ?
0
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
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...
0
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
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
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 ... !
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
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.
0
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
0
Le Pingou Messages postés 12041 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 22 avril 2024 1 426
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
0
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
0