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 :

Problème de format lors de l'enregistrement d'un fichier texte


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 R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut Problème de format lors de l'enregistrement d'un fichier texte
    Bonjour à tous,

    Mon projet consiste à récupérer les données enregistré sur un fichier texte sous excel pour pouvoir les mettre sous graphes.
    La donnée qui me pose problème est la date.
    Je m'explique :

    Si sur le fichier texte tout les jours sont inférieur ou égal à 12
    -dans la feuille 'Import de données radar', le jour et le mois sont inversé
    -les graphes ne prennent pas en compte l'heure

    Si sur au moins une ligne du fichier texte le jour est supérieur à 12
    -il y a toujours inversion pour les autres données
    -les graphes prennent en compte les heures

    Si sur toutes les lignes du fichier texte le jour est supérieur à 12
    -tout fonctionne correctement

    Je viens de voir ce problème car je viens d'avoir des données avec le jour inférieur à 12.

    Je pense qu'il y a un problème de format lors de l'extraction des données sous excel.
    Voici le code
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Sub Transfer_Enregistrements_vers_Excel()
     
    '**Procedure écrite le 15 Novembre 2011 pour le compte de ATELEC ELECTRONIQUE
     
    Dim TheTemporaryArray 'défini un tableau unidmensionel pour la capture des lignes du fichier texte
    Dim TheFinalArray() As Variant 'défini un tableau bidmensionel pour l'enregistrement informatique du fichier texte
    Dim FileName As Variant 'defini une variable qui contiendra le nom du fichier texte a ouvrir
    Dim strRec As String 'defini une variable qui contiendra une ligne du fichier texte
    Dim j As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim i As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim m As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim k As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim xx As Long 'Defini une variable qui contiendra la limite haute du tableau bidimensionel
    Dim Legraph As ChartObject
    Dim DerLig As Long
    Dim PlageVmoy As Range
    Dim PlageVmin As Range
    Dim PlageVmax As Range
    Dim PlageNbVehicule As Range
    Dim PlageVminVmax As Range
    Dim VarVmoy As Variant
    Dim VarVmin As Variant
    Dim VarVmax As Variant
    Dim VarNbVehicule As Variant
    Dim VarVminVmax As Variant
    Dim NomRue As String
     
     
    FileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Select Text Data File") 'Ouvre une fentre de selection de fichier qui permet a l'utilisateur de selectionner le fichier a importer. exclusivement des fichiers texte
     
    If FileName = False Then 'Si l'utilisateur n'a pas sélectionner de fichier
     
        Exit Sub 'alors fin de la procedure
     
    ElseIf FileName <> False Then 'Si l'utilisateur à sélectionner un fichier
     
        Open FileName For Input As #1 'Ouvre le fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, Chr(59)) 'Enregistre chaque element de la ligne séparé par un ";" dans un tableau unidimensionel appellé TheTemporaryArray
        ReDim TheFinalArray(UBound(TheTemporaryArray), LBound(TheTemporaryArray)) 'Précise la dimension du tableau.
        xx = UBound(TheFinalArray) 'enregistre dans une variable la limite haute du tableau - normalement le nombre de "colonnes" du fichier texte  moins 1 car le tableau commence a zero et non pas 1
        Close #1 'ferme le fichier texte. Cela est necessaire pour une future redimension du tableau TheFinalArray
     
        i = 1 'donne la valeur 1 a une variable qui servira dans la definition d'un tableau bidimensionel
     
        Open FileName For Input As #1 'Réouvre le fichier texte
     
        '****** l'étape suivante va etre repetée pour chaque ligne du fichier grace à la commande "Do While...Loop"  *****
     
        Do While Not EOF(1) 'Faire quelque chose jusqu'à temps que l'on arrive à la fin du fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, ";") 'Enregistre chaque element de la ligne séparé par un ";" dans un tableau unidimensionel appellé TheTemporaryArray
     
        For j = LBound(TheTemporaryArray) To UBound(TheTemporaryArray) 'Pour chaque élément du tableau unidimensionel
     
            TheFinalArray(j, i - 1) = TheTemporaryArray(j) 'l'élément du tableau unidimensionel est entré dans un tableau bidimensionel
     
        Next j 'tourne jusqu'à temps qu'il n'y ai plus d'elements dans le tableau unidimensionel
     
        ReDim Preserve TheFinalArray(xx, i) 'Redimensionne le tableau bidimensionel en y ajoutant une "ligne"
        i = i + 1 'augmemte la variable comptable qui aide a la redimension du tableau bidimensionel
     
        Loop 'repete les etapes precedente pour chaque "ligne" du ficher texte
     
        Close #1 'Ferme le fichier texte
     
        '**** L'etape suivante transfer les données dans EXCEL ****
        'Jusqu'ici toutes les données ont été transferées dans un tableau multidimensionel et non pas diretement dans Excel
        'Cela permet au developeur ATELEC de transferer les données ailleur que dans Excel si besoin est.
     
        Sheets("Import de données radar").Activate 'sélectionne l'onglet où les données seront transcrites
        Cells.Select 'selectionne toutes les cellule de l'onglet
        Selection.ClearContents 'efface le contenu des cellules seletionnées
        Cells(1, 1).Select 'retire la selection de toutes les cellules
     
        For k = 0 To xx 'Pour chaque "colonne" du tableau bidimensionel faire....
     
            For m = 0 To (i - 1) 'Pour chaque "ligne" du tableau bidimentionel faire...
     
                Cells(m + 1, k + 1) = TheFinalArray(k, m) 'un transfer de l'element du tableau bidimensionel vers Excel
     
            Next m 'repeter pour chaque "ligne" du tableau bidimensionel
     
        Next k 'repeter pour chaque "colonne" du tableau bidimensionel
     
        Sheets("Menu").Activate 'reselectionne l'onglet avec le bouton
     
     
    End If 'ferme la condition d'execution de la procedure liée à la trouvaille du nom de fichier
    Je ne vois pas comment rectifier cette erreur.

    Je met le classeur et le fichier texte en pièce jointe.
    Cliquez sur le bouton Import des données radar puis sélectionnez le fichier texte. Modifiez le fichiez texte pour voir directement le problème

    Merci d'avance
    Exploitation des données radar_05-12-2011_11-00.xls
    MESURE.TXT

  2. #2
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    J'ai rajouté un code proposé par illight
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    On Error GoTo gestionerreur
    Dim j As String
    Dim m As String
    Dim a As String
    Dim heure As String
    Dim min As String
    Dim sec As String
    Dim i As Integer
    Dim k As Integer
    Dim MaDate As Date
    Dim MonHeure As Date
    Dim MonHeureT As String
    Set f = Worksheets(1)
    k = 2
    While Cells(k, 1).Value <> ""
        k = k + 1
    Wend
    For i = 2 To k - 1
        If Cells(i, 1).Value = "" Then
            Cells(i, 1).Value = ""
        ElseIf Cells(i, 1).NumberFormat = "General" Then
            j = Left(Cells(i, 1).Value, 2)
            m = Mid(Cells(i, 1).Value, 4, 2)
            a = Mid(Cells(i, 1).Value, 7, 4)
            MaDate = DateSerial(a, m, j)
            MonHeureT = Right(Cells(i, 1).Value, 8)
            heure = Left(MonHeureT, 2)
            min = Mid(MonHeureT, 4, 2)
            sec = Right(MonHeureT, 2)
            MonHeure = TimeSerial(heure, min, sec)
            Cells(i, 1).Value = CDate(MaDate & " " & MonHeure)
        Else
            m = Left(Cells(i, 1).Value, 2)
            j = Mid(Cells(i, 1).Value, 4, 2)
            a = Mid(Cells(i, 1).Value, 7, 4)
            MaDate = DateSerial(a, m, j)
            MonHeureT = Right(Cells(i, 1).Value, 8)
            heure = Left(MonHeureT, 2)
            min = Mid(MonHeureT, 4, 2)
            sec = Right(MonHeureT, 2)
            MonHeure = TimeSerial(heure, min, sec)
            Cells(i, 1).Value = CDate(MaDate & " " & MonHeure)
        End If
        Cells(i, 1).NumberFormat = "dd/mm/yyyy hh:mm"
    Next i
    Exit Sub
    gestionerreur:
    If Err.Number = 13 Then
        Resume Next
    End If
    Cela règle bien le problème d'inversion cependant dans mon tableau de donnée, j'ai une différence entre les jours inférieur et supérieur à 12
    Pour les inférieur à 12 j'ai : dd/mm/yyyy hh:mm:ss
    Pour les supérieur à 12 j'ai : dd/mm/yy hh:mm

    Je ne comprend pas pourquoi je n'ai pas le même format

    Merci d'avance

  3. #3
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Bonjour

    Je ne comprend toujours pas...
    J'ai changé les données date/heure du fichier texte que j'importe, lorsque je met au format français excel enregistre au format anglais pour les jour inférieur à 12, lorsque que je met au format anglais excel enregistre au format français.

    Je crois qu'excel se moque de moi...

    Le souci est que dans le cas où excel enregistre au format français, les graphiques ne prennent plus en compte les heures, ce qui fausse tout.
    J'ai aussi essayé de noter les abréviations des mois, dec pour 11, pour pas qu'il n'y est d’ambiguïté pour excel, et j'obtiens le même problème pour mes graphiques avec en plus une inversion des jours et mois dans les graphiques.

    Cependant si j'ai sur mon fichier texte les dates notées avec les abréviations des mois, sauf une avec le nombre, je n'ai plus d'inversion jour/mois, les graphiques sont bons, sauf que dans mon tableau le format n'est pas le même. Mais cette solution n'est pas envisageable au niveau de l'enregistrement de mon fichier texte.

    Si quelqu'un peut m'aider à me sortir de ce souci de format.
    Merci d'avance

  4. #4
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    N'aillant pas trouvé de solution sous excel, j'ai rajouté un espace devant la date sur mon fichier texte, ce qui fait que excel ne reconnait plus cette donnée comme une date et ne change pas n'importe comment le format.

    Je laisse le post non résolu si toute fois quelqu'un trouve une solution sous vba, car pour mon cas j'ai pu "bidouiller" en modifiant mon fichier d'entrée mais cela n'est pas toujours possible.

Discussions similaires

  1. Problème d'accent lors de la lecture d'un fichier texte
    Par petit rabot dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 23/11/2017, 09h57
  2. [WD-2007] Problème d'encodage lors d'un enregistrement sur clé USB
    Par MadGics dans le forum Word
    Réponses: 2
    Dernier message: 04/05/2015, 11h51
  3. [XL-2003] Problème de date lors de l'enregistrement d'un document
    Par ortiz dans le forum Conception
    Réponses: 1
    Dernier message: 19/03/2014, 02h08
  4. [VB6]Problème lors de la création d'un fichier texte
    Par Kronoob dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/06/2006, 21h27
  5. Problème avec OpenEx lors d'un enregistrement
    Par jessy82 dans le forum MFC
    Réponses: 1
    Dernier message: 05/04/2005, 20h44

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