Bonjour à tous,

Pour un projet VBA et l'utilisation d'un userform, j'utilise la fonction "AdvancedFilter" dans une classe Module, voici un extrait du programme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
Sub filtreAvance1()
 
    'Déclaration des variables
    Dim rgDonnees As Range
    Dim rgCritere As Range
    Dim rgDestination As Range
 
    'Affectation des variables
    Set rgDonnees = Feuil4.Range("A1").CurrentRegion 'Feuil4 est un tableau correspondant à ma "base de données"
    Set rgCritere = Feuil3.Range("I1").CurrentRegion 'Feuil3 est ma feuille "Liste" où sont définis entre autre les tableaux de critère et listes pour combobox de l'userform
    Set rgDestination = Feuil2.Range("A1") 
 
    'Suppression l'ancien filtre
    Feuil2.Cells.ClearContents
 
    'Exécute l'outil FiltreAvancee
    rgDonnees.AdvancedFilter xlFilterCopy, rgCritere, rgDestination
 
End Sub
Avec ce programme, je souhaite filtrer ma base de données (Feuil4) avec un numéro de série particulier en guise de critère et copier le résultat du filtre dans la "Feuil2".
rgCritère est donc un tableau dont l'en-tête est "Numéro de série" et dont l'unique ligne correspond au numéro de série cherché (type String).
Dans l'utilisation de mon userform, voici l'extrait du code qui appelle cette fonction de filtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Feuil3.Range("I2").Value = txtSN.Value 'On copie le SN à la cellule I2 de la feuille "Liste"
Call filtreAvance1
Cela fonctionne correctement mais pour simplifier mon fichier excel, j'aimerai supprimer la feuille "Liste" et je cherche un moyen de me passer de la première ligne du 2ème code (Feuil3.Range("I2").Value = txtSN.Value).
Est-ce possible de définir "rgCritere" sans sélectionner une plage de cellules ? Dans l'idéal je souhaiterai avoir :
rgCritere = {"Numéro de série"; numSerie} où numSerie serait une variable publique dont j'affecterai la valeur de "txtSN.Value". Cela m'éviterai de "copier" la valeur dans la feuille Liste puis de lire cette valeur dans la fonction de filtre.

Je débute sur VBA, merci pour vos retours,

En espérant que vous ayiez compris ma demande

Bonne journée