Ouverture d'un fichier txt en VBA dans Excel

Bonjour,

Je cherche à ouvrir un fichier txt dans excel avec une routine VBA

le contenu du fichier est du type :

hhfusfe|000002|iiiefji|00085| etc

et d'autre lignes du même type

j'ai utilisé la commande workbooks.opentxt mais je rencontre un problème. les chaines 000002 par exemple sont transformées en nombre donc j'ai la valeur '2' dans ma cellule et non pas 000002 (texte).

J'ai essayé mille trucs sans succès.

Si quelqu'un a une idée de génie je suis preneur

Bonne journée à tous

Quand on importe manuellement via l'onglet données, fichier texte, dans l'étape 3 on peut choisir le format des données en colonne ; il est sur standard par défaut mais on peut le mettre en texte.

Seule la 1ère colonne est sélectionnée par défaut donc le + rapide est de toutes les sélectionner ensemble (CTRL+MAJ puis clic sur dernière) puis de choisir le format texte.

Et là les 000 restent.

Reste à voir comment appliquer ça au VBA, je ne suis pas spécialiste.

Bonsoir dazibao11 ,

Sans conviction, un essai dans le fichier .xlsm joint. Cliquer sur bouton Hop!

Ne pas oublier de définir la constante "Const CheminNomFichier "pour indiquer le chemin et le nom du fichier .txt.

En fichiers joints, le classeur avec la macro et un fichier .txt à sauvegarder sur votre disque.

le code est dans module1 :

Sub ImporterTXT()
Const CheminNomFichier = "C:\toto\dazibao11-test-txt-v1.txt"
Dim t, i&, j&, s, r, max&
   Application.ScreenUpdating = False
   With ThisWorkbook.ActiveSheet
      .Range("a1").CurrentRegion.Clear
      Workbooks.OpenText Filename:=CheminNomFichier, DataType:=xlFixedWidth
      DoEvents
      Columns(1).Copy .Columns(1)
      ActiveWorkbook.Close SaveChanges:=False
      t = .Columns(1).Resize(.Cells(Rows.Count, "a").End(xlUp).Row)
      ReDim r(1 To UBound(t), 1 To 1)
      For i = 1 To UBound(t)
         If t(i, 1) <> "" Then
            s = Split(t(i, 1), "|")
            If UBound(s) + 1 > max Then max = UBound(s) + 1: ReDim Preserve r(1 To UBound(r), 1 To max)
            For j = 0 To UBound(s): r(i, j + 1) = s(j): Next
         End If
      Next i
      .Range("a1").Resize(UBound(r), UBound(r, 2)).NumberFormat = "@"
      .Range("a1").Resize(UBound(r), UBound(r, 2)) = r
   End With
End Sub

Bonsoir,

Merci pour vos réponses. J'ai trouvé un code similaire que j'ai mis au point (avec chatgpt) et finalement ça fonctionne.

Merci d'avoir passé du temps sur cette question et bonne fin de week end

Rechercher des sujets similaires à "ouverture fichier txt vba"