Masquer ligne sous condition

Résolu

Bonjour, pourriez vous me dire la formule de macro pour masquer une ligne sous condition svp merci

Je vous explique : Je voudrais que la ligne 11 reste afficher pour marquer la raison social quand il y a marqué " Pro " en D5 mais par contre si je marque perso en D5 je voudrais masquer la ligne 11.

Si vous pouvez me donner la formule merci beaucoup


Macintosh / Opera 102.0.0.0

77 réponses

Résumé de la discussion

La problématique porte sur une macro Excel visant à masquer la ligne 11 si D5 contient « Perso » et à la laisser visible lorsque D5 affiche « Pro » afin d’afficher la raison sociale. Plusieurs réponses évoquent l’utilisation d’un déclencheur dans une colonne (par ex. P) et des mots-clés comme « oui », tout en discutant des différences entre saisir manuellement et coller une valeur et des limites liées au Mac et aux raccourcis. Certaines propositions s’appuient sur des événements de feuille et des codes VBA, tandis que d’autres estiment que distinguer le mode d’entrée (copie vs saisie) peut poser problème et qu’un comportement identique n’est pas garanti. Des pistes alternatives mentionnées incluent des protections de feuilles et des démonstrations de code, avec des références à des fichiers d’exemple et à la visualisation du code, sans convergence claire vers une solution unique.

Bobot (l’IA à votre service)
  1. Bonjour perlox34,

    Je ne trouve pas cette discussion copier sur une autre ligne sur CCM...


    0
    1. Quel plaisanterie ? 
      J’ai juste poser ma questions sur 2 forums diffèrent pour avoir différent avis avec différent personnes ! 
       

      Une personne intervenant sur commentcamarche.net n’intervient pas forcément sur forumexcel 
       

      Et puis en parlant de doublon sur commentcamarche.net tu n’a pas dû lire ma réponse sur la discussion " copier sur une autre ligne " je te laisse allez la voir 
       

      0
      1. Re,

        Je viens de découvrir ta plaisanterie de faire travailler plusieurs intervenants sur plusieurs Forums sans parler de l'ouverture en doublon de ta demande en faisant bidouiller les codes des uns par les autres et vice versa sur le même sujet.

        Ce comportement est un manque de respect a l'encontre de bénévoles qui donnent de leur temps pour t'aider.

        Je passe le statut de cette discussion en résolu et ma participation s'arrête ici.


        0
        1. Non juste quand " oui " est saisie ! 
          Mais en le copiant !

          Genre : La colonne de déclenchement est la colonne P 

          J’ai un mot qui est " oui " que je viens de copier 

          Je le colle dans la cellule P3 par exemple bah ça va pas copier la ligne. 
          par contre si par dessus la cellule P3 je viens taper manuellement " oui " là ça viens se copier 

          tu vois ce que je veux dire ? 
           

          Quand je remplie le formulaire et je viens faire ajouter ça me copie les valeurs donc j’aimerai que ça déclenche même en copiant !

          tu vois ? 

          0
          1. Ah non ça ce n'est pas possible, quelque soit le mode dont la cellule est renseignée OUI ou oui Excel déclenchera le code 

            0
        2. Re,

          tout est possible mais bonjour le code, par contre je n'ai pas tout compris, dans la colonne de déclenchement P tu veux déclencher quelque soit le mot saisi, c'est cela ?


          0
          1. Je sais qu'il faut que je me perfectionne mais avec mon boulot je n'ai vraiment pas le temps c'est pour ça que je pose pleins de questions .. 

            Merci en tous cas pour tous ces informations c'est vraiment vraiment cool et ça marche a merveille mais j'aimerai quand même savoir s'il serai possible de modifier quelque reglage aha. 

            En faite cela fonctionne parfaitement mais il faut que je vienne dans la celulle manuellement et marquer " OUI " pour que ça se copie. 

            Manuellement pourquoi ? Je m'explique. 

            Je me suis crée un onglet " formulaire "' et j'ai crée une macro. 

            Le but c'est que je remplisse ce formulaire et ça me copie automatiquement ce que j'ai rentré dans l'onglet " client ".

            En faite ça m'insere une ligne et ça me copie toute les informations dans les cases correspondantes.  

            Mais en faite si je fais ça, comme c'est un copier/coller avec la macro dans la cellule

            ça ne va pas me copier la ligne mais par contre du coup si je viens manuellement ecrire " oui " ça se copie sans probleme. 

            Serait-il possible de faire quelque chose pour que du moment qu'il y a marqué " oui " dans la cellule ça la copie ? En copiant le mot " oui " biensur. 

            https://www.cjoint.com/c/MJAqN2jF5CP

            Voici le lien tu pourras voir par toi même l'onglet formulaire. 

            Mais c'est un autre fichier celui la il y a pas la macro mais t'a compris le délire. 

            Je veux juste savoir quel code rajouter pour que même si je copie un mot dans la cellule déclenchement ça me copie la ligne 

            Je sais pas si je me suis fais bien comprendre. 

            En tous cas merci pour ces informations 

            Et aussi est il possible d'enregistrer un excel en 2 format en même temps ? 

            Genre en xlsm et xlsx 

            Que j'ai 2 fichier qui s'enregistre en même temps merci 

            0
            1. Re,

              Target est la cellule dans laquelle on est intervenu

              If Target.Column <> 16 EXIT SUB dans ton cas la colonne pilote est la 16 éme soit P ce qui veut dire si une action est menée dans une autre colonne on sort de la procédure

              Target.Offset(0, -11) donc à partir de la cellule dans laquelle ont est intervenue on se déplace vers la gauche de -11colonnes, si ont voulait se déplacer vers la droite de 11 colonnes Target.Offset(0, 11)

              Sheets("Machine") pour identifier un onglet dans le code  Sheets c'est feuille et entre guillemets le nom de l'onglet concerné

              Range("F65536") je sélectionne la cellule F65536 qui était dans les anciennes versions d'Excel la dernière cellule de la colonne

              .End(xlUp) précédé de l'identification d'une cellule demande à Excel de remonter jusqu'à la première cellule non vide trouvée 

              Controle = Target.Offset(0, -11).Value Controle est une variable que j'ai nommée comme cela et qui va mémoriser le contenu de la cellule -11 à partir de la cellule cible a cet instant du déroulement du code

              Adresse = .Columns("F").Find(Controle).Address Adresse est également une variable que j'ai nommé .Columns("F") colonne de recherche  Find(Controle).Address (Controle).Address recherche la valeur mémorisée dans la variable Controle et address est l'adresse de la cellule défini par le code 

              Mais pour aller plus loin il faudrait te perfectionner


              0
              1. @Le Pingou merci de ton aide. Mais non ce n'est pas vraiment ça que j'ai besoin. 

                Car votre fichier coupe la ligne pour la copier dans un autre onglet. 

                Moi je voudrais garder la ligne tout en la copiant dans un autre onglet à l'aide d'un " oui ". 

                Mais Mike-31 m'a bien aider sur ce sujet et on a réussi a trouver un bon code. 

                Merci en tous cas de votre aide. 

                Bonne soirée. 

                0
                1. Merci du retour, oui il copie la ligne, mais il est possible de ne pas la supprimer...adapter le code...en conséquence.....!

                  Au passage salut amical Mike-31

                  Salutations.
                  Le Pingou

                  0
              2. Ok je pense qu'on ai bon aha juste pouvez vous m'expliquer les code que si a l'avenir je décide de changer que je comprenne. 

                Si jamais je dois changer de nom d'onglet, ça je sais que je dois modifier toute les mots " machine " en mon nouveau nom " d'onglet " 

                Si je change la colonne ou il y aura marquer le " oui " je sais qu'il faut que je modifie :  If Target.Column <> 16 ( que je modifie le chiffre 16 par mon nouveau numéro de colonne. Ex colonne C n°3 etc ... 

                Ensuite cette formule : Target.Offset(0, -11).Copy Destination:=Sheets("Machine").Range("F65536").End(xlUp)(2, 1) 

                J'ai bien compris que le -11 signifie que ça copie la 11ème cellule en allant vers la gauche de ma celulle n°16. donc la en l'occurence ça devrais me copier les celulles de ma colonne " E " donc ma colonne n° 5.

                Mais imaginons que mon " oui " est en colonne " A " donc en colonne n°1 et je veux copier la colonne A et D

                Pour la D je mets (0,+3) ? et pour la A je mets quoi ? (0,0) ? 

                Ensuite pour ce code : 

                Range("F65536")  Je comprends que je copie dans la colonne F mais que veux dire F65536 ? Ca va me copier jusqu'a la ligne 65536 ? Ou ca va me copier jusqu'a des lignes infinis ? Ou c'est juste le code pour que comprenne que ça dois copier en F ? 

                Ensuite pour ce bout de formule : 

                 Controle = Target.Offset(0, -11).Value Pourquoi (0, -11) ? 

                Et pour finir ce code : Adresse = .Columns("F").Find(Controle).Address ' ------- recherche la valeur du controle efface

                Pourquoi " F " ? 

                0
                1. Re,

                  A force de modifier le code une ligne avait été effacée remplace par ce code 

                  Private Sub Worksheet_Change(ByVal Target As Range)
                  Dim Controle As Variant, Adresse As String
                  On Error GoTo fin ' ---------------------------------------- gere les erreurs
                      If Target.Column <> 16 Then Exit Sub ' ----------------- limite le declenchement ˆ la colonne 11 soit K
                      If Target = "OUI" Or Target = "oui" Then ' ------------- condition de declenchement
                      Target.Offset(0, -11).Copy Destination:=Sheets("Machine").Range("F65536").End(xlUp)(2, 1)
                      Target.Offset(0, -7).Copy Destination:=Sheets("Machine").Range("I65536").End(xlUp)(2, 1)
                      Target.Offset(0, -6).Copy Destination:=Sheets("Machine").Range("J65536").End(xlUp)(2, 1)
                      Target.Offset(0, -5).Copy Destination:=Sheets("Machine").Range("K65536").End(xlUp)(2, 1)
                      Exit Sub ' --------------------------------------------- si erreur sort de la  procedure
                  fin: ' ----------------------------------------------------- si erreur arrte la procedure
                      End If ' ----------------------------------------------- fin de la procedure
                      
                      If Target = "" Then ' ---------------------------------- teste la cellule active
                      Controle = Target.Offset(0, -11).Value
                      With Sheets("Machine")
                      On Error GoTo erreur
                      Adresse = .Columns("F").Find(Controle).Address ' ------- recherche la valeur du controle efface
                          .Range(Adresse).EntireRow.Delete ' ----------------- supprime la ligne
                      End With
                      Exit Sub ' --------------------------------------------- sort de la procedure
                  erreur:
                      End If
                  End Sub
                   


                  0
                  1. Ok j'ai réussi c'est bon juste un petit probleme sur la suppression 

                    Regarde ton fichier, en faite on sais fais avoir car on avais mis le même nom. 

                    Mais si par exemple je mets : 

                    - Le contact 1 en " oui " ça copie bien 

                    - Le contact 2 en " oui " ça copie bien 

                    - Le contact 3 en " oui " ça copie bien 

                    - Le contact 4 en " oui " ça copie bien 

                    Mais dès que je supprime un " oui " peut importe la ligne ça me supprime le contact 1 car c'est le premier " oui ". 

                    En suite peut importe la ligne ou je supprime " oui " ça me supprime le contact 2 car c'est le deuxième " oui ". 

                    Exemple : J'ai supprimer le " oui " du contact 4 donc je veux que ça me supprime la ligne du contact 4 mais non ça me supprime la ligne du contact 1. 

                    En suite j'ai fais un autre test en supprimant le " oui " du contact 3 donc je veux que ça me supprime la ligne du contact 3 mais non ça me supprime la ligne du contact 2. 

                    Merci de voir ce que tu peux faire merci 

                    0
                    1. Non, c'est juste pour différencier chaque ligne


                      0
                      1. Mais c’est obligé de crée une mise en forme conditionnel ? 

                        0
                        1. Ok mais je comprends pas .. quand je copie le code ça ne marche pas .. ça copie sur les mauvaises ligne et ça ne s’efface pas quand j’efface le oui 

                          0
                          1. Re,

                            certainement parce que tu effaces plusieurs cellules en même temps onglet Liste colonne P


                            0
                            • 1
                            • 2
                            • 3
                            • 4