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 :

Souci de date code VBA Excel 2010 (Francais/Anglais)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Points : 67
    Points
    67
    Par défaut Souci de date code VBA Excel 2010 (Francais/Anglais)
    Bonjour à tous,
    De nombreuse discussion traitent de ce sujet, mais ...

    J'ai un outil d'entreprise qui me donne des requetes avec des colonnes qui se compose de Date "01/02/2015" 1 fév 2015 et les cellules sont au format Texte, dc l'affichage du contenu de la cellule collé à gauche.(Excel ne voit pas que cela est une date).

    Afin de rebasculer cette colonne en date, j'avais trouvé une astuce sous VBA d'Excel 2003
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With range("A1:H1000")
      .value=.value
    end with
    Excel 2003 bascule toute mes colonnes qui sont composé de chiffre ou de date, au bon format.

    avec office 2010, ce meme code, me fait ce que l'ensemble des personnes ont identifé, l'appliquation du format anglais sur les jours <12 dc ici 02/01/2015.
    La je bloque.
    Je veux evité de rentrer dans une analyse cellule par cellule avec un for each , le traitement serait bcp plus long. je souhaite gardé le bout de code aussi simple et donc rapide.
    (pour info, je sais faire avec for each, ne vous embetez pas à me donner des exemples).

    Quelqu'un a-t-il une solution compatible avec office 2010 ?
    Mon systeme est pratique, car les requetes peuvent etre differente ds le contenu des colonnes, l'avantage du range est de couvrir toute les colonnes sans ce souci de son format.

    Merci à ceux qui pourront apporter un bout d'explication , du pk ce code ne fonctionne plus avec 2010 et marche tres bien ss 2003.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Essaie manuellement en utilisant l'enregistreur de macro.
    Sélectionne ta plage, va dans le menu Données / Convertir
    Clique 2 fois Suivant et sélectionne Date et le format JMA (qui est le format dans lequel ta date-texte est écrite)
    Clique Terminer
    MPi²

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour à tous

    Une autre suggestion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Range("A1:H1000")
      .NumberFormat = "m/d/yyyy"
      .FormulaLocal = .Value
    End With
    Cordialement

    Docmarti.

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, toujours à lire : Comprendre et gérer les dates sous Excel et en VBA


    Un pessimiste étant un optimiste avec de l'expérience et réciproquement .....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Bonjour,
    Je me suis résolu à écrire un module qui parcours mes cellules.
    avec une vérification du format de la date, meme si j'utilise Isdate, il passe quelque fois a TRUE alors qu'au vu de mes données, cela n'est pas justifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Set contenu=RANGE("A1:XX")
    Set objRegExp_1 = CreateObject("vbscript.regexp")
     objRegExp_1.Global = True
     objRegExp_1.Pattern = "^(((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}|\d))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00|[048])))"
     
    For Each cell In Contenu
          If IsDate(cell) Then
           if cell.numberformat="@" or cell.numberformat="General" then
           if objRegExp_1.Execute(cell).count>0 then cell.FormulaR1C1 = datevalue(cell.Value) Else cell.Value = cell.Value
           end if
         End If 
        Next
    Donc résolu certes, pas comme je le voulais , mais ca ira.
    merci de vos commentaires.
    t

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Quand la cellule est au format Texte, j'espère que tu changes d'abord la propriété NumberFormat pour "General" avant d'écrire la date dans la cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cell.NumberFormat = "General"
    cell.FormulaR1C1 = datevalue(cell.Value)
    Car il y a inversion Jour/Mois quand une valeur de type date est envoyée dans une cellule au format texte.


    Voici une autre technique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CorrigerAvecFormulaLocal()
     
        Set c = Range("A1:d11")
     
        For Each cell In c
     
          a = cell.Value
          cell.NumberFormat = "General"
          cell.FormulaLocal = a
     
        Next
     
    End Sub
    Cordialement

    Docmarti.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CorrigerAvecFormulaLocal()
     Set c = Range("A1:d11")
    For Each cell In c
           cell.NumberFormat = "General"
          if Day(cell.Value)<13 then cell.Value=format(cell.Value,"yyyy-dd-mm") else format(cell.Value,"yyyy-mm-dd")
    Next
    End Sub

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Points : 67
    Points
    67
    Par défaut
    Docmarti:
    J'ai testé ton code, il fonctionne parfaitement, cependant, le temps de traitement est relativement plus long que mon code. J'ai bien sur désactivé sreenupdating, calculation etc...

    Fichier XLS de test, fait 2600 lignes pour 8 colonnes.

    j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     For Each cell In Contenu 
      If IsDate(cell) Then 
          a = cell.Value
          cell.NumberFormat = "General"
          cell.FormulaLocal = a
     end if
     Next
    Et là, je retrouve un temps de traitement qui me plait bien, ta routine me semble moins lourde que la mienne et avec un test en moins, donc ca doit aller plus vite.


    rdurupt :
    j'ai testé également ton code qui fonctionne aussi avec la condition que la valeur cellule ne soit pas une chaine de caractere.

    Mon fichier Xls, contient des colonnes de chaine de caractere, des nombres, des décimals etc... tout type de format.



    Merci Mrs.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub CorrigerAvecFormulaLocal()
     Set c = Range("A1:d11")
    For Each cell In c
           cell.NumberFormat = "General"
          if isdate("" & cell.Value) and instr("" & cell.Value,"/")<>0 then
             if Day(cell.Value)<13 then cell.Value=format(cell.Value,"yyyy-dd-mm") else format(cell.Value,"yyyy-mm-dd")
         end if
    Next
    End Sub

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour rdurupt

    Merci de ton code. Malheureusement, la ligne suivante semble tronquée.

    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if Day(cell.Value)<13 then cell.Value=format(cell.Value,"yyyy-dd-mm") else format(cell.Value,"yyyy-mm-dd")
    Cordialement

    Docmarti.

  11. #11
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    @ rdurupt : Voici le fichier qui me sert à tester FormulaLocal.
    Fichiers attachés Fichiers attachés
    Cordialement

    Docmarti.

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

Discussions similaires

  1. Aide pour code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/02/2008, 09h33
  2. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/01/2008, 16h15
  3. Code VBA excel form et modules
    Par Cptnikita dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/10/2007, 10h15
  4. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43
  5. [VBA-E] Compatibilité de Date dans VBA Excel
    Par dorschner dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/05/2006, 19h25

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