0
votes

Utilisation des commandes (Combobox) dans la feuille de calcul pour contrôler le filtre automatique

Copie des données filtrées à une autre feuille de calcul où l'utilisateur entrait des critères de filtrage via Combobox (userForm ou ActiveX) strong>

finalement, je souhaite copier sélectionner des données à partir d'une feuille de travail à un autre feuille de travail. Pour isoler les données pertinentes pour la copie à travers je planifie d'utiliser des filtres. Je souhaite inclure un objet de liste déroulante dans la feuille de calcul qui permettra à l'utilisateur de sélectionner les critères de filtrage p>

Il s'agit essentiellement de répliquer la fonction Filtre de données Excel, mais sans être restreint de position postérieure à la colonne filtrée. P>

Je suppose que laferform ou ActiveX Combobox est la voie à suivre? Ceci où je manque. Je ne peux pas comprendre comment appeler la valeur sélectionnée à partir du ComboBox par l'utilisateur pour informer la procédure Autofilter. P>

Sub M_00()

    Dim wB As Workbook
    Dim wS1, wS2 As Worksheet
    'Dim x As ???
    Dim rng3 As Range
    Dim lrowS3 As Long

    Set wB = This.Workbook
    Set wS1 = wB.Sheets(1)
    Set wS3 = wB.Sheets(3)

    'define range for Combo Box drop down list from data on Sheet 3
    lrowS3 = wS3.Cells(Rows.Count, 1).End(xlUp).Row

    Set rng3 = wS3.Range(Cells(2, 2), Cells(lrowS3, 2))

    'Don't know how to
    ' a) assign my rng3 values to the ComboBox drop down list
    ' b) call the selection from the ComboBox to inform my AutoFilter

    wS1.ComboBox1.List = rng3.Value

    x = wS1.ComboBox1.Selection

    ' turn off any autofilters that may already be active in Sheet 1
    wS1.AutoFilterMode = False

    ' filter column 4 based on combo box selection
    wS1.UsedRange.AutoFilter Field:=4, Criteria1:=x

    'Once filtered I plan you assign the visible data to an array and copy 
    'it to the required sheet.
End Sub


3 commentaires

Notez que si vous DIM WS1, WS2 comme feuille de calcul Seul WS2 est de type de la feuille de calcul mais ws1 est Variante . Dans VBA, vous devez spécifier un type pour chaque variable: DIM WS1 en tant que feuille de calcul, WS2 comme feuille de calcul sinon il est par défaut sur variante .


Bienvenue à cela. Puis-je demander où se trouve votre code? Est-ce dans un module? Est-ce dans une feuille de calcul? Est-ce dans une formulaire user?


Merci pour vos commentaires. Je n'ai pas réalisé ça. Le code est situé dans le module


3 Réponses :


0
votes

Fondamentalement, quelle autofiltre est-ce que cela cache les entières qui ne correspondent pas au droit de sélection. Dans cet exemple, je vais aspercuserai les informations que vous recherchez si dans la colonne B xxx pré>

Enfin, yo set ANOTHE SUB pour interdire les lignes P>

for i = 2 to lr
activesheet.range("B"&i).hidden = false
next i


0 commentaires

0
votes

Je ne suis donc pas sûr d'avoir 100% de ce que vous essayez de faire, mais voici une façon de le faire:

L'approche suivante est destinée à fonctionner avec une combinaison ActiveX. P>

Pour des raisons de simplicité, supposons que vous avez la configuration suivante: p>

p>

Les valeurs du filtre sont dans A1: A8 CODE> et que vous souhaitez filtrer la colonne C, par le nom de la journée. P>

Tout d'abord, vous avez besoin d'un sous-niveau qui initialise le ComboBox. Cela peut être situé dans votre module. Comment ce Sub code> est appelé est à vous de choisir. Si la liste doit être mise à jour régulièrement, vous pouvez avoir un bouton dédié pour cela. P>

Sub testFilter(filterValue As String) 'A sub that is located in the module and applies the filter. This is called whenever the Value of the combobox is changed

Dim sht As Worksheet
Dim rngToBeFiltered As Range
Set sht = ThisWorkbook.Worksheets("Name of your Worksheet") 'The worksheet where the range that needs to be filtered is located
Set rngToBeFiltered = sht.Columns("C")
If filterValue = "No Filter" Then
    rngToBeFiltered.AutoFilter field:=1 'If No Filter is selected then all data is displayed
Else
    rngToBeFiltered.AutoFilter field:=1, Criteria1:=filterValue 'else the filter is applied
End If

End Sub


0 commentaires

0
votes

J'ai fini par diviser l'opération en deux modules, m_00_filter () et m_00_generate ().

Les premiers filtres Les données basées sur la sélection à partir d'un formulaire d'utilisateur ComboBox Staticiquement attribuée à une autre feuille de calcul dans le même classeur. xxx

Le deuxième module copie les données visibles et les copie sur un autre classeur. Merci encore pour votre aide.

Vous apprécierez tous prenant le temps. Acclamations.


0 commentaires