Bonjour le forum,
J'ai créé une macro afin d'extraire les ligne qui comporte la dernière date du mois vers un nouvel onglet (les données sont classées par ordre croissant).
J'utilise comme condition le fait que si d'une ligne à l'autre le numéro du mois est supérieur cela signifie qu'il faut sélectionner et copier/coller la ligne précédente dans le nouvel onglet.
Voici la macro:
Ca coince lorsqu'il y a un saut de mois par exemple de novembre (mois 11) à janvier (mois 1) car dans ce cas la macro va ignorer tous les mois jusqu'à atteindre décembre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub MarquerLigne() Dim Lig As Long, DerLig As Long Dim M As Byte, MC As Byte Dim i As Long DerLig = 2 Sheets("Sheet2").Cells.ClearContents With Sheets("Sheet1") .Cells.Interior.ColorIndex = xlNone M = Month(.Cells(2, 2)) For Lig = 2 To .Range("B65536").End(xlUp).Row MC = Month(.Cells(Lig, 2)) If MC > M Or (MC = 1 And M = 12) Then .Rows(Lig - 1).Copy Sheets("Sheet2").Rows(DerLig) DerLig = DerLig + 1 .Rows(Lig - 1).Interior.ColorIndex = 3 M = MC End If Next Lig End With End Sub
Pour remédier à ce problème je pense que la solution serait d'insérer une condition supplémentaire avec les années afin que la macro comprenne que si il y a passage d'une année à une autre (année postérieur car mes données sont classées par ordre croissant), cela signifie que la ligne précédant le changement d'année doit être copiée/collée et que le 1er mois de la nouvelle année doit être considéré comme le mois de départ.
J'ai modifié la macro de la sorte en ajoutant une condition année mais j'ai un bug "Next without for".
Il semblerait que j'ai oublié un End If mais je ne vois pas où; est ce que qqn sait?
Le fichier exemple est à l'adresse suivante: http://cjoint.com/?ltltNsZtVo
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Sub Essai() Dim Lig As Long, DerLig As Long Dim M As Byte, MC As Byte Dim Y As Integer, YC As Integer Dim i As Long DerLig = 2 Sheets("Sheet2").Cells.ClearContents With Sheets("Sheet1") .Cells.Interior.ColorIndex = xlNone Y = Year(.Cells(2, 2)) For Lig = 2 To .Range("B65536").End(xlUp).Row YC = Year(.Cells(Lig, 2)) If YC > Y Or (YC = 2000 And Y = 2009) Then .Rows(Lig - 1).Copy Sheets("Sheet2").Rows(DerLig) DerLig = DerLig + 1 .Rows(Lig - 1).Interior.ColorIndex = 3 Y = YC M = Month(.Cells(2, 2)) MC = Month(.Cells(Lig, 2)) If Y = YC And MC > M Or (MC = 1 And M = 12) Then .Rows(Lig - 1).Copy Sheets("Sheet2").Rows(DerLig) DerLig = DerLig + 1 .Rows(Lig - 1).Interior.ColorIndex = 3 M = MC End If Next Lig End With End Sub
Partager