cs_pnt
Messages postés21Date d'inscriptionmardi 26 décembre 2006StatutMembreDernière intervention 6 décembre 2009
-
30 déc. 2006 à 07:27
cs_pnt
Messages postés21Date d'inscriptionmardi 26 décembre 2006StatutMembreDernière intervention 6 décembre 2009
-
1 janv. 2007 à 11:39
Bonjour,
A partir d'une liste dans laquelle sont notés:
colonne A les date et colonne B le KM réalisé pour ces dates.
Comment peut on écrire en VBA les éléments suivants:
La somme de KM par semaine
La somme de KM par Mois
La somme de KM par An
Merci pour votre aide et passez de bonnes fêtes!!!
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 30 déc. 2006 à 18:49
Salut,
je pars du principe que tes données Date se trouvent dans la colonne A, et les KM dans la colonne B (et le résultat se mettront dans les colonnes E et F).
Pour tester, ouvre un fichier vierge et place tes données en colonnes A et B, sachant que pour la recherche et l'affichage des résultat, dans ton fichier réel, il faudra que tu fasses 2 ou 3 modifs :
Sub Calcul()
'= ==================================================================================
' Traitement par an / mois :
'===================================================================================
Dim i As Integer
Dim j As Integer
Dim PLV As Integer
Dim NbKM As Long
Dim DateDebutAnnee As Date
Dim DateFinAnnee As Date
Dim DateDebutMois As Date
Dim DateFinMois As Date
DateDebutAnnee = CDate("01-01-" & Year(Date))
DateFinAnnee = CDate("31-12-" & Year(Date))
NbKMannuel = 0
PLV = PremiereLigneVide(1) 'recherche la première ligne vide dans la colonne A
' afin de limiter la boucle aux besoins
For i = 1 To PLV
If Range("A" & i).Value >= DateDebutAnnee And Range("A" & i).Value <= DateFinAnnee Then
NbKM = NbKM + CLng(Range("B" & i).Value)
End If
Next i
For j = 1 To 12
If j <> 12 Then
DateDebutMois = CDate("01-" & Format(j, "00") & "-" & Year(Date))
DateFinMois = CDate("01-" & Format(j + 1, "00") & "-" & Year(Date)) - 1
' ici ça prendra en compte si le dernier jour est le 28 ou 29 février
Else
DateDebutMois = CDate("01-" & Format(j, "00") & "-" & Year(Date))
DateFinMois = CDate("01-" & Format(j + 1, "00") & "-" & Year(Date) + 1) - 1
End If
NbKM = 0
For i = 1 To PLV
If Range("A" & i).Value >= DateDebutMois And Range("A" & i).Value <= DateFinMois Then
NbKM = NbKM + CLng(Range("B" & i).Value)
End If
Next i
Select Case iWeekDay
Case 1: bValTemp = 5: Case 2: bValTemp = 6: Case 3: bValTemp = 0: Case 4: bValTemp = 1: _
Case 5: bValTemp = 2: Case 6: bValTemp = 3: Case 7: bValTemp = 4
End Select
iNbJour = CLng(DateDiff("d", CDate("31/12/" & DatePart("yyyy", vDate) - 1), vDate))
a = IIf((iNbJour + bValTemp) / 7 < 1, 53, CStr((iNbJour + bValTemp) / 7))
If VarType(a) = vbString Then b() = Split(a, ","): WeekNumber = b(0): Erase b Else WeekNumber = a
End Function
Sub Exemple_Utilisation()
MsgBox WeekNumber(#1/8/1990#)
MsgBox WeekNumber()
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 30 déc. 2006 à 20:45
Je viens de remarquer que j'avais fait une erreur, voici la correction :
If j <> 12 Then
DateDebutMois = CDate("01-" & Format(j, "00") & "-" & Year(Date))
DateFinMois = CDate("01-" & Format(j + 1, "00") & "-" & Year(Date)) - 1
' ici ça prendra en compte si le dernier jour est le 28 ou 29 février
Else
DateDebutMois = CDate("01-" & Format(j, "00") & "-" & Year(Date))
' *** CORRECTION SUR LA PROCHAINE LIGNE :
DateFinMois = CDate("01-01-" & Year(Date) + 1) - 1
End If
~ <small> Mortalino </small> ~
Sinon la date de fin était le 12/01 de l'année suivante, là au moins c'est bien le 31/12
@++
<hr width ="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 déc. 2006 à 14:14
C'est drôle ! pour moi le KM est le "Knowledge Managenet" !...
Bon ...
Que ce soit du KM ou des cacahuètes, peu importe, s'il faut compter...
Mais il y a une chose essentielle que tu ne nous dis pas : le type du contrôle utilisé pour cette liste à 2 colonnes et le format de ce qu'elle contient (avec précision, s'il te plait, ... et si tu veux qu'on puisse t'aider en connaissance de cause ...).
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 30 déc. 2006 à 14:47
Salut,
il faut trier tes dates en cherchant le premier jour de l'année, par exemple :
c'est simple, c'est "01/01/ & Year(Date)
(pareil pour le dernier jour de l'année avec "31/12/")
après c'est qu'une histoire de condition (If Telle valeur de cellule > "01/01/" & Year(Date) And Telle valeur de cellule < "01/01/" & Year(Date) Then ...)
Pour les mois, c'est "01/01/" & Year(Date) au "31/01/" & Year(Date)
et pour février, afin de savoir si il y a le 29 :
"01/02/" & Year(Date) au CDate("01/03/" & Year(Date)) - 1
Voilà, tu as les grandes lignes.. (n'hésite pas non plus à utiliser les formules excel, dont les valeurs seront stockées dans des cellules, ça sert énormément, t'auras plus qu'à imbriqué tes fonctions)
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
cs_pnt
Messages postés21Date d'inscriptionmardi 26 décembre 2006StatutMembreDernière intervention 6 décembre 20091 30 déc. 2006 à 17:44
Pourrais tu être plus explicite car j'ai du mal à suivre.
Voici mon tableau
<col style=\"width: 60pt;\" span=\"2\" width=\"80\" />----
Dates, KM, ----
01-01-06, 10, ----
05-01-06, 15, ----
15-01-06, 20, ----
02-02-06, 50
Comment puis je faire la somme du mois de janvier, puis par an et par semaine.
J'ai essayé cela mais cela ne fonctionne pas:
cs_pnt
Messages postés21Date d'inscriptionmardi 26 décembre 2006StatutMembreDernière intervention 6 décembre 20091 1 janv. 2007 à 11:39
Ouf, je ne m'attendais pas à quelque chose d'aussi caustaud!!!!!.
Merci encore d'avoir bien voulu partager tes connaissances qui vont me permettre de faire avancer mon projet.
J'en profite pour adresser à tous et toutes mes meilleurs voeux de santé, bonheur et prospérité.