XL 2013 VBA critère de filtre dynamique

  • Initiateur de la discussion Initiateur de la discussion sardaucar
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sardaucar

XLDnaute Nouveau
Bonjour à tous,

Je possède un classeur Excel avec les feuilles suivantes :

Feuille Données : Contient une table de donnée consolidée
Feuille Modèle : Contient une liste de valeur

Je dois éclater ma table selon un critère, et copier chaque ligne répondant au critère dans une autre feuille.

Pour cela j'ai créé une feuille par critère, portant le nom de ce dernier, et le code VBA suivant :

VB:
Sub copie_donnees()

Dim LastLig As Long
Dim cDest As Range
Dim cFilter As String
Dim i As Integer
Application.ScreenUpdating = False

For i = 1 To 2
    'Démarre la boucle avec comme valeur de filtre et de feuille la valeur de la cellule A1 de la feuille modèle
    cFilter = Worksheets("Modèle").Cells(1, i).Value
    With ThisWorkbook
        'cDest: La celllule de destination: première cellule vide de la colonne A de Filter
        With .Worksheets(cFilter)
            Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(1)
        End With
        With .Worksheets("Données")
            'LastLig, ligne de la dernière cellule remplie de colonne A de Données
            LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            'On fait un filtre automatique sur la colonne A de Feuil1 avec comme critère Filter
            .Range("A1:A" & LastLig).AutoFilter field:=1, Criteria1:=cFilter
            'Si au moins une ligne résultat du filtre (en plus de la ligne 1 des titres)
            If .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
                With .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow
                    'On copie toutes les lignes visibles vers cDest
                    .Copy cDest
                End With
            End If
            'on vide notre variable cDest
            Set cDest = Nothing
            'On enlève le filtre automatique
            .AutoFilterMode = False
        End With
    End With
Next


End Sub

Malheureusement cela me renvoi une erreur d'indice sur la déclaration de ma variable cFilter, et je ne sais pas pourquoi...

Classeur en pj


Merci d'avance pour toute aide !
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
263
Réponses
4
Affichages
365
Réponses
18
Affichages
718
Réponses
7
Affichages
185
Réponses
2
Affichages
415
Retour