[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”.

Les macros précédentes masquent les lignes et colonnes qui n’ont pas de critères cochés (avec un X).
C’est surtout important pour les lignes, afin de masquer les lignes n’ayant pas au moins un critère de coché.

[ 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

  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

Je joins le fichier au post.

Merci merci !!!

Emargement - 2018.xls (265 Ko)

Bonjour,

Une macro qui se trouve dans la feuille “Effectif” et qui se déclenche au changement de la liste en D2

Option Explicit


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Dl%, x% 'Déclaration des variables
  Dl = Range("B" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne B
  Application.EnableEvents = False
    For x = 7 To Dl 'boucle sur la ligne7 à Dl
      If Sheets("Effectif").Cells(x, 4) <> Cells(2, 4) Then 'si la cellule de la ligne "x" colonne 4(D) est égale à D2, alors
        Rows(x).EntireRow.Hidden = True 'la ligne est visible
      Else                              'sinon
        Rows(x).EntireRow.Hidden = False 'la ligne est masquée
      End If
    Next
  Application.EnableEvents = True
End Sub

Emarg.xlsm (83,8 Ko)

Excusez moi ce n’était pas le bon fichier en pièce jointe.

Il y a un renvoi cellule dans cette cellule normalement.

Voici la macro de déclenchement (donc quand la cellule D1 de l’onglet “imprimer” est renseignée)

    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

Re,

Si j’ai compris, en changeant la valeur de la cellule D1 de la feuille Imprimer, les lignes de la feuille Effectif doivent se masquée si elles ne correspondent pas à la valeur de la cellule D2 de la feuille Effectif

Emargement - 2018.xls (262 Ko)

Wow!!! On touche au but, merci!

Ce n’est pas tout à fait exact, si la cellule D2 contient “Quai A”, il faut aussi que les lignes contenant “Quai A et point M” s’affichent.
De même en ce qui concerne “Point M”.

Tu vois où je veux en venir?

Merci d’être aussi réactiv(e) !

En revanche c’est étrange, ça ne fonctionne pas quand il n’y a qu’un seul critère de coché, j’ai des lignes vides

Quai A est bien satisfait mais pas le critère TSAE 3, zarb.

Re,

Bon j’ai trouvé pour mettre les Quai A seul et Quai A et point M, ou l’inverse
(Chose qui n’est pas dans la question du départ)

Maintenant autre chose étrange dans le message précédant qui n’est jamais mentionné dans les messages

Alors, je suis patient,
Soufflez un coup, un crayon, un papier, on note ce que l’on veut obtenir,
on pose la question (claire, nette, & précise) et après on regarde

Les réponses en tâtonnant m’exaspère :face_with_raised_eyebrow:

Bien chef!

Je reprends depuis le début du début.

Donc, à la base, le fait de renseigner une valeur (qui correspond au numéro de la fiche de la colonne A de la feuille “données” désirée) dans la cellule D2 de la feuille “imprimer”, affiche, par un renvoi vers les cellules allant de D2 à K2, les Critères à prendre en compte pour le masque.
Ces critères se trouvent, de même que le numéro de fiche, dans la feuille “Données”. A un numéro de fiche correspond un certain nombre de critères (site, tes H etc).

Bien, une fois que le numéro de fiche est renseigné dans la cellule D1 de la feuille “imprimer”, une première macro se déclenche - Worksheet Calculate -, qui est chargé de masquer les colonnes de la feuille “imprimer” ne contenant pas de critères cochés, pour le numéro de fiche en question.
Ensuite, une seconde macro s’enclenche nommée MasquerLigne se charge de masquer les lignes qui ne cochent pas aucun des critères des colonnes allant de E à K.
Une dernière, et c’est la que le bat blesse, devrait se charge de masquer les lignes ne contenant pas la valeur prise par la cellule D2.

J’espère avoir été clair et précis cette fois, désolé.

Peut être qu’il faut que les macro MasquerLigne et MasqueSite ne fassent qu’un non?

Merci

Re,

Ok déjà plus clair,
Je regarde cela demain matin et te tiens au courant :wink:

1 J'aime

Bonjour,

A tester en regroupant les 3 macros en une seule
Emargement - 2018 (2).xls (261,5 Ko)

Merci Mimimathy,

Cela correspond bien au besoin :slight_smile:

Bonne jounrée!

Bonjour,

En fait je me suis précipité, il y a un léger soucis, tout fonctionne très bien à l’exception d’un cas.

Quand la cellule D2 de l’onglet “Effectif” prend “Quai A et Point M”, il faut que les deux dernières lignes jaunes restent à l’affichage.

Milles excuses, je mérite la guillotine…

Re,

A tester
Emargement - 2018 (2).xls (257,5 Ko)

Au top, merci.

C’est formidable.

Bonne journée!

Bonjour Mimimathy,

Je sollicite encore tes conseils et ta bienveillance sur le même fichier.
Il y a un soucis au niveau de la macro “impression”. Visiblement elle ne va pas chercher les Noms de la plage Agents dans les cellules visibles à la suite du masquage.

Sub impression()
  Dim c As Range
    For Each c In Range("Agents").SpecialCells(xlCellTypeVisible)
      Range("Nom").Value = c.Value
      Worksheets("imprimer").PrintOut
    Next c
End Sub

Cette macro se déclenche en cliquant sur le bouton Imprimer de la feuille éponyme.

Aurais-tu une idée s’il te plait?

Un grand merci par avance,

Bonjour,

Regarde dans le gestionnaire de noms
la plage “Agents” (avec un s) commence à la ligne 9 au lieu de 7
et pour les essai

remplace
Worksheets("imprimer").PrintOut

par

Worksheets("imprimer").PrintPreview

qui te fera un aperçu à l’écran

1 J'aime

Merci, ça marche mieux une fois les modifs faites.

En revanche, on m’a notifié que qqch ne collait pas. Quand est renseigné un critère “Quai et Point M”, j’ai les noms qui prennent pour la colonne dédiée seulement “Quai A et Point M” au lieu d’avoir ces derniers mais aussi ce qui prennent “Quai A” et “Point M” séparément, est-ce que tu vois ce que je veux dire?

Désolé…honte à moi de ne pas m’en être rendu compte plus en amont de ce sujet!

Re,

Un exemple vaut mieux qu’un long discours

1 J'aime

Bonjour et merci,

Tu as raison, bon en gros il faudrait que lorsque Site = “Quai et point M” j’ai :

50

Au lieu de que du “Quai A et point M” dans le tableau du dessous.

J’espère que c’est plus parlant, merci!

Bonjour,

Dans ce cas, c’est toutes les lignes et colonnes
Emargement - 2018 (2).xls (256,5 Ko)

1 J'aime