Code pour filtre multicritère

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonsoir, peux-tu partager le code que tu as réalisé?
    1. 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")
      1. 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.
        1. Contributeur
          peux-tu partager le premier code que tu avais écrit et qui marchait presque?