Autres Changer mon champs de saisie en menu déroulant

fel

XLDnaute Nouveau
Bonsoir à tous,

j'ai 2 questions:

1) Est il possible de changer mon champs de saisie "Destinataire" en un menu déroulant avec les choix suivants ( vide, Orange, Bédarrides, Sorgues, Avignon, Pontet, Châteauneuf du pape) ?

2) Pour le Champ "Date" peut on mettre une plage de date (Ex : 2020 à 2025) pour pouvoir filtre sur une plage de date en année?

Merci de votre aide
 

Pièces jointes

  • dam777-tri-courrier-v6 (1).xlsm
    40.9 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Fel,
Il suffit de remplacer les TextBox par des Combobox, et les initialiser avec :
VB:
RechercheCourriers.Destinataire.List = Array("", "Orange", "Bédarrides", "Sorgues", "Avignon", "Pontet", "Châteauneuf du pape")
RechercheCourriers.ComboBoxDate.List = Array("", 2020, 2021, 2022, 2023, 2024, 2025)
Combobox que j'ai appelés : Destinataire et ComboBoxDate
à prendre en compte dans vos filtres.
 

Pièces jointes

  • dam777-tri-courrier-v6 (1) (1).xlsm
    47.8 KB · Affichages: 4

fel

XLDnaute Nouveau
Merci pour ta réponse rapide.

A quel endroit du code dois je mettre l'initialisation combobox?
Et si je remplace tous les textbox les autres champs ne fonctionneront plus.

Code:
Private Sub CommandButton2_Click()
  Dim Ind As Integer, dLig As Long, sCrit As String, sCrit2
  Dim TabCol As Variant, NumCol As Long
  ' Liste des colonnes à prendre en compte
  TabCol = Split("A,B,G,H,I,J,K,R,T", ",")
  ' Avec la feuille active
  With ActiveSheet
    If ActiveSheet.AutoFilter.FilterMode = True Then ActiveSheet.ShowAllData
    ' Définir la plage à traiter
    Set Rng = .Range("A6").CurrentRegion
    ' Déplacer la plage d'une ligne vers le bas et la redimensionner
    Set Rng = Rng.Resize(Rng.Rows.Count - 1, Rng.Columns.Count).Offset(1, 0)
    ' Suis l'ordre des TextBox
    For Ind = 1 To 9
      ' Préparer le critère de filtre
      sCrit = ""
      ' Si le TextBox contient une valeur
      If Me.Controls("Textbox" & Ind) <> "" Then
        ' Définir le numéro de colonen à traiter
        NumCol = Range(TabCol(Ind - 1) & "1").Column
        ' Critère de filtre
        sCrit = Me.Controls("Textbox" & Ind).Value
        If NumCol = 1 Then
            On Error Resume Next
            sCrit2 = DateSerial(CInt(Mid(Me.Controls("Textbox" & Ind).Value, 7, 4)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 4, 2)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 1, 2)))              'Application.WorksheetFunction.DateValue(Me.Controls("Textbox" & Ind).Value)
            If Err = 0 Then
                Rng.AutoFilter Field:=NumCol, Criteria1:=Format(sCrit2, "dd/mm/yyyy")
            Else
                Me.Controls("Textbox" & Ind).Value = ""
            End If
            On Error GoTo 0
        Else
            Rng.AutoFilter Field:=NumCol, Criteria1:="*" & sCrit & "*"
        End If
      End If
    Next Ind
  End With
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
A quel endroit du code dois je mettre l'initialisation combobox?
Vous avez ouvert ma PJ ?
L'init de la Combobox est dajà faite avant le Userform.Show dans la macro Filtrer.
Et si je remplace tous les textbox les autres champs ne fonctionneront plus.
Pourquoi voulez vous remplacer TOUS les textbox puisque seuls ces deux là sont sous forme combobox ?
Par contre oui, il vous faudra changer le code quand vous utiliserez les variables de ces combobox, mais c'est pareil que pour les textbox : Valeur=ComboBoxDate.valeur
 

fel

XLDnaute Nouveau
Est ce comme ceci que je dois faire?

Valeur1 as string, Valeur2

et juste en dessous de
' Critère de filtre
sCrit = Me.Controls("Textbox" & Ind).Value
je mets:
Valeur1=ComboboxDate.value
Valeur2=Destinataire.value

If NumCol = 1 Then
On Error Resume Next
sCrit2 = DateSerial(CInt(Mid(Me.Controls("Textbox" & Ind).Value, 7, 4)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 4, 2)), CInt(Mid(Me.Controls("Textbox" & Ind).Value, 1, 2))) 'Application.WorksheetFunction.DateValue(Me.Controls("Textbox" & Ind).Value)
If Err = 0 Then
Rng.AutoFilter Field:=NumCol, Criteria1:=Format(sCrit2, "dd/mm/yyyy")
Else
Me.Controls("Textbox" & Ind).Value = ""
End If
On Error GoTo 0
Else
Rng.AutoFilter Field:=NumCol, Criteria1:="*" & sCrit & "*"
Rng.AutoFilter Field:=NumCol, Criteria1:=Valeur1
Rng.AutoFilter Field:=NumCol, Criteria1:=Valeur2

End If
End If
Next Ind
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh