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 :

Importer fichier texte avec colonne en texte [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut Importer fichier texte avec colonne en texte
    coucou le phorum

    je développe une macro afin de mettre en forme un fichier pour utilisation dans un outil de publipostage (Print Shop Mail)
    j'ouvre un fichier, je fais mon traitement puis j'exporte le fichier au format texte afin de garder les éléments comme numéro de client, numéro de téléphone (avec le 0 devant), idem pour les codes postaux en texte
    or dès que je réimporte le fichier avec ce code
    tous mes éléments se transforme en nombre ce qui est problèmatique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
                :=xlDoubleQuote, Tab:=True, TrailingMinusNumbers:=True

    pour information voici le code complet :
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    Option Compare Text
    Sub TRAITEMENT_OXYGEN()
        Dim Col As Long
        Dim répTraitement As String
        Dim i As Long, J As Long, Ligne As Long, Colonne As Long
        Dim Cel As Range, C
        Dim tabColonne, Cols
        Dim arrSelection
        Dim P As Range
     
    'Récupération Nom Fichier Client
        FichierClient = ActiveWorkbook.Name
     
    'Correction Entête Colonnes
        Col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
        Range(Cells(1, 1), Cells(1, Col)).NumberFormat = "General"
     
    'Choix des colonnes à traiter
        On Error Resume Next
            Set P = Application.InputBox("Sélectionnez les colonnes à normaliser :", Type:=8)
            On Error GoTo 0
            Application.DisplayAlerts = True
            If P Is Nothing Then
                MsgBox "Sélection annulée"
                Exit Sub
            End If
     
        arrSelection = P.Address(False, False)
        tabColonne = Split(arrSelection, ",")
     
     'Traitement des colonnes
        For i = 0 To UBound(tabColonne)
            C = GetColumnRange(tabColonne(i))
            Cols = Split(C, ";")
            For J = 0 To UBound(Cols)
                Colonne = CLng(Cols(J))
                Ligne = Cells(Rows.Count, Colonne).End(xlUp).Row
                    For Each Cel In Range(Cells(2, Colonne), Cells(Ligne, Colonne))
                        Cel.Value = Application.WorksheetFunction.Trim(UCase(SupprimerAccents(Cel.Value)))
                        Cel.Value = Replace(Cel.Value, Chr(10), "")
                        Cel.Value = Replace(Cel.Value, Chr(9), "")
                        Cel.Value = Replace(Cel.Value, Chr(160), "")
                        With Application
                            Cel.Value = .Clean(Cel.Value)
                        End With
     
                    Next Cel
            Next
        Next
     
        TRAITEMENT_CODE_POSTAUX
     
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
    'Initialisation du nom de Fichier en Sortie
        répertoire = ActiveWorkbook.Path
        Fichier = Mid(ActiveWorkbook.Name, 1, InStrRev(ActiveWorkbook.Name, ".") - 1)
        nomuser = Environ("UserName")
        répTraitement = Mid(répertoire, 1, InStrRev(répertoire, "\") - 1) & "\"
        ExtractionNiv1 = InStr(1, répertoire, "MD")
        ExtractionNiv2 = Mid(répertoire, ExtractionNiv1, 6)
        nomfichier = "A_" & ExtractionNiv2 & "_" & Fichier & "_" & UCase(SupprimerAccents(Left(Environ("UserName"), 3)))
     
    'Création du répertoire si absent
        Dim fso As FileSystemObject
        Dim fsoMonDossier As Folder
        Dim stMonChemin As String
     
        stMonChemin = répTraitement
     
        Set fso = New FileSystemObject
     
            If Not fso.FolderExists(stMonChemin) Then
              Set fsoMonDossier = fso.CreateFolder(stMonChemin)
            End If
     
        ActiveSheet.Columns.EntireColumn.AutoFit
        ActiveSheet.Copy
            ActiveWorkbook.SaveAs Filename:=répTraitement & nomfichier & ".txt", FileFormat:=xlText, CreateBackup:=False
     
            Columns("A:A").Select
            For C = 1 To 2
                Selection.Insert Shift:=xlToRight
            Next
            Range("A1") = "DOSSIER"
            Range("B1") = "SEQUENCE"
            nomfichier = ActiveWorkbook.Name
            Ligne = Cells(Rows.Count, 3).End(xlUp).Row
     
            For i = 1 To Ligne 'séquentiel
                For R& = 2 To Ligne 'dossier
                        Cells(R, 1) = nomfichier
                            EX = Extrait(Cells(R, 1).Value, "MD", " ", "_", 1)
                            If IsArray(EX) Then Cells(R, 1).Resize(, UBound(EX) + 1).Value = EX
                        Cells(R, 1) = EX
                        Cells(R, 2).NumberFormat = "@"
                       Cells(R, 2).Value = Format(i, "00000")
                    i = i + 1
                Next R
            Next i
     
    Choix_Multi_Pose.Show
     
        ActiveSheet.Columns.EntireColumn.AutoFit
        Application.GoTo Range("A1"), True
     
    'Fermeture des fichiers
        ActiveWorkbook.Close SaveChanges:=True
        Workbooks(FichierClient).Close SaveChanges:=False
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
     
        Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
                :=xlDoubleQuote, Tab:=True, TrailingMinusNumbers:=True
     
        nomfichier = Mid(nomfichier, 1, InStrRev(nomfichier, ".") - 1)
     
        ActiveWorkbook.SaveAs Filename:=répTraitement & nomfichier & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWorkbook.Close SaveChanges:=True
     
    End Sub
    y a t'il une solution simple pour me permettre d'importer au format texte l'intégralité du fichier ?

    merci pour votre aide

    david

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    en utilisant l'enregistreur de macro
    j'ai ce 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
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        ChDir "C:\Users\toto\Desktop\usb\MD0555"
        Workbooks.OpenText Filename:= _
            "C:\Users\toto\Desktop\usb\MD0555\A_MD0555.txt" _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=False, Space:=False, Other:=False, 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), Array(11, 2), Array(12, 2), Array(13, 2), Array(14, 2), _
            Array(15, 2), Array(16, 2), Array(17, 2), Array(18, 2), Array(19, 2), Array(20, 2), Array( _
            21, 2), Array(22, 2), Array(23, 2), Array(24, 2), Array(25, 2), Array(26, 2), Array(27, 2), _
            Array(28, 2), Array(29, 2), Array(30, 2), Array(31, 2), Array(32, 2), Array(33, 2), Array( _
            34, 2), Array(35, 2), Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), Array(40, 2), _
            Array(41, 2), Array(42, 2), Array(43, 2), Array(44, 2), Array(45, 2), Array(46, 2), Array( _
            47, 2), Array(48, 2), Array(49, 2), Array(50, 2), Array(51, 2), Array(52, 2), Array(53, 2), _
            Array(54, 2), Array(55, 2), Array(56, 2), Array(57, 2), Array(58, 2), Array(59, 2), Array( _
            60, 2), Array(61, 2), Array(62, 2), Array(63, 2)), TrailingMinusNumbers:=True
    End Sub
    je sais que array correspond à la longueur et au type de données = 2 pour texte
    le but serait de lui dire que toutes les colonnes sont de type texte quelque soit le nombre de colonne

    une idée ou une voie à explorer ?

    david

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Regarde dans l'aide VBA de OpenText le paramètre FieldInfo pour passer les champs que tu veux protéger à xlTextFormat.
    https://msdn.microsoft.com/fr-fr/vba...t-method-excel
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci à toi
    j'ai donc modifié mon code comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, Tab:=True, fieldinfo:=xlTextFormat, local:=True
    mais il semble planté à l'instruction fieldinfo:=xltextformat

    une idée pour la syntaxe ?

    pourtant il me semble avoir bien respecté la syntaxe de l'instruction

    david

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par munity Voir le message
    mais il semble planté à l'instruction fieldinfo:=xltextformat
    une idée pour la syntaxe ?
    FieldInfo est une matrice (il faut indiquer la valeur de chaque colonne).
    Regarde le code proposé par l'enregistreur de macro.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    j'ai trouvé ceci sur un phorum pour avoir lors de l'importation un nombre de colonnes dynamique
    je part du principe de tout garder en texte
    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
     
    'Définition des colonnes et du type  
     dercol = Cells(1, Columns.Count).End(xlToLeft).Column
        Dim TabFieldInfo As Variant
            For x = 1 To dercol
                ReDim Preserve TabFieldInfo(x)
                TabFieldInfo(x) = Array(x, 2)
            Next x
     
    'importation du fichier
       Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, Tab:=True, fieldinfo:=TabFieldInfo, local:=True
    mais il me met incompatibilité de type ?

    je ne vois pas pourquoi

    david

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    bon je pense avoir trouvé
    je n'avais pas initialisé (apparemment) le Array (première colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dercol = Cells(1, Columns.Count).End(xlToLeft).Column
        Dim TabFieldInfo As Variant
        TabFieldInfo = Array(Array(1, 2))
            For x = 1 To dercol
                ReDim Preserve TabFieldInfo(x)
                TabFieldInfo(x) = Array(x, 2)
            Next x
    cela fonctionne
    par contre sur les colonnes dates, il m'inverse les jours et mois
    alors que je suis en local:=true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    'importation du fichier
       Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, Tab:=True, fieldinfo:=TabFieldInfo, local:=True

    une idée d'ou peut venir ce problème et surtout comment le régler ?

  8. #8
    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 677
    Points
    18 677
    Par défaut
    Bonjour,

    oui, du code !     Vérifier le fichier et tester sans Local

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci de ta réponse Marc
    le fichier en entrée est correct les dates sont dans le bon format comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATE D'APPEL
    27/02/2018 13:50
    27/02/2018 13:58
    après traitement du fichier via la macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATE D'APPEL
    3/1/2018 16:46
    3/1/2018 13:43
    j'ai bien enlevé locar:=true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, Tab:=True, fieldinfo:=TabFieldInfo ', local:=True

  10. #10
    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 677
    Points
    18 677
    Par défaut

    Je vois pas comment le 27 février pourrait devenir le 3 janvier, sans compter les heures !

    Activer l'Enregistreur de macros, ouvrir le fichier et bien répondre à l'Assistant d'importation
    en paramétrant correctement chaque colonne …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Il ne faut pas se fier au valeur
    mais plus au format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATE D'APPEL
    27/02/2018 13:50
    27/02/2018 13:58
    versus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATE D'APPEL
    2/27/2018 13:50
    2/27/2018 13:58
    voici le code avec enregistreur de macro
    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
     
        ChDir "C:\Users\toto\Desktop\MD0555"
        Workbooks.OpenText Filename:= _
            "C:\Users\toto\Desktop\MD0555\A_MD0555.txt" _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=False, Space:=False, Other:=False, 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), Array(11, 2), Array(12, 2), Array(13, 2), Array(14, 2), _
            Array(15, 2), Array(16, 2), Array(17, 2), Array(18, 2), Array(19, 2), Array(20, 2), Array( _
            21, 2), Array(22, 2), Array(23, 2), Array(24, 2), Array(25, 2), Array(26, 2), Array(27, 2), _
            Array(28, 2), Array(29, 2), Array(30, 2), Array(31, 2), Array(32, 2), Array(33, 2), Array( _
            34, 2), Array(35, 2), Array(36, 2), Array(37, 2), Array(38, 2), Array(39, 2), Array(40, 2), _
            Array(41, 2), Array(42, 2), Array(43, 2), Array(44, 2), Array(45, 2), Array(46, 2), Array( _
            47, 2), Array(48, 2), Array(49, 2), Array(50, 2), Array(51, 2), Array(52, 2), Array(53, 2), _
            Array(54, 2), Array(55, 2), Array(56, 2), Array(57, 2), Array(58, 2), Array(59, 2), Array( _
            60, 2), Array(61, 2), Array(62, 2), Array(63, 2)), TrailingMinusNumbers:=True
    dans le code ci dessus, toutes les colonnes sont bien en texte et les dates restent bien au bon format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DATE D'APPEL
    27/02/2018 13:50
    27/02/2018 13:58
    voici mon code d'importation qui me pose problème pour les dates
    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
     
    'Définition dynamique du type et nombre de colonnes pour l'importation
        dercol = Cells(1, Columns.Count).End(xlToLeft).Column
        Dim TabFieldInfo As Variant
        TabFieldInfo = Array(Array(1, 2))
            For x = 1 To dercol
                ReDim Preserve TabFieldInfo(x)
                TabFieldInfo(x) = Array(x, 2)
            Next x
     
    'Fermeture des fichiers
        ActiveWorkbook.Close SaveChanges:=True
        Workbooks(FichierClient).Close SaveChanges:=False
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
     
       Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, Tab:=True, fieldinfo:=TabFieldInfo
    ai je oublier une instruction ?

    david

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par munity Voir le message
    Il ne faut pas se fier au valeur
    On ne peut se fier qu'à ce que tu montres.
    Si tu montres des données incohérentes, tu ne peux pas espérer de réponse utilisable.

    dans le code ci dessus, toutes les colonnes sont bien en texte et les dates restent bien au bon format
    Dans ce cas, soit pragmatique et utilise ce code.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    ben justement le problème c'est que le nombre de colonnes est variable donc il me faut une macro dynamique sur le nombre de colonnes à importer
    et comme elles sont toutes en texte
    pas besoin de réflechir logiquement
    je ne vois pas pourquoi le format de date passe d'un modèle à l'autre

  14. #14
    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 677
    Points
    18 677
    Par défaut
    Citation Envoyé par munity Voir le message
    ai je oublier une instruction ?
    Si la date est automatiquement interprétée par Excel malgré un format texte alors lui indiquer le bon format de date …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    ok donc pas de solution pour moi
    car la colonne date n'est pas toujours au même endroit ...

  16. #16
    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 677
    Points
    18 677
    Par défaut

    Je n'ai jamais eu de souci avec TextToColumns , OpenText ou QueryTable et ce, quel que soit le format …
    Jamais un pauvre fichier texte n'a pu me résister !

    Tester sur un nouveau classeur …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut


    je fais le test sur x classeur depuis ce matin (avec une colonne date) et toujours le meme souci
    mais bon je n'exploite pas la date dans ce cas
    mais cela pourrait arriver...
    tant pis je vais faire l'impasse pour ce cas

    merci tout de même pour vos réponses

    david

  18. #18
    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 677
    Points
    18 677
    Par défaut




    Joindre deux fichiers sources avec une date à une colonne différente et ton code le plus propre …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    voila le code simplifié de l'importation

    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
     
    Sub TRAITEMENT()
     
    répTraitement = "a adapter"
    nomfichier = "test1.txt" et nomfichier = "test1.txt"
     
     
     
        Dim TabFieldInfo As Variant
        TabFieldInfo = Array(Array(1, 2))
            For x = 1 To 10
                ReDim Preserve TabFieldInfo(x)
                TabFieldInfo(x) = Array(x, 2)
            Next x
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
     
        Workbooks.OpenText Filename:=répTraitement & nomfichier, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=False, Space:=False, Other:=False, FieldInfo:=TabFieldInfo, TrailingMinusNumbers:=True
     
    End Sub
    Fichiers attachés Fichiers attachés

  20. #20
    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 677
    Points
    18 677
    Par défaut

    Les colonnes ont bien été inversées dans le fichier n°2 mais pas leurs titres …
    Mais de toute manière ce n'est pas gênant car en vérifiant un fichier source (pourtant déjà demandé dans le post #8 …)
    via le Bloc-notes les dates sont au format anglo-saxon !
    Donc comme Excel aussi en interne alors Local:=True est caduque
    et déjà sans spécifier aucun format de colonnes à l'importation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Demo0()
           V = Application.GetOpenFilename("Fichiers texte (*.txt), *.txt")
        If V = False Then Exit Sub
        Workbooks.OpenText V, xlWindows, 1, xlDelimited, xlTextQualifierNone, False, True
    End Sub

    Et il y a plus simple juste en lisant l'aide VBA de la méthode Open :   Workbooks.Open V, Format:=1   …

    Ces fichiers ne posent donc aucun problème …

    Dans le cas de tout importer au format texte, comme les colonnes des dates ont des positions variables,
    on intervient à postériori juste via le titre des colonnes et en appliquant un format date :

    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
    Sub Demo1()
           Dim V, C&, T(1 To 14), Rg As Range
               V = Application.GetOpenFilename("Fichiers texte (*.txt), *.txt")
            If V = False Then Exit Sub
           For C = 1 To UBound(T):  T(C) = Array(C, 2):  Next
           Workbooks.OpenText V, xlWindows, 1, xlDelimited, xlTextQualifierNone, False, True, FieldInfo:=T
        With ActiveWorkbook.ActiveSheet.UsedRange
               Set Rg = .Rows(1).Find("DATE *", , xlValues, xlWhole)
            If Not Rg Is Nothing Then
                    C = Rg.Column
                Do
                    With .Columns(Rg.Column)
                         .NumberFormat = "m/d/yyyy h:mm"
                         .Formula = .Value
                         .AutoFit
                    End With
                       Set Rg = .Rows(1).FindNext(Rg)
                Loop Until Rg.Column = C
                       Set Rg = Nothing
            End If
        End With
    End Sub
    Si par contre les colonnes à conserver impérativement au format texte sont toujours à la même place
    alors il suffit juste à l'import de renseigner uniquement ces colonnes dans FieldInfo

    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. problem d'allimentation des fichier avec colonnes long text
    Par berkan94 dans le forum ODI (ex-Sunopsis)
    Réponses: 0
    Dernier message: 04/09/2013, 23h35
  2. Réponses: 6
    Dernier message: 09/08/2013, 15h32
  3. Lire un fichier texte avec colonnes de longueur variable
    Par Jack_nicholson dans le forum SAS Base
    Réponses: 5
    Dernier message: 07/03/2011, 15h03
  4. Lecture de fichier text avec colonne vide
    Par Ballim dans le forum MATLAB
    Réponses: 5
    Dernier message: 12/11/2008, 16h12
  5. Supprimer doublons avec colonne type text
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/01/2008, 16h16

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