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 :
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 !
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 !