Problème avec year()

Fermé
zapp56 - 6 janv. 2015 à 23:00
eriiic Messages postés 24510 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 18 mars 2023 - 7 janv. 2015 à 18:32
Bonjour,

J'ai programmé un peu en VBA sur des fichers ".xls" et j'ai voulu, pour mon travail, développer un ".xlsm".

Je n'avais jamais rencontré ce problème en vba, et je n'en comprends pas la source.
L'idée est de créer une base de données référencée par la date de création des données.
Ainsi, une référence est :
jour * 1000000 + mois * 100000 + année.

Jusque là, pas de souci. Mais je veux organiser ma base de données par "colonne par année". Autrement dit une colonne pour 2014, la suivante pour 2015, la suivante pour 2016... Et que ça se fasse automatiquement. Pour tout ça, j'ai les idées et les connaissances suffisantes en terme de programmation vba, mais je rencontre un problème tout à fait inattendu :

Pour "scanner" les différentes colonnes dans le but de trouver une année donnée, je recours à ce "simple" calcul :

// curr est la valeur d'une cellule scannée, col est la colonne scannée.

curr = Sheets("feuil2").Cells(1, col)
curr = (10000 * ((curr / 10000) - Int(curr / 10000)))

Ce calcul devrait, selon la procédure, me sortir des "2014, 2015, 2016..."
Or, il me trouve "2015.0000000003", "2016.000000001" etc

Je me suis dit que je pourrais corriger le problème avec un petit "int()" mais le souci c'est qu'il zappe le 2016 et je me retrouve avec deux 2017 (dont un "2017.9999999999")

Une idée ?

Cordialement...

2 réponses

jordane45 Messages postés 37253 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 mars 2023 4 551
Modifié par jordane45 le 7/01/2015 à 01:18
Bonjour
avec un
Left(cur,4) 
peut être. . ?

Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
jordane45 Messages postés 37253 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 mars 2023 4 551
7 janv. 2015 à 01:18
En même temps... vu ta formule pour créer tes références....
jour * 1000000 + mois * 100000 + année. 

Elle se termine toujours par l'année...
donc tu as juste à faire un RIGHT de ta cellule...
curr = Right(Sheets("feuil2").Cells(3, 4).Value, 4)
0
Je ne peux pas utiliser "right" dans le sens où cette donnée n'existe que dans le programme. C'est le programme qui crée la référence, il n'y a rien dans la cellule. Le programme calcule la référence par les données year month day et inscrit la référence ainsi calculée dans une cellule.

J'ai fini par retravailler sur mon code vba et en fait ce n'est qu'un problème de parenthèses.
Merci de vos réponses rapides néanmoins.
0
eriiic Messages postés 24510 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 18 mars 2023 7 166
7 janv. 2015 à 18:32
Bonjour,

C'est normal. Ce sont des erreurs d'arrondi suite aux conversions interne decimal/binaire.
Utilise Arrondi(...;0)

Mais pourquoi tu ne mets pas plutôt la date dans la cellule avec le format "jjmmaaaa" ???
Là tu ne peux même pas trier, en galère rien que récupérer l'année. Ca serait plus simple pour toi et excel.

eric
0