Lancement d'une macro en automatique

Résolu
bouhaben79 Messages postés 7 Statut Membre -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
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. g Messages postés 1285 Statut Membre 578
     
    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
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  3. g Messages postés 1285 Statut Membre 578
     
    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
  4. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Bouhaben79
     
    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
  7. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  8. Bouhaben79
     
    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
  9. g Messages postés 1285 Statut Membre 578
     
    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
  10. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  11. Bouhaben79
     
    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
  12. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Il faut imbriquer les codes, je pourrais te le faire que dans la soirée
    0
  13. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  14. Bouhaben79
     
    Merci bcp pour ton aide le fichier fonctionne nikel, tu maitrise parfaitement excel.

    merci encore
    0
  15. Bouhaben79
     
    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
  16. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  17. Bouhaben79
     
    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
  18. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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