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 :

Import TXT dates mal reconnues


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut Import TXT dates mal reconnues
    Bonjour
    j'importe un fichier txt dont certaines colonnes comportent des dates au format xx/xx/xxxx. (sous excel 2010)
    Le problème c'est que certaines cellules sont bien interprétés d'autres sont considérées comme du texte.
    dans ma macro d'import, même si je change le format de la colonne ça ne change rien
    pour que la valeur soit validée il me faut faire un double clic sur la cellule puis valider pour qu'excel prenne la valeur en date.

    je ne vois qu'une solution
    compter le nombre de ligne X
    et faire exécuter à excel une multiplication par 1
    de la ligne 2 à la ligne x
    pour chaque cellule NON vide
    valeur = valeur *1


    quelqu'un peut-il me donner le code svp ?

    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Bonjour,

    Il faudrait voir comment tu importes ces fichiers.
    En utilisant le DataObject d'Excel, ça pourrait régler le problème.

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut
    J'ai parcouru le WEB et il semble que ce problème soit récurant , mais je ne trouve pas de solution
    d'où ma question

    J'ouvre le fichier comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Workbooks.OpenText Filename:="C:\test\test.txt", _
            Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
            Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
            Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
            , 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
            Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array( _
            28, 1), Array(29, 1), Array(30, 1)), TrailingMinusNumbers:=True

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Regarde le lien ICI

    J'y ai mis un exemple d'utilisation du DataObject.
    Ça prend une référence à Microsoft Forms 2.0

    Comme le fichier passe par le "clipboard" d'Excel, celui-ci réussit souvent à régler les formats par lui-même...

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut dataobject
    Merci Parmi
    mais je ne connais pas la méthode et je ne me sens pas de l'appliquer, car ça voudrait dire tout récrire
    en effet ma macro d'import fait toute une série d'opérations à la suite de l'import

    même si ce n'est pas très "propre" mon idée est de multiplier par un chaque cellule contenant une valeur
    excel l'affiche instantanément en date

    d'où ma demande il me faudrait un truc de ce genre:

    de la ligne 2 à x
    pour chaque cellule NON vide
    cells.value = cells.value *1

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Le but de mon exemple était d'éviter les manipulations de cellules, mais bon, si tu préfères...
    Après l'ouverture du fichier texte, quelque chose comme ceci devrait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim I as long, nbLignes as Long
    With Sheets("TaFeuille")
       nbLignes = .Cells(.Rows.Count, "A").End(xlUp).Row
       For i = 2 to nbLignes
          .Cells(I, TaColonne) = .Cells(I, TaColonne) * 1 'Ajouter d'autres colonnes au besoin sous cette ligne
       Next 
    End With

  7. #7
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut methode cell incompatible
    J'avais essayé cells() *1 :
    Excel renvoie : incompatibilité de type a cause du *1.
    en prime dans ce cas là, ça s'appliquerai à toutes les cellules y compris les vides

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim I as long, nbLignes as Long
    With Sheets("TaFeuille")
       nbLignes = .Cells(.Rows.Count, "A").End(xlUp).Row
       For i = 2 to nbLignes
          If .Cells(I, TaColonne) <> "" and IsNumeric(.Cells(I, TaColonne)) Then _
          .Cells(I, TaColonne) = .Cells(I, TaColonne) * 1 'Ajouter d'autres colonnes au besoin sous cette ligne
       Next 
    End With

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Citation Envoyé par roadrunner34 Voir le message
    J'ai parcouru le WEB et il semble que ce problème soit récurant
    Oui c'est un problème récurrent situé entre la chaise et le clavier, Excel n'y étant pour rien, juste un mauvais code …
    Pourtant en activant le Générateur de macros et en répondant correctement à l'Assistant d'importation,
    le code est livré sur un plateau !

    En joignant un fichier texte source à importer, on pourrait plus facilement corriger ce code d'importation.

    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  10. #10
    Expert confirmé
    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

  11. #11
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut ùauvaise idée
    Merci parmi
    ta réponse est bonne.
    mais ça ne fonctionne pas

    si dans la feuille on ouvre la cellule et on valide elle passe au bon format (ou si on multiplie par un)
    autant en macro, ça ne passe pas. il considère la valeur comme tu texte, d'où type incompatible
    je ne vois pas comment m'en sortir !
    surtout que c'est 5 % des cellules qui ont se souci . mystère

  12. #12
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Non, rien de mystérieux ni de compliqué, juste un mauvais code d'importation par méconnaissance d'Excel et du VBA !

    Lire les posts #9 & #10 …

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub Test()
    Dim oFSO As Object
    Dim T()
    Dim F
    Dim Txt As String
    Dim I As Long
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Fichier = "C:\RepTest\test.txt"
    If oFSO.GetFile(Fichier).Size = 0 Then Exit Sub
    Txt = oFSO.OpenTextFile(Fichier, 1).ReadAll
    Set oFSO = Nothing
    Txt = Replace(Txt, Chr(13), "")
    F = Split(Txt, Chr(10))
    ReDim T(UBound(F), 10)
    For I = 0 To UBound(F)
        T(I, 0) = Mid(F(I), 1, 4)
        T(I, 1) = Mid(F(I), 5, 4)
        T(I, 2) = Mid(F(I), 9, 4)
        T(I, 3) = Mid(F(I), 13, 4)
        T(I, 4) = Mid(F(I), 17, 4)
        T(I, 5) = Mid(F(I), 21, 4)
        T(I, 6) = Mid(F(I), 25, 4)
        T(I, 7) = Mid(F(I), 29, 4)
        T(I, 8) = Mid(F(I), 33, 4)
        T(I, 9) = Mid(F(I), 37, 4)
        T(I, 10) = Format(Replace(Mid(F(I), 41, 10), """", ""), "yyyy-mm-dd")
    Next
    ActiveSheet.Range(Range("A1"), Range("A1").Offset(UBound(F), 10)) = T
    End Sub

  14. #14
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut
    merci pour votre aide
    grâce au lien de kiki j'ai trouvé une solution qui fonctionne
    mais qui est très longue car ça prend en compte TOUTE la colonne et pas seulement mes 4000 lignes
    mais au moins ça fonctionne
    la voici tel que dans le tuto très bien fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub AppliTuto() 
    With Columns("D:D")
       .Insert Shift:=xlToRight
       '.select '' ne pas mettre dans le code surtout,
       ''à activer pour compréhension de la suite si besoin...
       ''le with column("D:D") pointe vers la colonne E apparente suite à l'insertion,
       ''mais qui représente toujours l'objet d'origine à savoir la colonne pointée via l'instruction With...
       .Offset(0, -1).FormulaR1C1 = "=IF(RC[1]<>"""",RC[1]*24/24,"""")"
       .Offset(0, -1).NumberFormat = "m/d/yyyy"
       .Offset(0, -1).Copy
       .Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
       .Delete
    End With
    End Sub

    je vais regarder les autres méthodes néanmoins car celle ci est lourde

  15. #15
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2014
    Messages : 18
    Par défaut plus simple
    Bonjour à tous
    Voici la solution la plus simple qui m'a été donné :
    après le code d'import créé par Excel, il suffisait d'ajouter ",Local:= True après TrailingMinusNumbers:=True."
    les dates sont alors bien reconnues !!

  16. #16
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Oui aussi … Mais en utilisant FieldInfo comme dans le post #3 il n'était pas compliqué d'indiquer le bon format de date !
    Rien qu'en répondant bien à l'assistant de cette méthode …

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

Discussions similaires

  1. Import Excel format date nom reconnu
    Par slachromana dans le forum SAS Base
    Réponses: 2
    Dernier message: 11/07/2013, 09h56
  2. variable mal reconnue
    Par Félix62 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/05/2007, 19h59
  3. [3e cycle] Importance d'un diplome reconnu par cti ?
    Par zerovolt dans le forum Etudes
    Réponses: 2
    Dernier message: 13/03/2005, 14h18
  4. Import de date vers MSDE avec BCP
    Par slc dans le forum Outils
    Réponses: 4
    Dernier message: 16/08/2004, 12h28
  5. Le kernel version 2.6.3-mdk mal reconnu
    Par christophe D dans le forum Administration système
    Réponses: 5
    Dernier message: 23/03/2004, 10h03

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