Je viens vers vous après de nombreuses tentatives soldées par des échecs.
Je suis en train de préparer un fichier de calcul pour mon travail.
Je suis novice en VBA, mais grâce à l'enregistreur et aux multiples sujets sur les forums j'ai pu avancer mon fichier sans trop de soucis.. Jusqu'à maintenant !
Je bloque sur la syntaxe pour utiliser le résultat d'une Inputbox dans une formule SUMIFS
Ci-dessous mon InputBox :
Code:
periodetraitee = InputBox("../../....", "A quelle date voulez-vous traiter le document ?")
anneetraitee = Year(periodetraitee)
Sheets("Notice").Range("N2") = periodetraitee
Comme vous le comprendrez, cette InputBox renvoie donc une date que j'affecte ensuite à là cellule N2 de ma feuille "Notice". Jusque là, tout va bien.
Mon problème survient ensuite.
Comment puis-je utiliser "periodetraitee" ou "anneetraitee" dans une formule ?
Je souhaite chercher des éléments inférieure à cette date, donc pour l'instant j'ai écris ceci dans ma formule :
Code:
""<""&""31/12/""&YEAR(Notice!R2C14))
Si ma date en N2 est par exemple le 31/05/2018, mon calcul ne prendra que les éléments < 31/12/2017.
Ca, ça marche, aucune soucis.
Mais j'aimerais, si possible, remplacer le code ci-dessus par quelque chose comme :
Code:
""<""&""31/12/""&anneetraitee
J'ai essayé mais ça ne fonctionne pas.. Je n'ai pas de message d'erreur lors de l’exécution de ma macro, mais les calculs ne se font pas. A la place, la valeur "#NOM?" est renvoyée.
Pouvez-vous m'aider à trouver la bonne syntaxe svp ??
Merci d'avance pour le temps accordé à ce post
EDIT : Je n'ai pas parlé de "periodetraitee" mais je compte m'en servir aussi, donc non, cette variable n'est pas inutile lol
(J'ai changé 31/12 en 01/01, c'était une erreur de ma part).
Je joindrai un classeur anonymisé, mais cela va prendre un peu de temps, je travaille sur 55.000 lignes, donc pour simplifier et anonymiser en gardant le principe du fichier cela risque de prendre du temps)
PS : j'ai oublié de préciser que je travaille sur Excel 2013
Et avec """<"" & CDbl(DateSerial(AnnéeTraitée, 12, 31)) ça donne quoi ?
En général quand on concatène à "<" une date les "/" disparaissent, c'est le numéro de série du jour de la date qui est pris.
Je teste ça dans un moment et je reviens vers vous.
Je ne connais pas CDbl, si j'ai bien compris il s'agit de convertir le numéro de série au format date c'est bien ça ?
Non, au contraire CDbl convertit une date en le nombre de jour écoulés depuis le 1er janvier 1900.
Pourquoi je suggère de faire ça ? :
Dans une feuille que j'avais sous la main j'ai mis :
En F7 :
Code:
=AUJOURDHUI()
En F11 :
Code:
=F7-5
En F12, propagé sur 8 lignes :
Code:
=F11+1
Enfin en F9 :
Code:
=NB.SI(F$11:F$19;"<"&$F$7)
Cette dernière formule me répond 5. C'est bon, c'est normal.
Maintenant dans ma formule je sélectionne l'expression "<"&$F$7 et je fais F9 pour la remplacer par sa valeur.
Voilà ce qui en résulte:En F9 :
Staples1600, merci pour ces précisions. Mon problème survient lorsque je veux utiliser une date stockée dans la variable "anneetraitee"
Dranreb, merci également pour cette piste, et pour l'explication sur CDbl.
J'ai remplacé
Code:
""<01/01/2018""
par
Code:
""<"" & CDbl(DateSerial(AnnéeTraitée, 1, 1))
Mais ça ne fonctionne toujours pas, la macro tourne mais je renvoie pas de valeur (j'ai essayé de bidouillé, j'obtiens soit 0 soit #NOM? lorsque je fais F9).
Je comprends qu'il n'est pas facile de comprendre mon soucis sans fichier. J'essaierai ce soir ou demain de l'anonymiser.
Il est surtout impossible de vérifier nos propositions. À la réflexion les deux doubles apostrophes en fin de ""<"" sont sans doutes incorrectes. Il n'en faudrait qu'une pour que l'expression CDbl etc. soit traitée. Par contre il faudrait faire suivre l'expression de & """…
J'ai finalement opté pour une solution plus simple !
N'arrivant pas à utiliser la variable "anneetraitee" dans ma formule, j'ai fixé sa valeur dans une cellule sur une nouvel feuille. J'utilise ensuite le Range où se situe la valeur, puis je supprime l'onglet à la fin de ma macro.
C'est sûrement un peu moins propre comme ça, mais ça marche !