XL 2013 filtre élaboré vba (RÉSOLUE)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

marleauc

XLDnaute Occasionnel
Bonjour,

J'aimerais effectuer un filtre élaboré via bouton avec code vba, soit plus précisément afficher seulement la date (colonne M) qui est plus petit que la date du jour.

pour terminer comment pourrais-je empêcher obliger les utilisateurs a effectuer les modification-nouvelle inscription-suppression qu'a partir de mon userform. car certains modifie les entrées !

merci beaucoup et bonne journée
 

Pièces jointes

Dernière édition:
Re : filtre élaboré vba

Bonjour marleauc,

Pour le filtre élaboré, la macro du bouton "Filtrage" de la feuille "Base" :

Code:
Private Sub CommandButton3_Click() 'filtrage
With Sheets("Base")
  If CommandButton3.Caption Like "*RAZ" Then
    CommandButton3.Caption = "Filtrage dates expirées"
    On Error Resume Next
    .ShowAllData
  Else
    CommandButton3.Caption = "Filtrage RAZ"
    .[Q2] = "=M2<=TODAY()"
    .[A:M].AdvancedFilter xlFilterInPlace, .[Q1:Q2]
    .[Q2] = ""
  End If
End With
End Sub
Pour ceci :

pour terminer comment pourrais-je empêcher obliger les utilisateurs a effectuer les modification-nouvelle inscription-suppression qu'a partir de mon userform. car certains modifie les entrées !

placer dans la macro Workbook_Open :

Code:
'mot de passe "toto" à adapter
Sheets("Base").Protect "toto", UserInterfaceOnly:=True
La protection ne s'applique pas aux macros.

A+
 
Re : filtre élaboré vba

bonjour job75,

encore merci pour votre aide, j'ai une autre demande est-ce possible via ce même bouton d'ajouter un filtre pour choisir la compagnie ou il faut ré ajouter un autre bouton filtrage par mot clé et ensuite filtrage date expiré
merci d'avance
 
Re : filtre élaboré vba

Bonjour marleauc, le forum,

Pour choisir la compagnie il faut une ComboBox dans un UserForm, voyez ce fichier (2).

Le code du bouton "Filtrage" :

Code:
Private Sub CommandButton3_Click() 'filtrage
If CommandButton3.Caption Like "*RAZ" Then
  CommandButton3.Caption = "Filtrage dates expirées"
  On Error Resume Next
  Sheets("Base").ShowAllData
Else
  CommandButton3.Caption = "Filtrage RAZ"
  UserForm1.Show
End If
End Sub
Le code de UserForm1 :

Code:
Private Sub ComboBox1_Change()
Dim x$
x = IIf(ComboBox1 = "", "*", ComboBox1) 'caractère générique *
With Sheets("Base")
  .[Q2] = "=(M2<=TODAY())*COUNTIF(H2,""" & x & """)"
  .[A:P].AdvancedFilter xlFilterInPlace, .[Q1:Q2]
  .[Q2] = ""
End With
On Error Resume Next
AppActivate "Excel" 'garde le curseur visible sur Excel 2013
End Sub

Private Sub UserForm_Initialize()
Dim t, d As Object, i&
With Sheets("Base")
  t = .Range("H1", .Range("H" & .Rows.Count).End(xlUp)(2))
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(t)
  If t(i, 1) <> "" Then d(t(i, 1)) = ""
Next
If d.Count Then ComboBox1.List = d.keys
ComboBox1_Change
End Sub
En utilisant le caractère générique "*" on peut faire une recherche sur une partie du nom de la compagnie.

Edit : sur Excel 2013, pour que le curseur soit toujours visible dans l'USF, j'ajoute :

Code:
On Error Resume Next
AppActivate "Excel" 'garde le curseur visible sur Excel 2013
Bonne journée.
 

Pièces jointes

Dernière édition:
Re : filtre élaboré vba

bonsoir
oui j'avoue que les mot utilisés sont discutables, je voulais dire que que mes collègues préféreraient effectuer le filtre élaboré via le combobox...🙂 effectivement je ne suis pas expert , je continue mes recherche merci
 
Re : filtre élaboré vba

bon matin,

voilà la résolution 🙂
Private Sub ComboBox1_Change()
Dim x$
x = IIf(ComboBox1 = "", "*", ComboBox1) 'caractère générique *
With Sheets("Base")
.[R3] = "=COUNTIF(H2,""" & x & """)"
.[A😛].AdvancedFilter xlFilterInPlace, .[R2:R3]
.[R3] = ""
End With
On Error Resume Next
AppActivate "Excel" 'garde le curseur visible sur Excel 2013
End Sub

Private Sub CommandButton1_Click()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

Private Sub UserForm_Initialize()
Dim t, d As Object, i&
With Sheets("Base")
t = .Range("H1", .Range("H" & .Rows.Count).End(xlUp)(2))
End With
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(t)
If t(i, 1) <> "" Then d(t(i, 1)) = ""
Next
If d.Count Then ComboBox1.List = d.keys
ComboBox1_Change
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
125
Affichages
13 K
Réponses
13
Affichages
2 K
Réponses
1
Affichages
2 K
Retour