date, somme, userform et VBA

  • Initiateur de la discussion Initiateur de la discussion dth_2003
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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
 
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.
 
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.
 
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
12
Affichages
1 K
Retour