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 avec une condition


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 21
    Points : 7
    Points
    7
    Par défaut Masquer des lignes avec une condition
    Bonjour,

    Je veux masquer des lignes avec une condition dans Excel 2003.

    Si la cellule "a4" est à "O", afficher les lignes 21:28, si la cellule "a4" est à "N", masquer les lignes 21:28.

    En cherchant sur internet et dans un livre j'ai réussi à trouver quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Masque les lignes 21 à 28 si la case A4 est égal à N
    If Range("a4") = "N" Then
        Rows("21:28").Select
        Selection.EntireRow.Hidden = True
        End If
     
    'Affiche les lignes 21 à 28 si la case A4 n'est pas égal à N
    If Range("a4") = "O" Then
        Rows("21:28").Select
        Selection.EntireRow.Hidden = False
        End If
    Je veux que ça fonctionne tout le temps sans que je sois obligée de demander d'exécuter la macro.

    Mon problème c'est que je n'ai aucune idée où je dois aller écrire cette formule car je commence dans ce language. Je suis dans Excel je vais dans Outils , macro ou dans Outils, Visual Basic éditor, mais je ne sais pas où aller ensuite.

    Merci de m'indiquer où écrire tout ça ou s'il y a un tutorial qui peut m'aider à comprendre le tout.

    Merci beaucoup

    mjp06

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour et bienvenue sur le forum,

    Dans ce cas il faut utiliser une procédure événementielle Worksheet_Change à placer non pas dans un module mais directement dans l'objet Feuil en question.

    Dans le Visual Basic Editor, colonne de gauche, double clic sur la feuille concernée (Feuil1 ou feuil2 ou Feuil3 ou ...) et insère le bout de code ci-dessous
    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 = "$A$4" Then '<-- vérification que la modification se passe dans la cellule A4
        Select Case Target.Value
            Case "N": Rows("21:28").Hidden = True
            Case "O": Rows("21:28").Hidden = False
        End Select
    End If
    End Sub
    La procédure (macro) sera automatiquement exécutée à chaque modification dans la cellule A4

    Plus d'explications dans le tuto ci-dessous
    Les évènements dans la feuille de calcul Excel
    .

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut mjp06, fring et le forum
    souris sur le nom de l'onglet de la feuille concernée
    Clic-droit => Menu contextuel>>Visualiser le code et tu colles la macro de
    fring.
    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 = "$A$4" Then '<-- vérification que la modification se passe dans la cellule A4
        Select Case Target.Value
            Case "N": Rows("21:28").Hidden = True
            Case "O": Rows("21:28").Hidden = False
        End Select
    End If
    End Sub
    A+

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup ça fonctionne très bien.

    Cependant j'ai remarqué en faisant des tests que si j'ajoute des lignes ou en enlève ça ne suit plus.

    Donc si ma cellule $A$4 (ça c'est encore bon)

    Est-ce que je peux lui dire d'afficher ou masquer la plage "note3" (qui fait référence aux lignes 21:28) au lieu de lui dire Rows("21:28"). J'ai remarqué que si j'ajoute une ligne dans une plage, la nouvelle ligne fait automatiquement partie de la plage, donc je ne serait pas obligé de corrigé la valeur de Rows...

    Merci encore mille fois,

    mjp06

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Oui, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("note3").EntireRow.Hidden = True 'ou False pour les réafficher

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2008
    Messages : 21
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup c'est super ! Vous m'avez sauvé beaucoup de temps !

    Bye,

    mjp06

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Il est d'usage, ici, lorsqu'on a obtenu ou trouvé réponse à son problème, de cliquer sur le bouton , en bas de discussion.

    Merci

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2019
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Target.Address
    Citation Envoyé par fring Voir le message
    Oui, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("note3").EntireRow.Hidden = True 'ou False pour les réafficher
    Bonjour,

    Pouvez vous m'aider?? Je voudrait savoir comme faire pour remplacer le terme ("$A$4") dans (If Target.Address = "$A$4" Then '<-- vérification que la modification se passe dans la cellule A4) par le nom défini la case A4.

    Par exemple si je défini la case A4 par Largeur_Voiture. est ce que je remplace directement comme cesi : If Target.Address = "Largeur_Voiture" Then '<-- vérification que la modification se passe dans la cellule A4)??????


    Merci d'avance

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Bien que ce ne soit pas vraiment dans le sujet de cette discussion et de plus très ancienne
    La propriété Address de l'objet Range a plusieurs arguments dont la valeur False rend l'a référence relative
    renvoie $A$1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     range("A1").Address(rowabsolute:=false)
    renvoie $A1

    Je te laisse découvrir la suite

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copier des lignes avec une condition
    Par gliglian dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/02/2009, 00h06
  2. [XI] Masquer des lignes sous une rupture
    Par albane82 dans le forum Deski
    Réponses: 9
    Dernier message: 27/11/2008, 10h41
  3. Ajout des données avec une condition
    Par jean sami dans le forum SQL
    Réponses: 2
    Dernier message: 15/09/2008, 06h21
  4. Copier des lignes si une condition se realise
    Par abalboul dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/01/2008, 06h49

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