Bonjour à tous,
je travaille sur un tableau conséquent et j'ai réalisé une macro. Pour chaque nom trouvé dans la colonne N, une nouvelle feuille est créée où s'insèrent toutes les données relatives au nom trouvé dans cette colonne N.
Jusqu'ici tout va bien.
J'ai ensuite voulu ajouté un filtre automatique dans les nouvelles feuilles créées à partir de la ligne 6.
Le problème c'est que parfois dans certaines feuilles je retrouve mon filtre mais dans d'autres, le filtre ne se créer pas, sans qu'il y ai une logique (en tout cas je ne la trouve pas) entre le cas ou le filtre est créé et le cas ou le filtre ne l'est pas.
Pourriez-vous jetez un coup d'œil à ma macro et me dire ce qui cloche ??!! moi je suis perdu.
Voici la macro que j'utilise :
Option Explicit
Public Sub Tri_par_nom()
' en fonction de la valeur de la colonne N
' création d'une feuille avec nom colonne N
' autres colonnes documentant les cellules concernées
Dim W1 As Worksheet ' feuille base
Dim W2 As Worksheet ' feuille client
Dim lig As Long ' ligne traitée
Dim feu As Object ' feuille présente
Dim ong As Integer ' numèro feuille
Set W1 = Sheets("Feuil1") ' position feuille base
Application.ScreenUpdating = False
For Each feu In Sheets ' suppression feuilles
If feu.Name <> W1.Name Then
Application.DisplayAlerts = False
feu.Delete
Application.DisplayAlerts = True
End If
Next feu
' création des feuilles client
For lig = 8 To W1.Cells(65536, 14).End(xlUp).Row
For ong = 1 To Sheets.Count ' test existance feuille
If Sheets(ong).Name = UCase(W1.Cells(lig, 14).Text) Then
Set W2 = Sheets(ong)
Exit For
End If
Next ong
If ong > Sheets.Count Then
For ong = 2 To Sheets.Count ' tri feuille
If Sheets(ong).Name > UCase(W1.Cells(lig, 14).Text) Then Exit For
Next ong ' création feuille
Sheets.Add(After:=Sheets(ong - 1)).Name = UCase(W1.Cells(lig, 14).Text)
Set W2 = ActiveSheet
W1.Rows("1:7").Copy Destination:=W2.Rows("1:7") ' ajout titre
End If
W1.Rows(lig).Copy Destination:=W2.Rows(W2.Cells(65536, 14).End(xlUp).Row + 1) ' ajout ligne traitée
Sheets(W2.Name).Select
Cells.Select
Cells.EntireColumn.AutoFit
Cells.EntireRow.AutoFit
Sheets(W2.Name).Select
Rows("7:100").Select 'tri par date
ActiveWindow.SmallScroll Down:=-96
Selection.Sort Key1:=Range("O8"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveWindow.SmallScroll Down:=-15
Range("A1").Select
Sheets(W2.Name).Select
Range("D6:AL6").Select
Selection.AutoFilter
Range("A1").Select
Next lig
W1.Activate
Application.ScreenUpdating = True
End Sub
Merci. A+
je travaille sur un tableau conséquent et j'ai réalisé une macro. Pour chaque nom trouvé dans la colonne N, une nouvelle feuille est créée où s'insèrent toutes les données relatives au nom trouvé dans cette colonne N.
Jusqu'ici tout va bien.
J'ai ensuite voulu ajouté un filtre automatique dans les nouvelles feuilles créées à partir de la ligne 6.
Le problème c'est que parfois dans certaines feuilles je retrouve mon filtre mais dans d'autres, le filtre ne se créer pas, sans qu'il y ai une logique (en tout cas je ne la trouve pas) entre le cas ou le filtre est créé et le cas ou le filtre ne l'est pas.
Pourriez-vous jetez un coup d'œil à ma macro et me dire ce qui cloche ??!! moi je suis perdu.
Voici la macro que j'utilise :
Option Explicit
Public Sub Tri_par_nom()
' en fonction de la valeur de la colonne N
' création d'une feuille avec nom colonne N
' autres colonnes documentant les cellules concernées
Dim W1 As Worksheet ' feuille base
Dim W2 As Worksheet ' feuille client
Dim lig As Long ' ligne traitée
Dim feu As Object ' feuille présente
Dim ong As Integer ' numèro feuille
Set W1 = Sheets("Feuil1") ' position feuille base
Application.ScreenUpdating = False
For Each feu In Sheets ' suppression feuilles
If feu.Name <> W1.Name Then
Application.DisplayAlerts = False
feu.Delete
Application.DisplayAlerts = True
End If
Next feu
' création des feuilles client
For lig = 8 To W1.Cells(65536, 14).End(xlUp).Row
For ong = 1 To Sheets.Count ' test existance feuille
If Sheets(ong).Name = UCase(W1.Cells(lig, 14).Text) Then
Set W2 = Sheets(ong)
Exit For
End If
Next ong
If ong > Sheets.Count Then
For ong = 2 To Sheets.Count ' tri feuille
If Sheets(ong).Name > UCase(W1.Cells(lig, 14).Text) Then Exit For
Next ong ' création feuille
Sheets.Add(After:=Sheets(ong - 1)).Name = UCase(W1.Cells(lig, 14).Text)
Set W2 = ActiveSheet
W1.Rows("1:7").Copy Destination:=W2.Rows("1:7") ' ajout titre
End If
W1.Rows(lig).Copy Destination:=W2.Rows(W2.Cells(65536, 14).End(xlUp).Row + 1) ' ajout ligne traitée
Sheets(W2.Name).Select
Cells.Select
Cells.EntireColumn.AutoFit
Cells.EntireRow.AutoFit
Sheets(W2.Name).Select
Rows("7:100").Select 'tri par date
ActiveWindow.SmallScroll Down:=-96
Selection.Sort Key1:=Range("O8"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveWindow.SmallScroll Down:=-15
Range("A1").Select
Sheets(W2.Name).Select
Range("D6:AL6").Select
Selection.AutoFilter
Range("A1").Select
Next lig
W1.Activate
Application.ScreenUpdating = True
End Sub
Merci. A+