IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Masquer des lignes selon le contenu d'une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut Masquer des lignes selon le contenu d'une cellule
    Bonjour à tous,
    Je ne suis pas très douée en VBA, j'ai cherché une solution à mon pb hier soir jusqu'à très tard, sans succès.. Je ne comprends pas ce qui coince...
    Je souhaite masquer 4 lignes lorsqu'une formule affiche "masquer" dans ma cellule S4 et afficher les lignes lorsque la formule affiche "afficher", tout cela bien sûr de façon automatique.
    Voici le code que j'ai inséré au niveau de la feuille (je l'ai trouvé sur le forum et l'ai adapté à mon fichier mais j'ai du louper qqchose qqpart..

    Est-ce que quelqu'un peut m'aider à masquer ces lignes ?
    Merci beaucoup par avance pour votre aide,
    Je vous joins la partie en question de mon fichier : macro IB.xlsm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub '<-- si plusieurs cellules sont sélectionnées on quitte la procédure sinon ça bug
    If Target.Address = "$S$4" Then '<-- vérification que la modification se passe dans la cellule S4
        Select Case Target.Value
            Case "afficher": Rows("24:28").Hidden = False
            Case "masquer": Rows("24:28").Hidden = True
        End Select
    End If
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Le résultat d'une formule ne déclenche pas Worksheet_Change.
    Cet évènement peut être déclenché par la modification (saisie) des éléments qui composent la formule.
    C'est donc ces cellules sources qu'il faut tester au niveau du paramètre Target et non pas S4.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    Merci Menhir pour votre réponse.
    maintenant, je suis un peu plus perdue
    J'ai grace à vous compris que je devais changer ma cellule target, mais désormais je dois prendre en compte 2 cellules : N4 et O4. Quelle est la bonne formule dans ce cas pour remplacer If Target.Address = "$S$4" ?
    car mon montage ci-dessous ne fonctionne pas ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub '<-- si plusieurs cellules sont sélectionnées on quitte la procédure sinon ça bug
    If Target.Address = "N4:O4" Then '<-- vérification que la modification se passe dans la cellule S4
        Select Case Target.Value
            Case "<4": Rows("24:28").Hidden = False
            Case ">3": Rows("24:28").Hidden = True
        End Select
    End If
    End Sub

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    le probleme est que la valeur en S4 change via la formule qu'elle contient ors l'evenement change ne fonctionne que par une modification produite par l'utilisateur.

    Dans ton cas ce qui produit le changement en S4 c'est un changement de valeur en N4:O4.

    Essai de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If Target.Address = "$S$4" then 
       Select Case target.value
           Case "afficher": Rows("24:28").Hidden = False
           Case "masquer": Rows("24:28").Hidden = True
       End Select
    End If
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If Not Intersect(Target, Me.Range("N4:O4")) Is Nothing Then '<-- verification que la modification se passe en N4:O4
        Select Case Me.Range("S4").Value 'on regarde ce que la formule en  S4 renvoi
            Case "afficher": Me.Rows("24:28").EntireRow.Hidden = False
            Case "masquer": Me.Rows("24:28").EntireRow.Hidden = True
        End Select
    End If
    pour info intersect renvois un objet de type range qui correspond à la zone d'intersection entre 2 plages (objets de type range). sinon intersect renvois "rien"
    pour traduire le if en francais cela donne

    si l'intersection entre les plages (Target et Me.Range("N4:O4")) n'est pas rien alors ...

    A+

    Modification : arf !!! désolé je suis trop lent à répondre du coup j'arrive après la guerre !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    Bonjour Phil Free et merci pour l'explication !
    J'ai bien inséré ton code, mais il ne se passe rien.. je joins le fichier avec ton code inséré, au cas où : macro IB.xlsm
    que signifient les "Me" devant Rows par ex ?

  6. #6
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour à Tous,

    ATTENTION :

    N4:O4 signifie => de N4 jusqu'à O4 et pas N4 et O4

    Pour faire et c'est ";"

    donc N4;O4 me parrait plus juste

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    Merci Igloobel, je note cette subtilité pour mes prochaines macro.
    j'ai fait la modif dans mon fichier, mais ça ne fonctionne toujours pas avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub '<-- si plusieurs cellules sont sélectionnées on quitte la procédure sinon ça bug
    If Not Intersect(Target, Me.Range("N4;O4")) Is Nothing Then '<-- verification que la modification se passe en N4:O4
        Select Case Me.Range("S4").Value 'on regarde ce que la formule en  S4 renvoi
            Case "afficher": Me.Rows("24:28").EntireRow.Hidden = False
            Case "masquer": Me.Rows("24:28").EntireRow.Hidden = True
        End Select
    End If
    End Sub

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    il n'a pas l'air d'aimer le ";" entre N4 et O4
    voir en pièce jointe >> Nom : Capture d’écran 2019-11-05 à 12.15.00.jpg
Affichages : 1620
Taille : 159,0 Ko

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    N4:O4 signifie => de N4 jusqu'à O4 et pas N4 et O4
    D'un autre côté, ces deux cellules étant contigües, c'est un peut la même chose, non ?

    Citation Envoyé par idabonnin Voir le message
    mon montage ci-dessous ne fonctionne pas ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "N4:O4" Then
    Ce que dit ce code code c'est : je veux qu'il n'y ait qu'une cellule mais que ce soit l'adresse de deux cellules.
    Forcément, ça ne va pas le faire.

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("N4:O4") Is Nothing Then
    La seconde ligne signifie : si la zone commune entre Target et N4:O4 n'est pas vide, alors...

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour Igloobel,

    Citation Envoyé par Igloobel Voir le message
    Bonjour à Tous,

    ATTENTION :

    N4:O4 signifie => de N4 jusqu'à O4 et pas N4 et O4

    Pour faire et c'est ";"

    donc N4;O4 me parrait plus juste
    euh alors non ! le ; pour les formules dans une feuille excel en version française je veux bien mais pour le VBA c'est une virgule !

    donc idabonnin la bonne syntaxe c'est comme suit :

    le Me cela permet de faire reference à la feuille sur laquelle tu travailles. (me => moi la feuille) Ici ce n'est pas utile mais pour te donner de bonnes habitudes c'est pas inutile.

    Je viens de tester ton deuxiemes fichier et cela fonctionne de mon coté donc... comprend pas !!!

    A+

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    "," ou ":" pas de différence, ça ne fonctionne pas.

    voici le code actuellement en place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("N4:O4")) Is Nothing Then
        Select Case Me.Range("S4").Value 'on regarde ce que la formule en  S4 renvoi
            Case "afficher": Me.Rows("24:28").EntireRow.Hidden = False
            Case "masquer": Me.Rows("24:28").EntireRow.Hidden = True
        End Select
    End If
    End Sub
    et voici ce que je vois : les lignes ne sont pas masqués (les textes ont disparus car j'avais mis une fonction dans les cellules, mais les boutons et les lignes sont toujours là)
    Nom : Capture d’écran 2019-11-05 à 13.42.50.jpg
Affichages : 1722
Taille : 269,4 Ko

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Y a-t-il au moins un évènement qui entraîne la procédure?
    Essaie d'intégrer une instruction Msgox à ton code pour vérifier.

    D'autre part, tu peux simplifier ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count > 1 Then Exit Sub
     
    If Not Intersect(Target, Range("N4:O4")) Is Nothing Then
            Rows("24:28").EntireRow.Hidden = ([s4] = "masquer")
    End If
     
    End Sub

  13. #13
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Phil Free Voir le message
    Bonjour Igloobel,

    euh alors non ! le ; pour les formules dans une feuille excel en version française je veux bien mais pour le VBA c'est une virgule !

    donc idabonnin la bonne syntaxe c'est comme suit :

    le Me cela permet de faire reference à la feuille sur laquelle tu travailles. (me => moi la feuille) Ici ce n'est pas utile mais pour te donner de bonnes habitudes c'est pas inutile.

    Je viens de tester ton deuxiemes fichier et cela fonctionne de mon coté donc... comprend pas !!!

    A+
    Mais oui tu as totalement raison j'ai été un peu rapide dans mon post

    Le pire c'est que je le sais parfaitement

    En plus comme me l'a rapellé Menhir O suit N dans l'alphabet ...

    Vraiment désolé

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 16
    Par défaut
    Est-ce que quelqu'un aurait une solution pour que l'action des boutons radio suffise à déclencher la macro ?
    Merci à tous pour votre aide..

Discussions similaires

  1. Macro pour supprimer une ligne selon le contenu d'une cellule
    Par niboTD dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/01/2019, 15h26
  2. [XL-2016] TCD changer la source des données selon le contenu d'une cellule
    Par ceciledary dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2018, 22h40
  3. [XL-2002] Supprimer une ligne selon le contenu d'une cellule
    Par Alexis078 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/07/2014, 19h11
  4. [XL-2010] Générer des sons selon le contenu d'une cellule
    Par daniel.bernard dans le forum Excel
    Réponses: 0
    Dernier message: 07/04/2014, 18h37
  5. [XL-2003] VBA supprimer des ligne selon la date d'une cellule
    Par Scrabblouille dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2009, 23h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo