Bonjour,
Encore un problème de Date. Arriverai-je un jour à en comprendre les mécanismes ?
Je reçois des dates de différents formats et langues. Exemple : parfois "10 MAI" et, dans le même fichier, "3 JUN". J'y ajoute "2014" ce qui me donne "10 MAI 2014" et "3 JUN 2014" que je mets dans la variable 'b'
Ce code fonctionne pour la première chaîne "10 MAI 2014" et la cellule affiche "10 mai 2014", une vraie date (Je veux dire par « vraie » date, un contenu de cellule qui répond au changement de format de date, par exemple, Date courte et Date longue).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Range("Xx").NumberFormat = "dd mmm yyyy" Range("Xx").Value = CDate(b)
Ce code fonctionne pour l'autre chaîne, "3 JUN 2014" et la cellule affiche "3 juin 2014" (également une vraie date).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Range("Xx").NumberFormat = "dd mmm yyyy" Range("Xx").Value = b
Comme tout ça fait partie d'une boucle qui affiche des dizaines de dates du mois de mai et du mois de juin, j'ai voulu mettre les deux lignes de code dans la boucle.
Comme la première, celle qui fonctionne pour MAI donne une erreur lorsqu'arrive le mois de 'JUN' (oui en anglais), j'ai pensé à cette astuce :
C'est un peu tordu mais ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Range("Xx").NumberFormat = "dd mmm yyyy" On Error GoTo Yes ' si erreur Range("Xx").Value = CDate(b): GoTo Allo Yes: Range("Xx").Value = b Allo: On Error GoTo 0
Le problème c'est que ça ne marche qu'une fois. La première fois que la fonction CDate() provoque une erreur, le contrôle est passé à la ligne Yes, le résultat de b est affiché et la boucle boucle.
Mais la fois suivante, On Error ne fonctionne pas et le message d'erreur système apparaît : " Erreur d'exécution 13, incompatibilité de type ".
J'ai ici deux questions : D'abord pourquoi la fonction CDate() est nécessaire avec une chaîne et pas avec l'autre. Je répète que j'obtiens le résultat souhaité, une vraie date.
Voici une capture d'écran du résultat :
On voit à la ligne 35 que "1 JUN 2014" a donné "01 juin 2014" sans la fonction CDate() alors qu'avant, il fallait CDate() pour que "31 MAI 2014" donne "31 mai 2014".
La deuxième question, c'est le comportement de On Error. C'est surtout le fait qu'il fonctionne une fois, puis c'est tout. J'ai utilisé cette commande des dizaines de fois et c'est la première fois qu'elle refuse de fonctionner.
Pierre
---Windows 7, Excel 2007
Partager