IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

On error, comportement bizarre [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    technicien télévision retraité
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien télévision retraité

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut On error, comportement bizarre
    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'

    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 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 = b
    Ce code fonctionne pour l'autre chaîne, "3 JUN 2014" et la cellule affiche "3 juin 2014" (également une vraie date).

    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 :

    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
    C'est un peu tordu mais ça marche.

    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 :
    Nom : écran XL.jpg
Affichages : 112
Taille : 32,4 Ko

    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

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour,

    Citation Envoyé par Pier3d Voir le message

    Encore un problème de Date. Arriverai-je un jour à en comprendre les mécanismes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub tt()
    Dim d As String
    col = 4
    Columns(col).Clear
    Columns(col).NumberFormat = "m/d/yyyy"
     
     
    'Sans la fonction CDate, VBA reconnait dans une chaine seulement les dates américaines
    d = "31 MAy 2014": Cells(1, col) = d
    d = "MAy 31, 2014": Cells(2, col) = d
    d = "05/12/2014": Cells(3, col) = d
     
     
    'Avec la fonction CDate, VBA reconnait dans une chaine seulement les dates francaises si les paramètres régionaux dans Windows sont Francais (France)
    d = "31 MAI 2014": Cells(4, col) = CDate(d)
    d = "MAI 31, 2014": Cells(5, col) = CDate(d)
    d = "12/05/2014": Cells(6, col) = CDate(d)
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    technicien télévision retraité
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien télévision retraité

    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    'Sans la fonction CDate, VBA reconnait dans une chaine seulement les dates américaines
    'Avec la fonction CDate, VBA reconnait dans une chaine seulement les dates francaises si les paramètres régionaux dans Windows sont Francais (France)
    Merci. Cela répond à une de mes questions. Il reste à savoir comment Visa peut écrire, dans le même état de compte, MAI et JUN. Manifestement, ils n'ont pas prévu qu'un bizarre comme moi voudrait manipuler ces données dans Excel. J'ai vérifié et Visa utilise les trois premières lettres du mois en français sauf juin et juillet. Donc on a MAR, AVR, MAI, puis JUN et JUL, ensuite AOÛ, SEP, OCT, etc.

    Le problème c'est que Excel pense que ces 2 mois sont écris en anglais.

    J'ai réglé le tout avec deux petits remplacements JUN par juin et JUL par juil.

    Merci beaucoup !

    RÉSOLU

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comportement bizarre de mes FPS
    Par Ekinoks dans le forum OpenGL
    Réponses: 7
    Dernier message: 22/08/2005, 15h14
  2. xsl:test .... avec comportement bizarre
    Par Blue LC dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h56
  3. [ACESS][MEMO][ISNULL]Comportement bizarre
    Par seb.49 dans le forum ASP
    Réponses: 2
    Dernier message: 09/06/2004, 10h44
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. [Sybase] Comportement bizarre d'une table
    Par sdozias dans le forum Sybase
    Réponses: 4
    Dernier message: 03/02/2004, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo