Lancement d'une macro en automatique

Résolu
Bonjour,

<Je souhaiterais créer une macro qui me permet de masquer des lignes sur plages différents après saisie d'une donnée dans une cellule

Exemple : Si A1 = 1 les lignes 8:12 et 23:29 se cachent

Biensur je voudrais que cette macro se lance dès saisie de la valeur dans la cellule A1

Qui peut m'aider sur ce sujet

Merci d'avance>

17 réponses

  1. Bonjour,

    Code à copier dans le module de feuille:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Range("A1") = 1 Then
    Masquer
    ElseIf Range("A1") <> 1 Then
    Afficher
    End If
    End Sub
    


    Code à copier dans un module standard:

    Sub Masquer()
        Rows("8:12").Select
        Selection.EntireRow.Hidden = True
        Rows("23:29").Select
        Selection.EntireRow.Hidden = True
        Range("A1").Select
       End Sub
    Sub Afficher()
        Rows("7:30").Select
        Selection.EntireRow.Hidden = False
        Range("A1").Select
    End Sub
    


    Cordialement.
    0
    1. Salut,

      clic droit sur l'onglet de feuille concernée/Visualiser le code et colle ce code dans la partie vide de la page qui s'ouvre

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A1")) Is Nothing Then
      If [A1] = 1 Then [8:12,23:29].EntireRow.Hidden = True
      If [A1] = 0 Then [8:12,23:29].EntireRow.Hidden = False
      End If
      End Sub

      pour revenir à ta feuille Excel clic en haut à droite sur l'icone Excel.
      lorsque tu saisiras 1 en A1 les lignes se masquerons et 0 pour les afficher
      0
      1. Bonjour Mike-31,

        Je préfère ton code.
        La 4 ème ligne devrait être modifiée ainsi

        If [A1] <> 1 Then [8:12,23:29].EntireRow.Hidden = False
        afin d'annuler le masquage lorsque A1 passe de 1 à un nombre différent de 0.

        Cordialement.
        0
        1. Re,

          Oui pourquoi pas, à part qu'il y ai d'autres lignes à masquer en fonction d'un valeur ou que la cellule contienne d'autre valeurs.
          A suivre
          0
          1. Bonjour

            D'abord merci pour votre aide, les macros que vous m'avez donné fonctionnes
            Par contre je voudrais aller jusqu'à 12 conditions commment faire?

            c'est à dire
            A1 = 1 masquer Ligne 10 à 23 et 36 à 49
            A1 = 2 masquer Ligne 11 à 23 et 37 à 49
            A1 = 3 masquer Ligne 12 à 23 et 38 à 49
            ect ect

            merci d'avance
            0
            1. Re,

              C'est bien ce à quoi je pensais

              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, Range("A1")) Is Nothing Then
              If [A1] = 1 Then [8:12,23:29].EntireRow.Hidden = True
              If [A1] = 2 Then [11:23,37:49].EntireRow.Hidden = True
              If [A1] = 3Then [12:23,38:49].EntireRow.Hidden = True
              If [A1] = 0 Then [8:49].EntireRow.Hidden = False
              End If
              End Sub

              il est possible que tu souhaites masquer les lignes tributaires de la valeur 2 ou 3 en A1 lorsque A1 est égale à 1
              si c'est le cas le préciser pour en tenir compte dans le code
              0
              1. Merci Mike ça fonctionne parfaitement j'ai même rajouté une 3ème plages de lignes à cacher ou afficher

                par contre je voulais me servir de vos macros pour faire la meme chose avec des feuilles c'est àd ire cacher et afficher les onglet voici ce que j'ai fait

                Module de la feuille

                Private Sub Worksheet_Change2(ByVal Target As Range)

                If Not Intersect(Target, Range("B3")) Is Nothing Then
                If [B3] = 1 Then ["Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6"].SelectedSheets.Visible = False
                If [B3] = 0 Then ["Ref 1", "Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6"].SelectedSheets.Visble = True
                End If
                End Sub

                Module normal

                Sub Masquersheet()
                Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
                SelectedSheets.Visible = False
                Range("B3").Select
                End Sub
                Sub Affichersheet()
                Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
                SelectedSheets.Visible = True
                Range("B3").Select
                End Sub

                Il me met erreur 424 "objet" quand je fait F8 il m'indique que mon probleme vient de la ligne "Range ("B3") select

                Qu'en pensez vous?

                Merci
                0
                1. Bonjour,

                  En attendant une meilleure solution essaie ceci:

                  Private Sub Worksheet_Change(ByVal Target As Range)
                  If Not Intersect(Target, Range("B3")) Is Nothing Then
                  If [B3] = 1 Then
                  Sheets("Ref 1").Visible = False
                  Sheets("Ref 2").Visible = False
                  Sheets("Ref 3").Visible = False
                  Sheets("Ref 4").Visible = False
                  Sheets("Ref 5").Visible = False
                  Sheets("Ref 6").Visible = False
                  End If
                  If [B3] = 0 Then
                  Sheets("Ref 1").Visible = True
                  Sheets("Ref 2").Visible = True
                  Sheets("Ref 3").Visible = True
                  Sheets("Ref 4").Visible = True
                  Sheets("Ref 5").Visible = True
                  Sheets("Ref 6").Visible = True
                  End If
                  End If
                  End Sub


                  Cordialement.
                  0
                  1. Re,

                    Je m'étais absenté, si tu souhaites depuis la cellule B3 de la feuille1 masquer ou afficher des onglets, clic droit sur l'onglet de ta feuille1/Visualiser le code et colle ce code

                    Private Sub Worksheet_Change(ByVal Target As Range)
                    Select Case Range("B3").Value
                    Case Is = "1"
                    Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
                    ActiveWindow.SelectedSheets.Visible = False
                    Case Is = "0"
                    For Each Sh In ThisWorkbook.Sheets
                    Sh.Visible = True
                    Next
                    End Select
                    Sheets("Feuil1").Activate
                    End Sub

                    mais attention tu ne peux utiliser la syntaxe qu'une seule fois
                    Private Sub Worksheet_Change(ByVal Target As Range)

                    Comment ce fait il que tu ais
                    Private Sub Worksheet_Change2(ByVal Target As Range)

                    A+
                    Mike-31

                    Une période d'échec est un moment rêvé pour semer les graines du savoir.
                    0
                    1. Le problème c'est que j'ai déjà un code Private Sub Worksheet_Change(ByVal Target As Range) sur cette feuille (le code est celui précédement communiquer par vos soins pour cacher et afficher le lignes)

                      Comment faire?
                      0
                      1. Re,

                        Il faut imbriquer les codes, je pourrais te le faire que dans la soirée
                        0
                        1. Re,

                          Colle ce code dans les propriétés de ta feuille 1

                          Private Sub Worksheet_Change(ByVal Target As Range)
                          Select Case Range("A1").Value
                          Case Is = "1"
                          [8:12,23:29].EntireRow.Hidden = True
                          Case Is = "2"
                          [11:23,37:49].EntireRow.Hidden = True
                          Case Is = "3"
                          [12:23,38:49].EntireRow.Hidden = True
                          Case Is = "0"
                          [8:49].EntireRow.Hidden = False
                          End Select
                          Select Case Range("B3").Value
                          Case Is = "1"
                          Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
                          ActiveWindow.SelectedSheets.Visible = False
                          Case Is = "0"
                          For Each Sh In ThisWorkbook.Sheets
                          Sh.Visible = True
                          Next
                          End Select
                          Sheets("Feuil1").Activate
                          End Sub
                          0
                          1. Merci bcp pour ton aide le fichier fonctionne nikel, tu maitrise parfaitement excel.

                            merci encore
                            0
                            1. Bon je reviens, j'ai un autre probleme que est apparu une fois la macro terminée
                              Sur la feuille ou je rentre les datas pour cacher les lignes et les feuilles
                              je dois rentrer des données manuellement dans certainement cellule et quand je rentre la donnée ça me met Erreur 1004 comment enlever ça.
                              pour info sur les autres feuilles ça ne me le fait pas.

                              Voici la macro

                              Private Sub Worksheet_Change(ByVal Target As Range)
                              Select Case Range("B3").Value
                              Case Is = "1"
                              [11:24,37:50,69:82].EntireRow.Hidden = True
                              Case Is = "2"
                              [12:24,38:50,70:82].EntireRow.Hidden = True
                              Case Is = "3"
                              [13:24,39:50,71:82].EntireRow.Hidden = True
                              Case Is = "4"
                              [14:24,40:50,72:82].EntireRow.Hidden = True
                              Case Is = "5"
                              [15:24,41:50,73:82].EntireRow.Hidden = True
                              Case Is = "6"
                              [16:24,42:50,74:82].EntireRow.Hidden = True
                              Case Is = "7"
                              [17:24,43:50,75:82].EntireRow.Hidden = True
                              Case Is = "8"
                              [18:24,44:50,76:82].EntireRow.Hidden = True
                              Case Is = "9"
                              [19:24,45:50,77:82].EntireRow.Hidden = True
                              Case Is = "10"
                              [20:24,46:50,78:82].EntireRow.Hidden = True
                              Case Is = "11"
                              [21:24,47:50,79:82].EntireRow.Hidden = True
                              Case Is = "12"
                              [22:24,48:50,80:82].EntireRow.Hidden = True
                              Case Is = "13"
                              [23:24,49:50,81:82].EntireRow.Hidden = True
                              Case Is = "14"
                              [24:24,50:50,82:82].EntireRow.Hidden = True
                              Case Is = "0"
                              [8:90].EntireRow.Hidden = False
                              End Select
                              Select Case Range("B3").Value
                              Case Is = "1"
                              Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "2"
                              Sheets(Array("Ref 3", "Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "3"
                              Sheets(Array("Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "4"
                              Sheets(Array("Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "5"
                              Sheets(Array("Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "6"
                              Sheets(Array("Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "7"
                              Sheets(Array("Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "8"
                              Sheets(Array("Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "9"
                              Sheets(Array("Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "10"
                              Sheets(Array("Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "11"
                              Sheets(Array("Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "12"
                              Sheets(Array("Ref 13", "Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "13"
                              Sheets(Array("Ref 14", "Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "14"
                              Sheets(Array("Ref 15", "Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "15"
                              Sheets(Array("Data")).Select
                              ActiveWindow.SelectedSheets.Visible = False
                              Case Is = "0"
                              For Each Sh In ThisWorkbook.Sheets
                              Sh.Visible = True
                              Next
                              End Select
                              Sheets("Détail Calcul Cost").Activate
                              End Sub

                              Merci d'avance
                              0
                              1. Re,

                                Déjà tu utilises la cellule B3 pour paramétrer tes colonnes et la même cellule pour paramétrer tes colonnes avec les mêmes valeurs.
                                Alors soit tu utilises deux cellules différentes exemple B2 et B3 ou tu attribues des numéros différents, dans ce cas ces lignes au milieu du code sont inutiles.

                                End Select
                                Select Case Range("B3").Value

                                Lorsque tu saisis par exemple 15 en B3 que veux tu faire, afficher toutes les feuilles et masquer la feuille Data et idem pour les autres numéros, c'est cela ?
                                0
                                1. Bonjour

                                  Tu as raison 15 ne servait à rien je l'ai supprimé
                                  Par exemple quand je mets 3 dans une cellule je veux que les lignes 13 à 24, 30 à 50 et 71 à 82 soient cachées ainsi que les l'onglet Ref 3 à ref 15 + Onglet Data.

                                  Je me suis aperçu que lorsque B3 est = 0 je peux écrire dans n'importe quelle cellule sans erreur 1004, au contraire quand je mets une valeur diff de 0 dans B3 et qu'après je veux écrire des choses dans une cellule lambda j'ai l'erreur 1004 qui apparait.

                                  J'ai essayer d'utiliser B3 pour cacher les lignes et B2 pour cacher les onglets mais le résultat est identique.

                                  Merci d'avance
                                  0
                                  1. Re,

                                    Bizarre, je viens de tester le code sans le moindre problème, teste sur mon fichier voir si tu rencontre le même problème.
                                    B2 masque ou affiche les lignes et B3 les feuilles.
                                    j'ai ajouté deux lignes de code pour éviter de voir les déplacements pendant l'exécution du code

                                    https://www.cjoint.com/?BCfnMeSUFaf
                                    0