Formule Excel

Bonjour,

J'ai deux questions
1. J'ai une liste deroulante dans chaque cellule de ma colonne G (de G5 à G22) : une fois que toutes ces cellules sont renseignées avec un des choix de ma liste deroulante, je veux un message dans G23 "MAINTENANCE VALIDÉ"

2. Lorsque G23 Annonce "maintenance validé", mes collones de GàJ se masquent

Merci
Configuration: Android / Chrome 80.0.3987.149

13 réponses

Résumé de la discussion

Le problème porte sur une liste déroulante en G5:G22 et l’affichage de « MAINTENANCE VALIDÉE » en G23 lorsque toutes les valeurs sont renseignées, puis le masquage des colonnes associées. Des solutions proposées incluent une formule SI/NBVAL qui affiche le message lorsque NBVAL(G5:G22)=18 et une macro Worksheet_Change qui masque les colonnes G:J lorsque G23 contient le texte. D’autres propositions permettent d’étendre le masquage à plusieurs blocs (K:N, O:R, etc.) ou d’appliquer la logique sur plusieurs feuilles, en adaptant les plages ou en utilisant une boucle. En cas de besoin, il est possible d’étendre la vérification à l’ensemble des feuilles en parcourant une liste de plages et en appliquant la même condition pour afficher le message et déclencher le masquage.

Bobot (l’IA à votre service)
  1. De rien

    Si c'est fini, peux tu mettre le sujet à résolu (en haut dans ton premier message)

    Cdlmnt
    0
    1. J attends de valider mon projet avant de clôturer au cas où j aurai d autres questions
      0
  2. Le pb vient du fait que la dernière ligne n'est pas la même dans toutes les feuilles
    Const lifin = 22 ' dernière ligne
    Donc deux solutions (à toi de choisir)
    S1. Tu modifies la valeur de lifin dans chacun des modules (et c'est fini)
    S2. Dans mon retour, je m'y suis pris autrement pour ne pas avoir à faire la manip
    Je récupère la valeur de lifin (qui devient une variable) en recherchant dans les colonnes "D:F" le mot "Commentaire"
    je t'ai modifié le code dans Balances, Zebra et Soudeuses, qu'il te faudra recopier dans les autres modules (pas sur que ça te prenne moins de temps !)
    https://mon-partage.fr/f/VJyoCm1P/

    Cdlmnt
    0
    1. Merci, c'est parfait, j'ai effectivement changé la dernière ligne. Tout fonctionne. Je vous remercie pour tout vraiment vous êtes super
      0
  3. J'ai pas réussi, je vous ai copier mon tableau entier.
    https://mon-partage.fr/f/9vlZV8cf/

    Je souhaite appliquer la macro à toutes les feuilles qui suivent "balance"

    Merci encore vous me sauvez
    0
    1. peut être un pb d'adresse de début tableau
      Const codeb = 11     ' première colonne plage à traiter
      Const lideb = 5 ' première ligne plage à traiter
      Const lifin = 22 ' dernière ligne

      sinon envoies ton fichier avec trois feuilles à traiter

      Cdlmnt
      0
      1. De rien

        Non cela ne fonctionne pas
        Avec mon fichier ou avec le tien ?

        Cdlmnt
        0
        1. Dans le mien, quand je le copie dans chaque feuille, rien ne se passe sur les feuilles concernées pourtant c'est le meme tableau, memes colonnes, memes lignes, meme formules
          0
      2. Merci ça marche !! Par contre j'ai ce même tableau, dans plusieurs feuilles différentes, et je n'arrive pas à appliquer ce code dans chacune des feuilles. Comment faire ?

        Merci
        0
        1. Bonjour

          Tu colles ce code dans le module de la feuille à traiter

          Option Explicit
          
          Const codeb = 7     ' première colonne plage à traiter
          Const cofin = 131   ' denière colonne  EA
          Const lideb = 5     ' première ligne plage à traiter
          Const lifin = 22    ' dernière ligne
          
          Const nbco = 4      ' nbre colonnes à masquer par plage
          
          Private Sub Worksheet_Change(ByVal Target As Range)
          Dim co As Long, li As Long, plage As Range, co1 As String, co2 As String, adr As String
          If Target.Count > 1 Then Exit Sub
          co = Target.Column
          li = Target.Row
          adr = Cells(li, co).Address
          co1 = Split(adr, "$")(1)
          adr = Cells(li, co + nbco - 1).Address
          co2 = Split(adr, "$")(1)
          If (co - codeb) Mod nbco = 0 Then
            If li >= lideb And li <= lifin Then
              Set plage = Range(Cells(lideb, co), Cells(lifin, co))
              If Not Intersect(Target, plage) Is Nothing Then
                If Application.WorksheetFunction.CountBlank(plage) = 0 Then
                  Cells(lifin + 1, co).Value = "MAINTENANCE VALIDEE"
                  Application.Wait (Now + TimeValue("0:00:3"))    ' attend 3s avant de masquer
                  Columns(co1 & ":" & co2).EntireColumn.Hidden = True
                End If
              End If
            End If
          End If
          End Sub


          Une fois la première colonne de la plage (de 18 lignes et 4 colonnes) à traiter est remplie, la macro se lancera
          Si les adresses ne sont plus les mêmes dans ton fichier, tu modifies les valeurs des constantes (Const) en début de code
          https://mon-partage.fr/f/ySZVPThA/

          Cdlmnt
          0
          1. 0
            1. As tu vu ma proposition (post 14) ?
              0
            2. @ccm81Désolée du retard je n etais plus sur le projet.
              Votre proposition fonctionne. Pouvez vous m expliquer comment faire ? Merci
              0
          2. Bonjour

            Pour le masquage, il va falloir passer par une macro
            https://www.cjoint.com/c/JEsi0TjdsWB

            Sinon en G23
            =SI(NBVAL(G5:G22)=18;"maintenance validée";"")

            Cdlmnt
            0
            1. Merci,
              Je ne sais pas comment ajouter et executer cette macro ?
              0
            2. Une autre question svp. Je souhaite appliquer la meme macro pour les plages (elles se masquent une fois "maintenance terminée"
              K : N
              O : R
              S : V
              W :Z
              AA : AD
              AE : AH
              AI : AL
              AM : AP
              AQ : AT
              AU : AX
              AY : BB
              BC : BF
              BG :BJ
              BK : bN
              BO : BR
              BS : BV
              BW :BZ
              CA : CD
              CE : CH
              CI : CL
              CM : CP
              CQ : Ct
              CU : CX
              CY : DB
              DC : DF
              DG : DJ
              DK : DN
              DO : dR
              DS : dv
              DW :dZ
              Ea : ed
              0
          3. Bonjour

            Pour le 1. cette formule

            =SI(NB.VIDE(G5:G22)=0;"MAINTENANCE VALIDÉE";"")

            Pour le 2. Il faut une macro pour un masquage automatique.

            Sinon sélectionner en cliquant en haut sur la tête des colonnes (clic sur G et glisser vers J en maintenant le clic de la souris) puis clic droit et masquer ; c'est aussi bien.

            Cordialement
            0
            1. Bonjour

              1) Pour le message en G23 une formule =SI(NBVAL(G5:G22)=18;"MAINTENANCE VALIDÉE";"")

              2) Pour le masquage des colonnes il faut une macro
              Private Sub Worksheet_Change(ByVal Target As Range)
              If Range("G23") = "MAINTENANCE VALIDÉE" Then
              Columns("G:J").Select
                  Selection.EntireColumn.Hidden = True
                  End If
              End Sub

              dlmnt
              Via
              0
              1. Merci,
                Je ne sais pas comment creer et appliquer la macro
                0
              2. @KarlyneLoriauTu fais ALT+F11 pour ouvrir l'éditeur VBA
                Tu copies ma macro
                Tu double clic sur nom de la feuille où l'appliquer dans l'arborescence à gauche
                tu colles la macro dans la page blanche et tu fermes l'éditeur
                0
              3. @via55Super merci beaucoup !!!!
                0
              4. @via55Une autre question svp. Je souhaite appliquer la meme macro pour les plages (elles se masquent une fois "maintenance terminée"
                K : N
                O : R
                S : V
                W :Z
                AA : AD
                AE : AH
                AI : AL
                AM : AP
                AQ : AT
                AU : AX
                AY : BB
                BC : BF
                BG :BJ
                BK : bN
                BO : BR
                BS : BV
                BW :BZ
                CA : CD
                CE : CH
                CI : CL
                CM : CP
                CQ : Ct
                CU : CX
                CY : DB
                DC : DF
                DG : DJ
                DK : DN
                DO : dR
                DS : dv
                DW :dZ
                Ea : ed

                Svp
                0
              5. @KarlyneLoriauDans la macro tu modifies la ligne
                Columns("G:J").Select
                en Columns("G:ED").Select
                0