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 dans un fichier Excel par commande VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut masquer des lignes dans un fichier Excel par commande VBA
    Bonjour à tous,

    Je suis nouvelle sur le Forum et j'espère que vous pourrez m'aider dans ma requête. J'aimerais masquer des lignes de mon fichier Excel via des demandes précises textes dans les cellules A2 et B2 qui renvoient au contenu de la colonne 4 de mon fichier.

    Vous allez me dire pourquoi ne pas appliquer tout simplement un autofilter et sélectionner dans la colonne 4 ce qui doit s'afficher!! mes responsables ne veulent pas voir le filtre ni même avoir la possibilité de sélectionner autre chose et voir d'autres résultats.

    J'ai mis en pièce jointe un fichier simplifié car le fichier d'origine peut contenir 300 à 500 lignes voire plus et un autofilter et assez compliqué puisque il ne faut rien oublier.

    Dans le fichier vous trouverez un soupçon de code dans l'onglet de la feuille1 qui ne marche pas trop... d'où votre aide Help!!

    Ce que j'aimerai c'est que lorsque j'inscris MIT dans la cellule B2 seules les lignes contenant dans la colonne 4 POL,POL2,TYM s'affichent.
    J'aimerai également avoir la possibilité de n'afficher qu'une demande exemple si j'inscris SLC2 dan la cellule A2 seule la ligne SLC2 s'affiche.
    Ah oui j'oubliais lorsque rien n'est inscrit dans les cellules A2 et B2 alors toutes les lignes sont masquées.

    Merci bcp pour votre aide précieuse


    Pièce jointe 225958

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bienvenue.
    Avant que Marc ... vienne rappeler certains principes avec vivacité, je te conseilles d'expliquer davantage ... en postant les "soupçons de code" en lieu et place d'un fichier.

  3. #3
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut
    Merci d'avoir précisé!

    voici ce que j'ai essayé de faire je continue à travailler dessus!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Application.ScreenUpdating = False
        If Target.Address = "$A$2" Then
                    If [A2] = Empty Then
                Range("D9:D15").EntireRow.Hidden = True
                 Exit Sub
            End If
            Set MyPlage = Range("D9:D15")
            For Each cell In MyPlage
                If cell.Value <> [A2] Then
                    cell.EntireRow.Hidden = True
                ElseIf cell.Value = [A2] Then
                cell.EntireRow.Hidden = False
                End If
            Next
        End If
        Application.ScreenUpdating = True
    End Sub

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re
    juste une petite question comme ca en passant
    Ah oui j'oubliais lorsque rien n'est inscrit dans les cellules A2 et B2 alors toutes les lignes sont masquées.
    ah!! oui!!! et comment tu veux taper en A2 ou B2 si elle sont invisibles

    c'était juste comme ca en passant comme personne ne te l'a demandé
    j'ai cru bon te faire entrevoir un 1 er problème de conception dans ton system hein!!....

    re
    bon a regarder ton exemple on est tranquile ca comence en ligne 9

    2 soucis

    si j'ai lc2 en B et que je tape en A2 quelle est la règle de priorité la A ou la B
    doit on effacer B si on tape dans A?
    doit ton empêcher de taper en A si B plein ?
    tout c'est des soucis de conception qui ne sont pas suffisamment pensés
    reprends ton énoncé et di nous avec ces nouveaux paramètres comment tu veux que cela fonctionne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut
    Bonjour Patricktoulon,

    Oui effectivement ce sont des problématiques que je n'avais pas encore mises en avant et qui se seraient présentées.

    Lorsque les deux B2 et A2 sont avec une sélection via la colonne 4 alors les deux affichent les lignes qui les concernent.
    B2 est prioritaire sur A2 dans les sens ou rien n'est inscrit dans A2.Autrement dit si rien n'est inscrit dans la cellule A2 seule la sélection dans B2 s'affiche.
    Lorsque les deux B2 et A2 sont vides alors toutes les lignes sont masquées.

    En espérant avoir été plus précise!

    Merci pour votre aide

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    Bonjour line 78

    voila une idée parmi tant d'autre
    a placer ce code dans le module du sheets concerné

    TAPE SLC2 EN MAJ OU MIT PUIS ENTER ET TU AURA CE QUE TU SOUHAITE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    'Ce que j'aimerai c'est que lorsque j'inscris MIT dans la cellule B2 seules les lignes contenant dans la colonne 4 POL,POL2,TYM s'affichent.
    ' j 'aimerai également avoir la possibilité de n'afficher qu'une demande exemple si j'inscris SLC2 dan la cellule A2 seule la ligne SLC2 s'affiche.
    ' Ah oui j'oubliais lorsque rien n'est inscrit dans les cellules A2 et B2 alors toutes les lignes sont masquées.
    'Ce que j'aimerai c'est que lorsque j'inscris MIT dans la cellule B2 seules les lignes contenant dans la colonne 4 POL,POL2,TYM s'affichent.
    ' j 'aimerai également avoir la possibilité de n'afficher qu'une demande exemple si j'inscris SLC2 dan la cellule A2 seule la ligne SLC2 s'affiche.
    ' Ah oui j'oubliais lorsque rien n'est inscrit dans les cellules A2 et B2 alors toutes les lignes sont masquées.
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case Target.Address
        Case "$A$2"
            Range("D9:D200").EntireRow.Hidden = False    'Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = False
            If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
            If [A2] = "SLC2" Then
                For Each cel In Range("D9", Cells(Rows.Count, 4).End(xlUp))
                    If cel <> "SLC2" Then cel.EntireRow.Hidden = True
                Next
            End If
        Case "$B$2"
            Range("D9:D200").EntireRow.Hidden = False    'Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = False
            If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
            param1 = "POL,POL2,TYM"
            If [b2] = "MIT" Then
                For Each cel In Range("D9", Cells(Rows.Count, 4).End(xlUp))
                    If Not param1 Like "*" & cel.Value & "*" Then cel.EntireRow.Hidden = True Else cel.EntireRow.Hidden = False
                Next
            End If
        End Select
        Application.ScreenUpdating = True
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Select Case Target.Address
        Case "$A$2": [A2:B2].Value = ""
        Case "$B$2": [A2:B2].Value = ""
        End Select
        If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
    End Sub
            End If
        End Select
        Application.ScreenUpdating = True
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Select Case Target.Address
        Case "$A$2": [A2:B2].Value = ""
        Case "$B$2": [A2:B2].Value = ""
        End Select
        If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut
    Bonjour PatrickToulon,

    Tout à bord merci bcp pour ton aide!


    J'ai appliqué le code dans ma feuille et celui-ci fonctionne bien. En revanche, la sélection dans la case A2 n'est pas spécifique à SLC2. SLC2 était un exemple.
    Quelque soit la sélection faite dans A2 (en correspondance avec la colonne 4), il faudrait afficher les lignes dans le fichier.

    Exemple:
    Si A2 vide rien ne s'affiche
    Si SLC2 est inscrit dans A2 seules les lignes SLC2 s'affichent
    Si POL est inscrit dans A2 seules les lignes POL s'affichent
    En résumé, Tout ce qui est inscrit dans la cellule A2 faisant référence à la colonne 4 doit s'afficher si aucune correspondance n'est trouvée aucune ligne doit s'afficher.

    J'avais commencé à travailler sur cette problématique en A2 en indiquant un code au début de la discussion et que voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Application.ScreenUpdating = False
        If Target.Address = "$A$2" Then
                    If [A2] = Empty Then
                Range("D9:D15").EntireRow.Hidden = True
                 Exit Sub
            End If
            Set MyPlage = Range("D9:D15")
            For Each cell In MyPlage
                If cell.Value <> [A2] Then
                    cell.EntireRow.Hidden = True
                ElseIf cell.Value = [A2] Then
                cell.EntireRow.Hidden = False

    Peut-on adapter cette nouvelle demande pour la cellule A2 à ton code?

    Merci à toi pour ton aide

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    et ben dis donc il faudrait savoir ou tu a mal toi

    bon si B2 n'est plus de la partie cela devrait être plus simple je regarderais cela demain en fin d'après midi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut
    Bonjour,

    ah ben si j'aimerai que B2 soit toujours de la partie. (rien ne change pour B2 il est tellement bien ce code!).

    juste lorsque que j'inscris dans A2 (SLC2 ou POL ou autre référence à la colonne 4) seules les lignes de ma sélection dans A2 s'affichent.

    J'aimerai également garder ton code avec MIT dans la sélection B2.

    Merci à toi

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut RE
    bonjour
    voila j'ai ajouté la similarité pour le A2
    si tu tape SLC2 TU AURA LA LIGNE SLC2
    SI TU TAPE POL TU AURA POL ET POL2
    etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    'Ce que j'aimerai c'est que lorsque j'inscris MIT dans la cellule B2 seules les lignes contenant dans la colonne 4 POL,POL2,TYM s'affichent.
    ' j 'aimerai également avoir la possibilité de n'afficher qu'une demande exemple si j'inscris SLC2 dan la cellule A2 seule la ligne SLC2 s'affiche.
    ' Ah oui j'oubliais lorsque rien n'est inscrit dans les cellules A2 et B2 alors toutes les lignes sont masquées.
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case Target.Address
        Case "$A$2"
            Range("D9:D200").EntireRow.Hidden = False    'Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = False
            If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
            If [A2] = "SLC2" Then
                For Each cel In Range("D9", Cells(Rows.Count, 4).End(xlUp))
                    If cel <> "SLC2" Then cel.EntireRow.Hidden = True
                Next
            End If
            For Each cel In Range("D9", Cells(Rows.Count, 4).End(xlUp))
                If cel Like "*" &  [A2]  & "*" Then cel.EntireRow.Hidden = False Else cel.EntireRow.Hidden = True
            Next
        Case "$B$2"
            Range("D9:D200").EntireRow.Hidden = False    'Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = False
            If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
            param1 = "POL,POL2,TYM"
            If [b2] = "MIT" Then
                For Each cel In Range("D9", Cells(Rows.Count, 4).End(xlUp))
                    If Not param1 Like "*" & cel.Value & "*" Then cel.EntireRow.Hidden = True Else cel.EntireRow.Hidden = False
                Next
            End If
        End Select
        Application.ScreenUpdating = True
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Select Case Target.Address
        Case "$A$2": [A2:B2].Value = ""
        Case "$B$2": [A2:B2].Value = ""
        End Select
        If [A2] & [b2] = "" Then Range("D9", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
    End Sub
    Sub truc()
        Cells.EntireRow.Hidden = False
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre averti
    Femme Profil pro
    autre
    Inscrit en
    Novembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Novembre 2016
    Messages : 14
    Par défaut
    Bonjour PatrickToulon

    Merci bcp pour ton aide tout fonctionne parfaitement.

    J'ai modifié le code de cette manière pour la cellule A2 cela correspond à ma demande. Il n'est pas facile de formuler de manière factuel sa pensée en informatique surtout quand on a pas l'habitude!! Encore désolée! En tout cas cela m'a donné envie d'apprendre en réalisant tout le potentiel du code. Si tu connais un site de cours ou formation dans le language VBA, ça m'intéresse??


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Select Case Target.Address
        Case "$A$2"
            Range("D13:D1000").EntireRow.Hidden = False    'Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = False
            If [A2] & [b2] = "" Then Range("D13", Cells(Rows.Count, 4).End(xlUp)).EntireRow.Hidden = True
            If [A2] <> "" Then
                        For Each cel In Range("D13", Cells(Rows.Count, 4).End(xlUp))
                    If cel.Value = [A2] Then Else cel.EntireRow.Hidden = True
                Next
            End If
    End Select
        Application.ScreenUpdating = True
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/10/2016, 16h49
  2. Réponses: 1
    Dernier message: 03/02/2015, 12h54
  3. [Lazarus] Insérer une ligne dans un fichier Excel par OLE
    Par Yoanben dans le forum Lazarus
    Réponses: 0
    Dernier message: 01/04/2010, 08h49
  4. Attraper des lignes dans un fichier excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2007, 12h27
  5. Mettre des donnees dans un fichier Excel
    Par Mouawad dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/10/2004, 15h55

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