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

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

  • FILTRAGE_1.zip
    231.4 KB · Affichages: 54
Dernière édition:

job75

XLDnaute Barbatruc
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+
 

marleauc

XLDnaute Occasionnel
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
 

job75

XLDnaute Barbatruc
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

  • FILTRAGE(2).xls
    163 KB · Affichages: 76
Dernière édition:

marleauc

XLDnaute Occasionnel
Re : filtre élaboré vba

re-salut, bon mes collègue préfères plus séparer l'userform,

mais la j'ai modifié la syntaxe mais je n'arrive plus a ouvrir l'userform bizarre
 

Pièces jointes

  • FILTRAGE(1).xls
    130.5 KB · Affichages: 61
  • FILTRAGE(1).xls
    130.5 KB · Affichages: 71

marleauc

XLDnaute Occasionnel
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
 

marleauc

XLDnaute Occasionnel
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:p].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
 

Discussions similaires

Statistiques des forums

Discussions
311 735
Messages
2 082 023
Membres
101 873
dernier inscrit
excellllll