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 :

Mise en forme d'un fichier Csv contenant des informations Hexa


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Mise en forme d'un fichier Csv contenant des informations Hexa
    Bonjour à la communauté,

    Pour le développement d'une application, j'ai réalisé des macros excels afin de mettre en forme un fichier .csv contenant que des informations Hexadecimales.

    Lorsque j'importe le fichier .csv grâce à un bouton sur mon fichier de mise en forme, il me transforme une partie des trames (Par exemple : 6E69 -> 6,00E+69 ou 5E01 -> 5,00E+01 ...)
    Y a-t-illa possibilité de définir le type de données à lire dans le fichier csv (ici HEXA) ?

    Macro d'ouverture du fichier CSV :
    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
     
    ' Ouverture du fichier d'enregistrement format CSV
        On Error GoTo Err_Ouverture
        Workbooks.OpenText FileName:=Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv", , "OUVRIR UN FICHIER D'ENREGISTREMENT"), Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, _
            Comma:=True, Space:=False, Other:=True, OtherChar:="=", FieldInfo:= _
            Array(Array(1, 1), Array(2, 1), Array(3, 1))
     
    ' Mémorisation du nom du fichier d'enregistrement format CSV ouvert
        NomFichierEnreg = ActiveWorkbook.Name
     
    ' Conversion des données format EXCEL et texte
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, OtherChar _
        :="=", FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, _
        2), Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2))
     
    ' Copie des données dans le fichier de mise en forme
        Cells.Select
        Selection.Copy
        NomFichierMiseEnForme = ThisWorkbook.Name
        Windows(NomFichierMiseEnForme).Activate
        Sheets("Enregistrement").Select
        Cells.Select
        ActiveSheet.Paste
     
    ' Fermeture du fichier d'enregistrement format CSV
        Windows(NomFichierEnreg).Activate
        Application.DisplayAlerts = False 'Désactive la boîte de dialogue de confirmation.
        ActiveWindow.Close
        Application.DisplayAlerts = True  'retour à la normale
     
    ' Efface la feuille de mise en forme enregistrement
        If FeuilleExiste("Mise en forme enregistrement") Then
            Application.DisplayAlerts = False 'Désactive la boîte de dialogue de confirmation.
            Sheets("Mise en forme enregistrement").Delete
            Application.DisplayAlerts = True 'retour à la normale
        End If
    Je vous est mis en pièce jointe un exemple de fichier .csv que je dois mettre en forme. Il est necessaire de l'ouvrir avec le bloc note afin de ne pas rencontrer le problème mentionner ci-dessus.

    Je vous remercie de votre aide.

    Respectueusement Alexandre
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    tout simplement l'ouverture du fichier via OpenText est est mal programmée !
    La colonne en question doit être importée au format texte, voir l'aide VBA intégrée concernant son argument FieldInfo

    Possibilité aussi d'utiliser l'Enregisteur de macros en ouvrant le fichier et en répondant bien aux différentes étapes
    de l'Assistant Conversion, notamment en ce qui concerne le format des colonnes …

    Et puis parfois l'astuce ultime est de juste paramétrer avant l'importation la colonne recevant les données hexa au format texte …

    Comme parfois selon la configuration d'Excel ou sa version cela ne fonctionne pas toujours,
    il reste l'astuce d'ouvrir le fichier sans le convertir puis d'utiliser l'Assistant Conversion (Convertir dans Données) …

    Exemple remanié à partir de l'Enregistreur de macros pour une version française d'Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 20/09/2013 
    '
        Workbooks.Open "D:\TestsPourNoob\20092013.CSV", Origin:=xlWindows, Local:=True
        [L1].Select
     
        [A1].CurrentRegion.TextToColumns [A1], xlDelimited, xlNone, Comma:=True, _
            FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), _
            Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2))
    End Sub
    A noter : si FieldInfo est paramétré comme dans le code présenté par lexxor (OpenText), cela ne fonctionnerait pas non plus !

    Reste encore la méthode s'affranchissant de la conversion interne d'Excel en ouvrant le fichier dans une variable tableau en mémoire
    évitant ainsi un classeur intermédiaire afin d'en alimenter un autre …

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    __________________________________________________________________________________________
    Quand un homme dit des obscénités à une femme, c'est un pervers. Quand une femme dit des obscénités à un homme, c'est 3€95 la minute …

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Toujours pas de resultats positifs
    Re bonjour,

    Tout d'abord merci de ton aide.

    J'ai essayé les différentes solutions que tu as proposées mais rien y fait : je récupère toujours ces p.t.ns d'exposants et donc ma mise en forme n'est pas correcte.

    J'ai aussi essayé de renommé mes fichiers .csv en fichiers .txt mais toujours le même problème.

    Sinon en copiant les données du fichier texte manuellement dans les colonnes ou devrait être copié automatiquement les données, là pas de problème, pas de mise en exposants.
    Juste mis les colonnes au format texte au préalable.
    Lorsque je réalise la même procédure en automatique via le bouton de chargement du fichier, les données sont bien copiées dans les cellules au format texte mais le format ne reste pas il reprend le format initial et donc je retrouve les exposants.

    Si tu a encore des idées je suis prenneur.

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour, fais le à l'ancienne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NumFichier  =FreeFile
    Open "c:\MyRepp\My.csv" For Input As #NumFichier    ' Ouvre le fichier.
    Do While Not EOF(NumFichier)    ' Effectue la boucle jusqu'à la fin du fichier.
        Line Input #NumFichier, TextLine        ' Lit la ligne dans la variable.
       'Traitement  
    Loop
    Close #NumFichier

  5. #5
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    lexxor, de mon côté le code Macro1 fonctionne sans souci avec ton fichier en version d'Excel 2003 & 2007,
    peut-être est-ce spécifique à ta version 2000 …

    Exemple de l'import direct en mémoire, éprouvée maintes fois, à tester d'abord dans un classeur vierge :
    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
    Sub ImportTexte(Source$, Sep$, Optional Rg As Range, Optional FinLigne$ = vbNewLine)
        If Dir(Source) = "" Then Beep: Exit Sub
        F% = FreeFile
        Open Source For Input As #F
        TL = Split(Input(LOF(F), #F), FinLigne)
        Close #F
        If InStr(TL(0), Sep) = 0 Then Beep: Exit Sub
        NL& = UBound(TL)
        ReDim AR$(NL, 1)
     
        For L& = 0 To NL
            TC = Split(TL(L), Sep)
            NC = UBound(TC):  If NC > UBound(AR, 2) Then ReDim Preserve AR(NL, NC)
            For C& = 0 To NC:  AR(L, C) = TC(C):  Next C
        Next L
     
        If Rg Is Nothing Then Set Rg = ActiveSheet.[A1]
         If Rg.Count = 1 Then Set Rg = Rg.Resize(NL + 1, UBound(AR, 2) + 1)
        Rg.Value = AR
        Erase AR, TC, TL
        Set Rg = Nothing
    End Sub
     
     
    Sub DemoImportTexte()
        ImportTexte "D:\TestsPourNoob\20092013.CSV", ","
    End Sub
    Les arguments de la procédure ImportTexte sont dans l'ordre le fichier texte source, le séparateur - les deux obligatoires -
    puis en option la plage de destination et la terminaison de la fin d'une ligne de texte.

    Si la plage de destination n'est pas mentionnée, ce sera la cellule A1 de la feuille active …
    Si la plage de destination ne comporte qu'une seule cellule, donc comme coin supérieur gauche,
    cette plage est automatiquement recalibrée sur la taille de la variable tableau AR …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Une lesbienne qui n'a pas de seins, c'est une omoplate ?

Discussions similaires

  1. Lecture fichier CSV contenant des caractères accentués
    Par enicnath dans le forum Général Python
    Réponses: 25
    Dernier message: 24/03/2015, 12h10
  2. [VBA] Mise en forme d'un fichier Excel depuis Access
    Par morgiane dans le forum Access
    Réponses: 2
    Dernier message: 25/07/2007, 10h32
  3. mise en forme d'un fichier.cmd
    Par poussin_44 dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/07/2007, 17h23
  4. Réponses: 3
    Dernier message: 11/06/2007, 11h20
  5. Cosmétique - mise en forme d'un fichier
    Par habasque dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2006, 18h15

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