Problème avec year()

zapp56 -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
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...
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
zapp56
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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