Code pour filtre multicritère
Bamby01
Messages postés
1
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
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.
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.
A voir également:
- Excel vba filtre multicritère
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
4 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonsoir, peux-tu partager le code que tu as réalisé?
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")
' 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")
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.
Je suis pas à l'aise dans VBA.
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
peux-tu partager le premier code que tu avais écrit et qui marchait presque?