OVH Cloud OVH Cloud

Répartition par mois

3 réponses
Avatar
Jean-Pierre
Bonjour,

J'ai un problème de fond

J'ai un tableau d'environ 20 000 lignes avec des noms, des valeurs et des
dates...

Je souhaite, en outre, comptabiliser les valeurs en les répartissant par
mois.

J'ai tester une appli avec FOR TO et des IF, mais la macro est trop longue
compte tenu des autres tris, l'exécution dure environ 1/2 heure.

Je n'arrive pas à utiliser SELECT CASE, la ligne en dessous ne fonctionne
pas

Case Is > Sheets("Nb").Cells(1, 4) And Sheets("D").Cells(i, 8) <
Sheets("Nb").Cells(1, 6) 'JANVIER

Il me reste à utiliser des IF avec un test pour chacun des mois, mais cela
implique de réécrire les expressions pour chaque mois.

Je sais pas si j'ai été bien clair

Si vous avez une idée je suis preneur.

Merci d'avance

Jean-Pierre

3 réponses

Avatar
Ilan
Bonjour Jean-Pierre
Qu'entends-tu par comptabiliser les valeurs ?

Puisqu'il n'existe que 12 mois cree un tableau (indice de 0 a 11)

Exemple : Pour une somme des valeurs par mois
Dim ValeurParMois(11) as Double
Dim i As integer, Mois As integer
i=1
While range("A" & i).Value<>""
Mois=Month(CDate(Range("C" & i).Value))
ValeurParMois(Mois-1)=ValeurParMois(Mois-1)+Range("B" & i).Value
i=i+1
Wend
(si colonne B contient les valeurs et la colonne C les dates)




Bonjour,

J'ai un problème de fond

J'ai un tableau d'environ 20 000 lignes avec des noms, des valeurs et des
dates...

Je souhaite, en outre, comptabiliser les valeurs en les répartissant par
mois.

J'ai tester une appli avec FOR TO et des IF, mais la macro est trop longue
compte tenu des autres tris, l'exécution dure environ 1/2 heure.

Je n'arrive pas à utiliser SELECT CASE, la ligne en dessous ne fonctionne
pas

Case Is > Sheets("Nb").Cells(1, 4) And Sheets("D").Cells(i, 8) <
Sheets("Nb").Cells(1, 6) 'JANVIER

Il me reste à utiliser des IF avec un test pour chacun des mois, mais cela
implique de réécrire les expressions pour chaque mois.

Je sais pas si j'ai été bien clair

Si vous avez une idée je suis preneur.

Merci d'avance

Jean-Pierre








Avatar
E KERGRESSE
Salut Jean-Pierre,

Un tableau croisé dynamique ne réglerait-il pas plus simplement ton problème
?

Pour cela, si tes dates ;
- ne concernent qu'une seule année, tu rajoutes une colonne Mois dans ton
tableau et tu calcules le mois de chaque mouvement avec la formule
=Mois(Celluledate)
- concernent plusieurs années alors ta nouvelle colonne contient la formule
=Annee(CelluleDate) & "-" & Mois(CelluleDate)

NB : CelluleDAte étant la référence à ta cellule contenant la date, au cas
où cela ne serait pas suffisamment clair.

Tu construis ensuite ton TCD avec ce champ.

Si tu dois récupérer les totaux mensuels pour la suite de ton programme, tu
peux le faire assez facilement en VBA à partir des lignes de titre et des
totaux de ton tableau.

Cordialement.



"Jean-Pierre" a écrit dans le message de news:
0mJnd.16310$
Bonjour,

J'ai un problème de fond

J'ai un tableau d'environ 20 000 lignes avec des noms, des valeurs et des
dates...

Je souhaite, en outre, comptabiliser les valeurs en les répartissant par
mois.

J'ai tester une appli avec FOR TO et des IF, mais la macro est trop
longue

compte tenu des autres tris, l'exécution dure environ 1/2 heure.

Je n'arrive pas à utiliser SELECT CASE, la ligne en dessous ne fonctionne
pas

Case Is > Sheets("Nb").Cells(1, 4) And Sheets("D").Cells(i, 8) <
Sheets("Nb").Cells(1, 6) 'JANVIER

Il me reste à utiliser des IF avec un test pour chacun des mois, mais cela
implique de réécrire les expressions pour chaque mois.

Je sais pas si j'ai été bien clair

Si vous avez une idée je suis preneur.

Merci d'avance

Jean-Pierre







Avatar
Jean-Pierre
Merci pour ces bonnes idées

Je vais les tester

@+

Jean-Pierre

"Jean-Pierre" a écrit dans le message de news:
0mJnd.16310$
Bonjour,

J'ai un problème de fond

J'ai un tableau d'environ 20 000 lignes avec des noms, des valeurs et des
dates...

Je souhaite, en outre, comptabiliser les valeurs en les répartissant par
mois.

J'ai tester une appli avec FOR TO et des IF, mais la macro est trop
longue compte tenu des autres tris, l'exécution dure environ 1/2 heure.

Je n'arrive pas à utiliser SELECT CASE, la ligne en dessous ne fonctionne
pas

Case Is > Sheets("Nb").Cells(1, 4) And Sheets("D").Cells(i, 8) <
Sheets("Nb").Cells(1, 6) 'JANVIER

Il me reste à utiliser des IF avec un test pour chacun des mois, mais cela
implique de réécrire les expressions pour chaque mois.

Je sais pas si j'ai été bien clair

Si vous avez une idée je suis preneur.

Merci d'avance

Jean-Pierre