date, somme, userform et VBA

D

dth_2003

Guest
Bonjour le forum,

Hier je posais une question sur les dates, je remercie d'ailleur LaurentTBT pour la solution qu'il m'a proposer. Malheureusement même si la formule tourne cela ralenti considérablement mon application dans ces autres tâche. Alors je me demandais si il y aurait pas un crac en VBA pour m'aider.

Je reéexpose mon soucis.

J'ai deux colonne, une avec des dates et l'autre avec des valeurs chiffrés et j'aimerais qu'en fonction du mois sélectionner dans un userform je puisse afficher dans ce même userform la somme des différentes valeurs correspondante a ce mois.

Merci a Tous. Je cherche de mon coté, j'y vais.
 
L

LaurentTBT

Guest
Salut, dth_2003.

Voilà la version macro.
J'ai également laissé la version formule, comme cela, les 2 sont en un seul fichier.

Bonne soirée.
Laurent.
 

Pièces jointes

  • SommeSelonMois.zip
    12.6 KB · Affichages: 112
D

dth_2003

Guest
Salut Laurent et le forum,

ta macro marche du tonerre, je l'ai biensur adapter a mon application mais c'est nickel, perso je nage encore avec tout les format et les fonctions.

J'aurais juste une petite question, dans une de mes pages mes deux colonnes sont entrecoupé de ligne vide ou comprenant un titre du genre :

01/01/2003 25
02/05/2003 155

Titre 1

06/01/2003 5
08/03/2003 95

etc...

Dans ce cas de figure j'ai une erreur (13), pourtant lorsque je regarde ta macro, j'ai pas l'impression que les blancs la gêne ni même que le fait que tout ne soit pas trier en ordre croissant soit gênants, peut être les titres ???

Merci d'avance.

dth
 
L

LaurentTBT

Guest
Bonjour à tous, salut Dth,

Le problème vient de l'appel de DateValue(Cells(i, 2)), qui lorsque la cellule n'est pas une date provoque le bug.
Il suffit donc de tester si la cellule est une date où non, ce que VBA permet de faire aisément avec IsDate, en rajoutant un test:
Dans la macro complète de mon exemple joint dans le post d'hier, remplace

If Month(DateValue(Cells(i, 2))) = CbxMois.ListIndex + 1 Then Résultat = Résultat + Cells(i, 3)

par

If IsDate(Cells(i, 2)) Then
If Month(DateValue(Cells(i, 2))) = CbxMois.ListIndex + 1 Then Résultat = Résultat + val(Cells(i, 3))
End If

Normalement, les cellules qui ne comportent pas de date ne sont plus prises en compte.

Bon week-end.
Laurent.
 
D

dth_2003

Guest
Dis Laurent je t'ennuie encore 5 min. La même chose est possible je suppose mais en ne faisant plus par rapport au mois mais bien au année. Je suppose qu'on aurait un truc du genre :

If Year(DateValue(Cells(i, 2))) = CbxAnnée.ListIndex + 1 Then Résultat = Résultat + val(Cells(i, 3))

En ayant dans la Combox une boucle pour avoir par ex. 40 année :

ComboBox2.AddItem Format(37621 + i * 360, "YYYY")

Il y a une erreur la dedans, car je trouve 0 partout ce qui n'est pas normal.

Merci encore.
 
L

LaurentTBT

Guest
Salut, Dth.

Tu as failli me rater pour 1 minute, j'allais arrêter l'ordi.

Bon, CbxMois.listindex+1, c'était une astuce pour convertir le mois choisi (en lettre) en chiffre de 1 à 12.
Listindex, c'est l'index de l'élément choisi dans la liste, sachant que le premier (à savoir janvier) vaut 0.
Si tu choisis Mars, c'est le troisième élément; Listindex vaut alors 2.
Donc CbxMois.listindex+1 vaut bien 3, numéro de mois de mars.

Pour l'année, il faut directement comparer l'année de la cellule au contenu de CbxAnnée, qui contient bien les années en chiffres.
Seul petit truc, un combobox, même s'il contient des chiffres, renvoit une chaîne de caractère.
si year(DateValue(Cells(i,2)) vaut 2003, et que le combo vaut "2003", VBA considère qu'ils ne sont pas égaux.
Astuce: convertir la chaîne de caractère du combobox en numérique.

Donc voilà la syntaxe qu'il te faut:
If Year(DateValue(Cells(i, 2))) = Val(CbxAnnée) Then Résultat = Résultat + val(Cells(i, 3))

Bonne fin de soirée, et bon dimanche à tous.
Laurent.
 
L

LaurentTBT

Guest
Encore moi, pour une petite précision:

Si tu as des données sur plusieurs années, le total par mois totalise sur TOUTES les années.
Si tu veux avoir le total du mois choisi en CbxMois, pour l'année choisie en CbxAnnée, mets les 2 conditions:

If Month(DateValue(Cells(i, 2))) = CbxMois.ListIndex + 1 and Year(DateValue(Cells(i, 2))) = Val(CbxAnnée) Then Résultat = Résultat + val(Cells(i, 3))

Salut.
 

Discussions similaires

Réponses
2
Affichages
168

Statistiques des forums

Discussions
312 971
Messages
2 094 046
Membres
105 927
dernier inscrit
rayade baali