AUTOMATISATION MASQUAGE / AFFICHAGE LIGNES DANS EXCEL

Résolu/Fermé
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013 - 4 mars 2013 à 19:47
touroul Messages postés 470 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 17 juin 2024 - 8 mars 2013 à 12:22
Bonjour,

Je suis nouveau sur le forum que j'ai découvert récemment. Par consultation des messages laissés par chacun, j'ai déjà pu régler quelques problèmes qui pour moi étaient bien épineux avant de vous connaitre. Aussi, butant sur l'un d'entre eux, je me suis décidé à vous le soumettre.

Mon problème : je réalise actuellement une grille de chiffrage tarifaire qui comporte, dans une même feuille EXCEL :

- une première partie qui établi la liste et les prix inhérents de manière exhaustive de tous les équipements pouvant entrer dans la composition d'un produit donné. En sélectionnant par l'intermédiaire d'une liste déroulante chacun des équipements, liste placée sur chacune de leur ligne, je compose et je chiffre donc le produit proposé au client (produit dit "de base") et je défini les variantes ou options que nous allons lui proposer. Ce dernier choix provoque le chiffrage dans la seconde partie de ces variantes ou options.

- une seconde partie qui affichera donc les options et variantes retenues ainsi que le détails de leur chiffrage.

Pour ce faire, la liste déroulante indiquée ci-dessus permet un choix entre 3 valeurs :
- la valeur est à "1" : l'équipement est intégré au chiffrage de base
- la valeur est à "OPL" : l'équipement est intégré dans une variante qui elle peut être composée de plusieurs équipements; le chiffrage correspondant est provoqué par la saisie de cette valeur.
- la valeur est à "OPS" : l'équipement est proposé en option séparément. Le chiffrage correspondant est provoqué par la saisie de cette valeur.

Pour imager mon projet :
valeur 1 :je propose une cuisine complète selon un plan de base,
valeur : "OPL" : j'ajoute un meuble supplémentaire complet comprenant un caisson + des portes + des ferrures
valeur "OPS" : je remplace les façades des meubles blanches dans le prix de base par des façades "vieux chêne" en option,

J'ai donc prévu dans la seconde partie autant de zone que d'options ou variantes possibles.
Jusque là tout fonctionne mais je souhaite maintenant , afin de réduire la taille de l'impression de ce document, car naturellement nous n'utilisons que quelques options ou variantes chez un client, masquer les options et variantes non proposées donc inutiles

Pour ce faire, j'ai déterminé des groupes d'options (c'est à dire dans mon exemple les différents types de portes que je peux proposer), puis pour chacun de ces groupes, codifié l'état du groupe dans une colonne séparée ("o" : pas de variante de porte proposée ou équipement livré sans porte, "1" : une seule variante de porte proposée; "2" : 2 variantes de portes proposées ......) Ce codage se fait à partir des fonctions SI, appuyé sur la valeur retenue pour chacun des équipements concernés.

Dans l'exemple qui suit, pour un groupe donné, le groupe se compose de 3 équipements proposables et j'ai donc 2 variantes possibles. Le code du groupe se trouve dans la cellule AA36. La variante N°1 se trouve sur les lignes 271 à 278 et la N° 2 sur les lignes 279 à 285. J'ai inclus dans ma feuille la macro suivante :


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$AA$36" Then Macro1
End Sub

Sub Macro1()
''Masque les lignes 271 à 285 si la case AA36 est égal à zéro
If Range("aa36") = "0" Then
Rows("271:285").Select
Selection.EntireRow.Hidden = True
End If

''Masque les lignes 279 à 285 si la case AA36 est égal à un
If Range("aa36") = "1" Then
Rows("279:285").Select
Selection.EntireRow.Hidden = True
End If

'Affiche les lignes 271 à 285 si la case AA36 est égal à deux
If Range("aa36") = "2" Then
Rows("271:285").Select
Selection.EntireRow.Hidden = False
End If

' Macro1 Macro
' Macro enregistrée le 04/03/2013 par JM REVEL

End Sub

La macro1 fonctionne bien mais je ne parvient pas, par l'instruction Private Sub Worksheet_Change(ByVal Target As Range), à automatiser le mascage/affichage des lignes par simple choix de la valeur dans la liste déroulante de départ. Je fais sans doute une erreur mais laquelle ?

Pourriez-vous m'aider?
Je suis comme vous vous en doutez surement, débutant dans ce langage VBA mais tente malgré le manque de temps de me passionnner pour lui car manifestement il sera bien souvent LA solution à mes problèmes.

D'avance merci à tous


A voir également:

15 réponses

eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
Modifié par eriiic le 4/03/2013 à 20:00
Bonjour,

Si ton Private Sub Worksheet_Change est bien dans le module de la feuille concernée par de raison que ça ne marche pas.
Comme tu as parcouru le forum tu as dû remarqué que joindre un fichier était apprécié. Là on ne peut qu'essayer de deviner...

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 12:06
Bonjour Eriiic,

Je cherche à t'envoyer un fichier d'exemple mais je ne parviens pas à l'inclure dans ma réponse.

Comment fait-on ??

Merci d'avance.
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
5 mars 2013 à 12:17
Bonjour,
Déposer le fichier xls (réduit au nécessaire et anonymisé, avec les explications et éventuellement le résultat attendu) sur cjoint.com et coller ici le lien fourni.

eric

0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
5 mars 2013 à 12:18
Bonjour,

et salut Eric

Au passage:

pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse


Evite de mettre tes titres en majuscules qui est un signe de mécontentement voire de colère

https://www.commentcamarche.net/infos/25857-charte-de-commentcamarche-net-conseils-d-ecriture/#titre-du-message


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 13:55
Bonjour Eriic,

Ci-joint donc mon fichier exemple. Celui-ci reprend la macro décrite précedemment, adaptée naturellement à l'exemple.

https://www.cjoint.com/?3CfnXtjP46B

Je n'ai pas développé cette macro pour l'ensemble de l'exemple. Elle est donc associée uniquemùent à la valeur de la cellule B11. Si je change la valeur de cette cellule (liste déroulante), l'automatisme de mlaquer ou d'afficher les lignes dans la partie VARIOANTE / OPTION ne se produit

Pourriez-vous ml'aider.

D'avance merci.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
5 mars 2013 à 14:06
Jemex, excusez moi d' être intervenu
Vous avez donc eu raison de ne pas me dire Bonjour
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 15:12
Bonjour Eriic,

Merci pour le renseignement. Je vous ai donc transmis mon fichier exemple mais il semble que michel m l'ait intercepté.

Ne sachant pas si vous l'avez vu, je vopus repasse le lien et le commentaire fait précédemment :

"Ci-joint donc mon fichier exemple. Celui-ci reprend la macro décrite précedemment, adaptée naturellement à l'exemple.

https://www.cjoint.com/?3CfnXtjP46B

Je n'ai pas développé cette macro pour l'ensemble de l'exemple. Elle est donc associée uniquemùent à la valeur de la cellule B11. Si je change la valeur de cette cellule (liste déroulante), l'automatisme de masquer ou d'afficher les lignes dans la partie VARIANTE / OPTION ne se produit pas.

Pourriez-vous m'aider et m'indiquer mon erreur ? "

Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
5 mars 2013 à 15:25
Très poli ce Jemex
La fermeture du post ne va pas tarder
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 18:27
Bonsoir Michel,

Restez calme.

Il me semble deviner un ton ironique dans vos réponses, à moins que ce ne soit de la susceptibilité. Quoiqu'il en soit, soyez-en certain, ni l'une ni l'autre ne participent à élever le niveau de l'homme !

De mon côté, je vous rassure, je ne suis qu'un hônnete citoyen moyen. Rien de plus - rien de moins ! Aussi, je vous écris avec la plus grande politesse qui soit, que :

1 - il n'y a aucune autre intention dans l'écriture de mes textes en majuscule que celle de m'en faciliter la lecture, mon grand âge le nécessitant, Je prends toutefois note de votre conseil et je m'attacherai dorénavant à faire attention à ce point, la pensée ne m'étant jamais venue qu'un humain puisse en faire une telle interprétation !

2 - ne possédant pas vraiment la pratique des forums, sauf jusqu'à présent de les avoir de temps en temps consultés, il est sans doute vrai que je possède des lacunes. A devoir ironiser sur le sujet, cela peut paraître surprenant. N'avez-vous pas un jour débuté ? A moins que ce soit de l'humour et auquel cas je ne le comprends pas.

3 - je note au passage que vous semblez consacrer beaucoup de temps à des considérations qui n'ont rien à voir avec l'utilité de ce forum ... n'avez-vous pas autre chose à faire ?

Au delà de ces basses considérations, je ne suis pas venu sur ce site pour disserter de ce genre de choses mais pour y trouver, comme sans doute pour la très très grande majorité des participants, des conseils, des astuces et des solutions à mes problèmes.

Mes compétences soyez-en conforté, sont par ailleurs sans doute encore très limitées pour que je puisse en fournir à d'autres. Quoique, si j'observe bien, les problèmes des uns servent bien souvent ceux des autres. Dans tous les cas, cela viendra !

C'est, me semble-t-il, l'essence majeure d'un tel forum. Le reste ne m'importe peu.

Bonne soirée et merci quand même pour l'explication relative à l'insertion d'un fichier dans ce type de message.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
5 mars 2013 à 19:32
Si sa Seigneurie bavarde condescendait, malgré son age respectable, à lire la charte de ce forum comme cela existe sur tous les forums, peut-être percevrait il l'absurdité pédante de son sermon...

Je sais, mon brave Monsieur, c'est dur d'être confronté au bas peuple...

0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
5 mars 2013 à 20:04
Oui, tu es très poli.
Moi-même je suis très à cheval sur la politesse également, la règle sur un forum (comme dans la vie) est quand même de remercier tous les intervenants.
Et détrompe-toi, les interventions de michel ne sont pas basées uniquement sur la politesse et sont d'un très haut niveau sur excel.
Et il a bien raison d'être susceptible sur la politesse, on se fait un concours là-dessus d'ailleurs...
Comme tu t'es rattrapé sur la dernière phrase voici une proposition :
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Rows.EntireRow.Hidden = False    ' afficher toutes les lignes
    Select Case Target.Address
    Case "$B$11"
        ''Masque les lignes 34 à 44 si la case B11 n'est pas égal à "OPL"
        If [B11] <> "OPL" Then Rows("34:44").EntireRow.Hidden = True
    Case "$B$12" ' plusieurs tests
        If [B11] = 1 Then
            Rows("62:65").EntireRow.Hidden = True
        ElseIf [B11] = 2 Then
            Rows("66:70").EntireRow.Hidden = True
        ElseIf [B11] = "opt" Then
            Rows("69").EntireRow.Hidden = True
        End If
    End Select
    Application.ScreenUpdating = True
End Sub

Ton erreur : target.address = "$B$11", pas "$b$11"
eric

0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 20:08
Merci à tous et bonne soirée.
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
5 mars 2013 à 21:45
Bonsoir Eriic et par la même à Michel,

Tout d'abord un petit mot à Michel. Mes propos n'avaient pas pour volonté de lui nuire. Ils reflétaient simplement la perception que j'ai eu, sans doute à tort, de ses commentaires. Je mettrai ceci sur le compte de la jeunesse dans votre milieu. En tous cas, il n'était pas question pour moi de douter de ses compétences techniques ou alors pourquoi l'aurais-je remercier en bas de page. J'espère qu'il ne m'en voudra pas pour cet échange, je me répète sans doute à tort, un peu houleux. Pour finir sur le sujet, je ne suis pas pour autant un seigneur ni un donneur de leçon et de faire partie de la base ne me déplait pas non plus !

Un grand merci à Eric pour le projet qu'il m'a transmis. Il fonctionne parfaitement. Je vais m'atteler maintenant à le développer dans ma grille de chiffrage. Je vous tiendrai par principe informé lorque j'aurai fini. Peut-être entre temps germeront-elles de nouvelles questions ?

D'ailleurs, une question me taraude déjà : connaissez-vous une astuce pour que les cellules de choix puissent être toutes ramenées à une certaine valeur (sur commande) pour réinitialiser le chiffrage par exemple ?

Ebcore merci et bonne soirée à vous deux.

J.Michel
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
Modifié par eriiic le 6/03/2013 à 00:31
Le plus simple est de mettre ces valeurs par défaut dans une autre feuille (que tu peux masquer). Comme ça tu peux en changer les valeurs sans toucher le code, qui en est d'autant plus court.
Ex sur double-clic en A5 ou à mettre sur un bouton :
    Dim c As Range, plage As Range  
     ...  
    Set plage = Intersect(Target, [B8:B29])  
    If Not plage Is Nothing Then  
        For Each c In Intersect(Target, [B8:B29])  
            Select Case c.Address  
            ...  
            End Select  
        Next c  
    End If  

provoque la raz de de B8:B29.

mais comme plusieurs cellules peuvent être modifiées en même temps ça oblige à modifier le code précédent :
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim c As Range 
    Rows.EntireRow.Hidden = False    ' afficher toutes les lignes 
    If Intersect(Target, [B8:B29]) Is Nothing Then Exit Sub 
    Application.ScreenUpdating = False 
    For Each c In Intersect(Target, [B8:B29]) 
        Select Case c.Address 
        Case "$B$11" 
            ''Masque les lignes 34 à 44 si la case B11 n'est pas égal à "OPL" 
            If [B11] <> "OPL" Then Rows("34:44").EntireRow.Hidden = True 
        Case "$B$12"    ' plusieurs tests 
            If [B11] = 1 Then 
                Rows("62:65").EntireRow.Hidden = True 
            ElseIf [B11] = 2 Then 
                Rows("66:70").EntireRow.Hidden = True 
            ElseIf [B11] = "opt" Then 
                Rows("69").EntireRow.Hidden = True 
            End If 
        End Select 
    Next c 
    Application.ScreenUpdating = True 
End Sub 
Attention, le select aussi a changé.

A l'attention de michel : un truc tout bête sur lequel je viens seulement de réagir : un paste déclenche l'évènement change. C'est tellement évident en plus.
Ca pourra resservir :-)

eric
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
6 mars 2013 à 07:02
Bonjour Eric,

un truc tout bête sur lequel je viens seulement de réagir : un paste déclenche l'évènement change. C'est tellement évident en plus.

Effectivement, c'est noté; Merci et bonne journée :o)
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
6 mars 2013 à 15:10
Bonjour,

Merci à vous deux pour cette continuité. Je vais tenter d'implanter cela correctement.

Bon après-midi.

J.Michel
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
6 mars 2013 à 20:16
Bonsoir Eric et Michel,

J'ai mis en place le script modifié mais pas encore la nouvelle instructions qu'Eric à suggéré (et qui, si j'ai bien comrpis est destinée à la remise à zéero de la grille ?). Je n'ai pas compris quelles sont les valeurs à mettre dans la feuille séparée ?

Par ailleurs, la réflexion progressant, pour la remise à "zéro" de la grille pour un nouveau chiffrage, je vais avoir les problèmes suivants (voir exemple ci-joint) :

- B8 et B9 doivent être ramenée à "vide" car il s'agit simplement d'informations complémentaires saisies par l'opérateur et propre à un chiffrage. Par contre les autres cases B10 à B31 sont à ramener à la valeur "NR",
- parmi les cases B10 à B31, certaines peuvent être dépendantes d'une autre (exemple la case B17). La remise à"zéro" ne devra donc pas effacer les formules en place,
- enfin, cette remise à zéro concernera plusieurs zones non adjacentes dans la grille (exemple case E5 qui devrait être ramenée à "vide" puisqu'il s'agit là aussi d'une info.

Pourriez-vous encore m'aider ? Ma nullité me fait presque honte !

D'avance merci à tous.

https://www.cjoint.com/?3CgupcsvAP0
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
6 mars 2013 à 22:18
Bonjour,

Regarde si ça te va :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim data As Variant, i As Long
    If Intersect(Target, [$A$5]) Is Nothing Then Exit Sub
    If MsgBox("RAZ de la feuille. Confirmez-vous ?", vbQuestion + vbYesNo, "RAZ") = vbYes Then
        data = [Listes!A2].Resize([Listes!A65000].End(xlUp).Row - 1, 2)
        For i = 1 To UBound(data)
            Range(data(i, 1)) = data(i, 2)
        Next i
    End If
    Cancel = True
End Sub
https://www.cjoint.com/c/CCgwp0p3bcZ
Compléter la liste des références à réinitialiser en feuille Listes et double-cliquer sur A5.

eric
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
7 mars 2013 à 14:12
Bonjour,

Merci pour tout.

Je vais tâcher de reprendre le sujet dans la soirée car pour l'instant je ne peux pas le faire.

JMichel
0
Jemex Messages postés 11 Date d'inscription lundi 4 mars 2013 Statut Membre Dernière intervention 7 mars 2013
7 mars 2013 à 19:49
Bonsoir Eriic,

J'ai mis en place le RAZ. Super : cà marche !! Il reste un dernier détail, dans l'exemple que j'ai mis hier soir, je souhaiterai par exemple que le RAZ provoque le vidage des cellules B8 et B9, mais qu'il ramène également non pas à vide mais à la valeur "NR" les cases B10 à B31.

https://www.cjoint.com/?3CgupcsvAP0

Connais-tu aussi l'extension ?

Merci d'avance
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
7 mars 2013 à 22:55
télécharge le fichier exemple que j'avais mis, tu comprendras mieux.
Et lis également le commentaire du post...
eric
0
touroul Messages postés 470 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 17 juin 2024 16
7 mars 2013 à 07:22
Bonjour !

J'ai suivi vos pérégrinations techniques.

Mais je n'arrive pas à en extraire ce qui vous permet d'afficher/masquer certaines lignes en fonction du choix effectué dans la liste déroulante, ce qui m'intéresse aussi.

Pouvez-vous m'expliquer ?

Merci d'avance !
0
eriiic Messages postés 24595 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 2 septembre 2024 7 235
7 mars 2013 à 08:50
Bonjour,

il s'agit de la Private Sub Worksheet_Change
Visible ici
eric
0
touroul Messages postés 470 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 17 juin 2024 16
8 mars 2013 à 12:22
Merci Eric
A plus
0