superposition de conditions
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:
Code:
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 |
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.
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
Code:
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 |
Merci pour votre aide