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 :

VBA - Macro Masque


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 6
    Par défaut VBA - Macro Masque
    Bonjour à tous !!!

    Et merci d’avance pour vos lumières!

    J’aimerais que les lignes d’un tableau soient masquées/affichées en fonction de la valeur prise par une cellule de la feuille, appelée “Effectif”.
    [ Il faut que la manip passe par une macro VBA (en effet, d’autres opérations sont declenchées par des macros, je dois ajouter celle là au fichier) ]

    Si la cellule D2 prend la valeur “Quai A”, toutes les lignes de D6 à D100 ne contenant pas cette valeur sont masquées.
    Même chose si la cellule prend la valeur “Point M”, je précise CONTENANT et non pas égal.
    Le but est que, les lignes avec les cellules de D6 à D100 prenant pour valeur “Quai A et Point M” restent affichées quand D2 prend “Quai A” ou “Point M” pour valeur.

    Vous suivez? J’imagine que cela n’est absolument pas clair, toutes mes excuses. J’ai essayé de procéder avec une macro qui se trouve dans le module1, “MaskSite” et qui est appelée dans le code de la feuille (“imprimer”).

    Voici le code du module 1:

    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
     Sub Worksheet_Calculate()
    Dim o As Worksheet
    Dim COL As Byte
     
    Application.ScreenUpdating = False
    Set o = Worksheets("Effectif")
    o.Rows("1:100").Hidden = False
    o.Columns("C:M").Hidden = False
    For COL = 5 To 11
        If o.Cells(2, COL).Value = "" Then o.Columns(COL).Hidden = True
    Next COL
    Application.ScreenUpdating = True
    End Sub
    Sub Masquer_lignes()
    Dim o As Worksheet
    Dim LI As Integer
    Dim PL As Range
    Dim CEL As Range
     
    Set o = Worksheets("Effectif")
    Application.ScreenUpdating = False
    For LI = 6 To 100
        Set PL = o.Range(o.Cells(LI, 5), o.Cells(LI, 11)).SpecialCells(xlCellTypeVisible)
        For Each CEL In PL
            If CEL.Value <> "" Then GoTo suite
        Next CEL
        o.Rows(LI).Hidden = True
    suite:
    Next LI
    Application.ScreenUpdating = True
    End Sub
    Sub MaskSite()
    Dim Site As String
    Dim l As Integer
    Dim o As Worksheet
    Set o = Worksheets("Effectif")
    Site = o.Range("D2").Value
    For l = 7 To 100
        o.Rows(l).EntireRow.Hidden = False
        If InStr(o.Range("D" & l).Value, Site) > 0 Then
        o.Rows(l).EntireRow.Hidden = False
        Else: o.Rows(l).EntireRow.Hidden = True
        End If
    Next l
    End Sub

    NB : Je précise que les macros ont un déclencheur, qui s'active lorsque la cellule D1 de l'onglet "imprimer" voit sa valeur changer.

    Le code :

    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.Address = Range("D1").Address Then
            Call Module1.MaskSite
            Call Module1.Worksheet_Calculate
            Call Module1.Masquer_lignes
        End If
     
    End Sub
    Je joins le fichier au post.

    Emarg.xlsm

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    As-tu déjà des filtres sur ta feuille ?
    Si non il te suffit d'en faire un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Range("D5").AutoFilter
        ActiveSheet.Range("$D$6:$D$100").AutoFilter Field:=12, Criteria1:= _
            "=*" & Range("D2").Value & "*", Operator:=xlAnd

Discussions similaires

  1. [VBA]Macro Excel : les premiers pas ?
    Par epfyffer dans le forum SDK
    Réponses: 3
    Dernier message: 28/03/2007, 15h12
  2. executer une requête en VBA : macro ou pas ?
    Par Cantalou dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 26/01/2007, 14h35
  3. [VBA]Macro d'impression automatique
    Par olivier45fr dans le forum SDK
    Réponses: 5
    Dernier message: 27/11/2006, 11h04
  4. [VBA]Macros sous BO Reporter 5.1.8
    Par dieu08 dans le forum SDK
    Réponses: 10
    Dernier message: 11/10/2006, 15h46
  5. [VBA]macro Word avec données de MySQL
    Par Taz_8626 dans le forum VBA Word
    Réponses: 3
    Dernier message: 17/07/2006, 11h39

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