AUTOMATISATION MASQUAGE / AFFICHAGE LIGNES DANS EXCEL

Résolu
Jemex Messages postés 11 Statut Membre -  
touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -
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

15 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. Jemex Messages postés 11 Statut Membre
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jemex Messages postés 11 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Jemex, excusez moi d' être intervenu
      Vous avez donc eu raison de ne pas me dire Bonjour
      0
  7. Jemex Messages postés 11 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Très poli ce Jemex
      La fermeture du post ne va pas tarder
      0
  8. Jemex Messages postés 11 Statut Membre
     
    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
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  10. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  11. Jemex Messages postés 11 Statut Membre
     
    Merci à tous et bonne soirée.
    0
  12. Jemex Messages postés 11 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  13. Jemex Messages postés 11 Statut Membre
     
    Bonjour,

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

    Bon après-midi.

    J.Michel
    0
  14. Jemex Messages postés 11 Statut Membre
     
    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
  15. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. Jemex Messages postés 11 Statut Membre
       
      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
    2. Jemex Messages postés 11 Statut Membre
       
      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
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      télécharge le fichier exemple que j'avais mis, tu comprendras mieux.
      Et lis également le commentaire du post...
      eric
      0
  16. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      il s'agit de la Private Sub Worksheet_Change
      Visible ici
      eric
      0
    2. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
       
      Merci Eric
      A plus
      0