Code pour filtre multicritère

Fermé
Bamby01
Messages postés
1
Date d'inscription
vendredi 12 mai 2017
Statut
Membre
Dernière intervention
12 mai 2017
- 12 mai 2017 à 16:20
yg_be
Messages postés
19316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mai 2022
- 15 mai 2017 à 21:33
Je tourne en rond depuis quelque jours pour écrire un code vba me permettant de recueillir des données venant d'un tableau excel.
En fait, j'ai une base de données et ce que je voudrais c'est de créer une macro me permettant de filtrer le tableau en fonction de la sélection que je fais.
Pour la sélection, j'ai crée un contrôle formulaire avec case à cocher, et j'aimerais que quand je coche mes cases que la macro filtre la colonne concernée de la BD en ne sélectionnant que les critères que j'ai choisis.

Le premier code que j'avais écrit marchait à condition qu'il n'y ait pas de vide dans mon tableau critère, c'est-à-dire, j'ai 7 choix possibles, si tous les choix sont cochés ça marche mais s'il y'a une case (par exemple celle du milieu) décochée, il bogue.

Je vous remercie d'avance de votre soutien.

4 réponses

yg_be
Messages postés
19316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mai 2022
1 109
12 mai 2017 à 20:52
bonsoir, peux-tu partager le code que tu as réalisé?
0
b Macro1()

' Macro1 permet de filtrer les données à partir de la base de données globale qui se trouve dans un autre fichier Excel appelé nomfichier.
' Elle importe les données de calibration en fonction du choix (région et matériau) de l'utilisateur.

Dim i As Integer
Dim countrow As Long
Dim region As String
Dim materiau() As Variant
Dim Criteria As Object

Application.ScreenUpdating = False
' Néttoyage de l'onglet "Données_Calibration" pour enlever les données du choix précedent.

region = Worksheets("Menu").Range("C3").Value
materiau = Worksheets("Menu").Range("C7:C13").Value

With Worksheets("Données_Calibration")
.Range(.Rows("9:9"), .Rows("9:9").End(xlDown)).ClearContents
End With

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False

' Ouverture du fichier "nom fichier" contenant la base de données globale.

' Sélection du classeur source à partir d'une fenêtre
cheminfichier = Application.GetOpenFilename("Fichiers Excels (*.xlsx), *.xlsx")

' Si on clique sur Annuler dans la fenêtre, on sort de la boucle
If cheminfichier = False Then

Exit Sub
End If

'Ouverture du classeur source contenant les données
Workbooks.Open cheminfichier


' Récupération du nom du classeur + extension
For i = Len(cheminfichier) To 1 Step -1
If Mid(cheminfichier, i, 1) = "\" Then Exit For
Next
nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))


' Étapes permettant de filtrer et de copier les données dans le fichier de calibration en fonction du choix de l'utilisateur.

With Worksheets("source")
.AutoFilterMode = False 'Assure que countrow inclut toutes les lignes.
countrow = .Cells(.Rows.Count, "A").End(xlUp).Row
.Range("$A$1:$BF$" & countrow & "").AutoFilter Field:=1, Criteria1:=" <> " 'Région_adm"
.Range("$A$1:$BF$" & countrow & "").AutoFilter Field:=11, Criteria1:=" <> " 'Matériaux"

' i = 1
' Set Criteria = materiau(i, 1)
'
' ActiveSheet.Range("$A$1:$BF$" & countrow & "").AutoFilter Field:=8, CriteriaRange:=materiau(), Operator:=xlFilterValues, Operator:=xlAnd

'CriteriaRange:=[Feuil2].Range("A1:B2")
0
Bonjour, voici mon code, il n'est pas complet car je ne sais plus quoi ajouter ou enlever.
Je suis pas à l'aise dans VBA.
0
yg_be
Messages postés
19316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 mai 2022
1 109
15 mai 2017 à 21:33
peux-tu partager le premier code que tu avais écrit et qui marchait presque?
0