Problème avec year()
zapp56
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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...
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:
- Problème avec year()
- Sent with new year effect - Accueil - Messagerie instantanée
- Game of the year 2022 - Accueil - Guide jeu vidéo
2 réponses
Bonjour
avec un
Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
avec un
Left(cur,4)peut être. . ?
Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
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
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
Elle se termine toujours par l'année...
donc tu as juste à faire un RIGHT de ta 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.