XL 2016 filtrer des lignes en vba

halecs93

XLDnaute Impliqué
Bonjour à tout le monde. Et encore un grand merci à toutes les personnes qui m'ont permis de bien avancer.

Je poursuis donc mon classeur "planning" et je bute sur une chose. Il s'agit de déclencher les filtres afin de ne faire apparaître, par exemple, que les lundis. J'ai bricolé un petit quelque chose qui semble fonctionner. En cliquant sur un des jours de la semaine, ça filtre bien (même si ce n'est pas super joli de voir apparaitre le bouton de filtrage).

Mais si je veux obtenir, toujours par exemple, uniquement les lundis et sans les lignes "remplaçant".... je bloque.

Pas certain que ça puisse se faire, mais je poste quand même ;)

Encore une fois, un grand merci
1695546469466.png
 

Pièces jointes

  • halecs93- PLANNING- exceldownloads.xlsm
    599.9 KB · Affichages: 12
Solution
Re

En partant de ton dernier fichier
1) J'ai renommer les images avec le nom des jours
2) Affecter à ces images la même macro (sur le même principe que précédemment)
Code:
Sub macro_Bouton()
Jour = UCase(ActiveSheet.Shapes(Application.Caller).Name)
Filtrer Jour
End Sub
Private Sub Filtrer(ByVal Jour As String)
Dim ws As Worksheet
    Set ws = ActiveSheet
    ' Déproteger la feuille
    If ws.ProtectContents Then
        ws.Unprotect
    End If
    ' Protéger la feuille en autorisant la sélection des cellules verrouillées
    ws.Protect UserInterfaceOnly:=True, AllowFiltering:=True
    ' Appliquer le filtre
    ws.Range("A6:A500").AutoFilter Field:=1, Criteria1:=Jour, VisibleDropDown:=0
    ' Mettre à jour la cellule BE1 avec le nom de la...

halecs93

XLDnaute Impliqué
Re @halecs93 Bonjour@Staple1600

Comment tu peux faire une erreur ici @halecs93, j'ai la réponse mais j'aimerais que tu m'expliques s'il te plait avant de poursuivre ?

On Error Resume Next ' Ignorer les erreurs si la feuille n'existe pas
Set ws = ActiveSheet
On Error GoTo 0 ' Réactiver les erreurs
If ws Is Nothing Then
MsgBox "Aucune feuille active n'est sélectionnée.", vbExclamation
Exit Sub
End If
Je dois admettre que là, je ne sais plus...à force de bricoler avec des bouts de code ici ou là
 

Staple1600

XLDnaute Barbatruc
Re

@halecs93
Je ne sais toujours pas si tu testé la macro du message#12
et surtout ce que tu en penses

Du coup, la feuille ne représente qu'une semaine
C'est pas grave puisque tu archives sur la feuille RECAP, non ?
Et si sur ta feuille MODELE, on utilisait des vrais dates, on pourrait visualiser les données
(par mois, par trimestre, par semestre etc... en utilisant un TCD)


Pour ma suggestion, voila plus ou moins à quoi je pense
testPLAN.png


Mais comme ton projet est déjà avancé et qu'apparemment ton Excel ne bronche pas (contrairement au mien)
j'en resterai là
(sauf si cela t'intéresse de voir plus)
 

halecs93

XLDnaute Impliqué
Re

@halecs93
Je ne sais toujours pas si tu testé la macro du message#12
et surtout ce que tu en penses


C'est pas grave puisque tu archives sur la feuille RECAP, non ?
Et si sur ta feuille MODELE, on utilisait des vrais dates, on pourrait visualiser les données
(par mois, par trimestre, par semestre etc... en utilisant un TCD)


Pour ma suggestion, voila plus ou moins à quoi je pense
Regarde la pièce jointe 1179497

Mais comme ton projet est déjà avancé et qu'apparemment ton Excel ne bronche pas (contrairement au mien)
j'en resterai là
(sauf si cela t'intéresse de voir plus)
Le modèle me sert à construire le planning.... ensuite, lorsque je créé une semaine, c'est pour gérer surtout les remplacements. Le planning initial n'a pas vocation, même si cela peut arriver de temps à autres.

Sinon, c'est vrai que je ne souhaites pas tout refaire à zéro ;)
 

Staple1600

XLDnaute Barbatruc
Re

@halecs93
Pas d'erreur chez moi (Office 365)
Merci d'avoir testé et pour le feedback

Et comme ceci ?
Code:
Private Sub FILTRAGE(ByVal Jour As String)
ActiveSheet.Unprotect
Application.ScreenUpdating = False
Range("BV4").Formula = "=AND(A4=" & Chr(34) & Jour & Chr(34) & ",D4<>""remplaçant"")"
Range("A3:D497").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("BV3:BV4"), Unique:=False
End Sub
Sub mMARDI()
'ActiveSheet.ShowAllData
FILTRAGE "MARDI"
End Sub
Tu lances bien la macro mMARDI en étant sur la feuille MODELE ?
 

halecs93

XLDnaute Impliqué
Re

@halecs93
Pas d'erreur chez moi (Office 365)
Merci d'avoir testé et pour le feedback

Et comme ceci ?
Code:
Private Sub FILTRAGE(ByVal Jour As String)
ActiveSheet.Unprotect
Application.ScreenUpdating = False
Range("BV4").Formula = "=AND(A4=" & Chr(34) & Jour & Chr(34) & ",D4<>""remplaçant"")"
Range("A3:D497").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("BV3:BV4"), Unique:=False
End Sub
Sub mMARDI()
'ActiveSheet.ShowAllData
FILTRAGE "MARDI"
End Sub
Tu lances bien la macro mMARDI en étant sur la feuille MODELE ?
Pour cette version, pas d'erreur. Mais encore une fois... ce n'est pas ce que je souhaite.

Je dois pouvoir filtrer "remplaçant" ou pas même si je laisse tous les jours de la semaine apparent, ou bien bien filtrer "remplaçant" ou pas en ayant filtré un jour précis
 

Staple1600

XLDnaute Barbatruc
Re,

Désolé, je pensais avoir été clair et ce n'est, semble-t-il pas le cas.

Ma demande n'était pas claire, à priori... je parlais d'exemple. Mais en fait, c'est un filtre sur chaque colonne que je souhaitais mettre en place..... désolé pour ma syntaxe approximative ;)
Tu pensais le contraire tout à l'heure ;)

On n'est pas dans ta tête.

Plus on aura de détails, d'explications, plus on sera efficace ;)

A toi de voir.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 284
Membres
103 170
dernier inscrit
HASSEN@45