Séparer des données mois par mois, 1 feuille par mois

Signaler
Messages postés
1
Date d'inscription
jeudi 1 avril 2010
Statut
Membre
Dernière intervention
1 avril 2010
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
Bonjour,

je cherche à créer une macro qui réaliserait les tâches suivantes ; à l'origine j'ai une grosse feuille excel avec les dates au format dd/mm/yyyy hh:mm sur une colonne tout à gauche ; puis des données relatives à ces dates sur les colonnes à droite de la colonne des dates.

En travaillant sur ce tableau j'ai fait un petit truc qui permet de vérifier la cohérence de la plage de dates saisies, c'est à dire que les mois et les années se suivent dans le bon ordre :

'sélectionne la première date dans la feuille des extractions

Sheets("essais").Select
Range("B7").Select

' boucle do until cellule vide (fin de la plage des dates)

Do Until IsEmpty(ActiveCell)

'vérifier les données à l'intérieur d'un mois

If Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) And Year(ActiveCell) Year(ActiveCell.Offset(-1, 0)) Then

ActiveCell.Offset(1, 0).Select

'vérifier les données à l'intérieur d'une année

ElseIf (Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) + 1 And Year(ActiveCell) Year(ActiveCell.Offset(-1, 0))) Then

ActiveCell.Offset(1, 0).Select

'vérifier si décembre d'une année A est suivi par janvier de l'année A+1

ElseIf (Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) - 11 And Year(ActiveCell) (Year(ActiveCell.Offset(-1, 0))) + 1) Then

ActiveCell.Offset(1, 0).Select

'Sinon, afficher message d'erreur

Else

MsgBox "SVP veuillez vérifier la plage de dates saisie": ActiveCell.Offset(1, 0).Select

End If

Loop


End Sub




Maintenant je cherche à réaliser la chose suivante :

séparer les données, mois par mois, en créant autant de nouvelles feuilles que de mois, chaque feuille portant comme nom l'année et le mois de la plage de données ainsi séparée.


Pour le moment j'ai fait ce truc qui est censé créer une nouvelle feuuille, vide, par mois, mais je sais qu'en utilisant ActiveCell ça ne peut pas marcher ; je me demande aussi si il n'y a pas une manière plus futée de faire ce que je veux...


'sélectionne la première date dans la feuille des extractions

Sheets("essais").Select
Range("B7").Select

'premier mois extraction = mois premier jour cycle

Do Until IsEmpty(ActiveCell)

'si le mois et l'année ne changent pas => parcourt les valeurs

If Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) And Year(ActiveCell) Year(ActiveCell.Offset(-1, 0)) Then

ActiveCell.Offset(1, 0).Select


'si le mois change => créée une nouvelle feuille

ElseIf Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) + 1 And Year(ActiveCell) Year(ActiveCell.Offset(-1, 0)) Then

ActiveWorkbook.Sheets.Add after:=Worksheets("essais")

ActiveSheet.Name = datepart("yyyy", ActiveCell) & datepart("m", ActiveCell)

ActiveCell.Offset(1, 0).Select


'si le mois et l'année changent => créée une nouvelle feuille


ElseIf Month(ActiveCell) Month(ActiveCell.Offset(-1, 0)) + 1 And Year(ActiveCell) Year(ActiveCell.Offset(-1, 0)) + 1 Then

ActiveWorkbook.Sheets.Add after:=Worksheets("essais")

ActiveSheet.Name = datepart("yyyy", ActiveCell) & datepart("m", ActiveCell)

ActiveCell.Offset(1, 0).Select

Else

End If

Loop





Merci !

1 réponse

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
Salut,

Au lieu de faire un test sur l'activeCell, parcourt plutôt ton tableau jusqu'à trouver une cellule vide :


while Sheet.Cells(ligne, colonne) <> ""
'...
ligne = ligne+1
wend

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement