XL 2016 Calcul à partir d'une date précise ou - à défaut - à partir de la date qui suit immédiatement après

Lorenzini

XLDnaute Occasionnel
Bonjour,

Pouvez-vous m'aider car cela fait maintenant plusieurs jours que je recherche sur le web des réponses et je ne trouve pas mon bonheur...
Voici le problème auquel j'ai tenté en vain de trouver une solution vu mes connaissances rudimentaires.
J'ai un tableau avec différentes données :
Dans la colonne J --> des montants correspondants à des coûts (en €)
Dans la colonne U --> des dates
En H2-I2, j'ai affecté à un dessin type "ballon" (avec un point d'interrogation), une macro qui appelle un UserForm ; jusque-là, tout simple.
A son ouverture, l'utilisateur doit rentrer une date (merci à PatrickToulon qui m'avait déjà bien aidé sur le masque de saisie du TextBox).
L'idée, c'est d'arriver à dire en VBA : à partir de la date que je t'ai renseigné dans le TextBox - où à celle qui suit tout de suite après (à défaut d'avoir trouvé la date en question) - je voudrais que tu me fasses la somme de la colonne J.
C'est le "où à celle qui suit tout de suite après" qui me rebute.
J'ignore comment traduire çà en VBA !?
Après, bon, avec mes connaissances assez limitée...

Je donne un exemple : J'appelle le formulaire et je tape dans le textbox : "20/02/2023"
S'il trouve le 20/02/2023, je peux essayer de bidouiller qqch pour faire en sorte qu'il se positionne sur la même ligne, en colonne J (j'imagine qu'il faudrait travailler ici avec des "ActiveCell.Offset" ?), et de là, qu'il compte jusqu'en, je ne sais pas moi, J50 ou J100, peu importe et lui demander qu'il me renvoit le résultat dans un beau label 😍...
Le problème 🤔, c'est que s'il NE TROUVE PAS le 20/02, je ne sais pas comment dire en VBA : recherche dans le tableau la date du 20/02/2023 (ou si tu ne trouves pas : le 21/02... ou le 22/02... ou le 23/02... enfin, la date qui suit IMMEDIATEMENT APRES et positionne toi en regard de cette date dans la colonne J pour compter jusqu'en J50 ou J100... 🧐
Je ne sais pas si j'ai été assez clair ? Enfin, voilà, j'avoue que je suis perdu !
Est-ce que quelqu'un pourrait éclairer ma lanterne de débutant ?

Merci d'avance pour votre aide :)
 

Pièces jointes

  • Imprimerie Economat 2.xlsm
    42.6 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Lorenzini,
Sincèrement je n'ai pas tout compris.
Donc avant de le faire en VBA faisons le simplement en formules. Voir PJ.
Solution 1:
En Y5 mettre la date désirée.
Sont donnée ensuite la ligne qui correspond à la date demandée ou à défaut la première date la plus proche, puis en cellule Y8 donne la somme de la colonne J à partir de cette date.
Solution 2, beaucoup plus simple.
Si en Y11 vous mettez la date désirée, alors la somme de J à partir de cette date est donnée par :
VB:
=SOMME.SI(U4:U500;">="&Y11;J4:J500)

C'est bien ce que vous voulez ? Sinon reformulez. :)
 

Pièces jointes

  • Imprimerie Economat 2.xlsm
    37.8 KB · Affichages: 6
Dernière édition:

Lorenzini

XLDnaute Occasionnel
Bonsoir Lorenzini,
Sincèrement je n'ai pas tout compris.
Donc avant de le faire en VBA faisons le simplement en formules. Voir PJ.
Solution 1:
En Y5 mettre la date désirée.
Sont donnée ensuite la ligne qui correspond à la date demandée ou à défaut la première date la plus proche, puis en cellule Y8 donne la somme de la colonne J à partir de cette date.
Solution 2, beaucoup plus simple.
Si en Y11 vous mettez la date désirée, alors la somme de J à partir de cette date est donnée par :
VB:
=SOMME.SI(U4:U500;">="&Y11;J4:J500)

C'est bien ce que vous voulez ? Sinon reformulez. :)
Bonsoir sylvanu et tout d'abord, merci pour votre aide 👍 :)
Alors, j'admets que j'ai mis du temps à tenter de clarifier mes explications ; et au final, je me suis quand même demandé si j'avais été clair ?
Des fois, pour plaisanter, je me dis que j'ouvrirais bien un "magasin de noeuds", tellement j'ai l'art de compliquer les choses ! LOL !
Alors merci car, oui, vos solutions m'aident et me renvoient le résultat que je souhaitais.
J'aurais aimé programmer une de celle que vous proposez en VBA.
Pour (re)tenter d'être plus clair/compréhensible :
En fait, je voulais qu'après avoir saisi une date (dans le textbox de mon formulaire) et avoir validé en cliquant sur le CommandButton "Calculer", Excel me renvoit (p.ex. sur un contrôle de type Label) la somme des montants (de la colonne J:J) correspondant à partir de la date renseignée ou à défaut la plus proche.
Par exemple, si on tapait le 18/04, pas de problème car la 1ère occurence de cette date se trouve en cellule U7 et donc, il ne restait plus qu'à lui demander de faire la somme des montants à partir de J7 (jusqu'en J100 p.ex.).
Par contre, si on tapait p.ex. le 19/04, problème (pour le débutant que je suis) : il n'y a pas cette date dans le tableau !, donc, je voulais qu'il me trouve la date suivante, juste après. Ici, c'est le 21/04 en cellule U9.
Il devait donc commencer à compter les montants de la colonne J:J à partir de la cellule J9 (jusqu'en J100).
Dire tout ceci en VBA me pose problème mais les solutions que vous proposez me donnent le résultat que je souhaitais. 😁
 

Pièces jointes

  • Imprimerie Economat 2.xlsm
    31.4 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Le but de la précédente PJ était d'être sur d'avoir compris.
Nouvelle PJ avec la macro TextBox1_AfterUpdate modifiée.
Attention le VBA ne parle que "ricain", y compris pour les dates ! :)
VB:
EUDate = TextBox1.Text
USDate = Month(EUDate) & "/" & Day(EUDate) & "/" & Year(EUDate)
Total = Round(Application.SumIf(Range("U4:U500"), ">=" & USDate, Range("J4:J500")), 2)
Me.Label2 = "Le coût TOTAL s'élève à " & Total & "€"
 

Pièces jointes

  • Imprimerie Economat (V2).xlsm
    39.9 KB · Affichages: 4

Lorenzini

XLDnaute Occasionnel
Bonsoir,
Le but de la précédente PJ était d'être sur d'avoir compris.
Nouvelle PJ avec la macro TextBox1_AfterUpdate modifiée.
Attention le VBA ne parle que "ricain", y compris pour les dates ! :)
VB:
EUDate = TextBox1.Text
USDate = Month(EUDate) & "/" & Day(EUDate) & "/" & Year(EUDate)
Total = Round(Application.SumIf(Range("U4:U500"), ">=" & USDate, Range("J4:J500")), 2)
Me.Label2 = "Le coût TOTAL s'élève à " & Total & "€"
Merci sylvanu 👍 😁
 

Discussions similaires

Réponses
9
Affichages
340

Statistiques des forums

Discussions
313 226
Messages
2 096 363
Membres
106 585
dernier inscrit
Tortank69