Macro import automatique txt avec |

Le
llynt Hors ligne
Bonjour,

Pour mon travail, je souhaiterai automatiser l’import de deux fichiers textes (qu’on choisirait grâce à une boite de dialogue) dans deux onglets différents sous excel.
J’ai trouvé des procédures sur vos forums cependant deux problèmes persistent :
- je n’arrive pas à faire apparaître une boite de dialogue pour choisir mon fichier.
- mon fichier txt est délimité par des | et je n’arrive pas à paramétrer cela dans ma macro. Sinon, si j’importe mes données avec l’assistant, cela marche très bien.
Auriez-vous la solution svp ?


P.S : je suis relativement novice en VBA.
Merci d’avance pour votre aide.
Elly
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #25316052
Bonjour,

Essaie ceci.

Ceci est disponible de mémoire pour les versions
Excel 2003 et plus récentes.
Application.FileDialog(msoFileDialogFilePicker)

Dans la boîte de dialogue, tu peux sélectionner plusieurs
fichiers, chacun sera importé dans un nouvelle onglet
dans le classeur. L'onglet aura le nom du fichier.

'-------------------------------------------------
Sub Import()
Dim Fd As FileDialog, Elt As Variant
Dim A As Integer, T As Variant
Dim Sep As String
Dim WholeLine As String, FName As String
Dim Répertoire As String, Sh As Worksheet

'Séparateur du fichier texte
Sep = "|"

'Ouverture sur le répertoire par défaut...
Répertoire = "c:" & Environ("Username") & "Documents"

Set Fd = Application.FileDialog(msoFileDialogFilePicker)
With Fd
.AllowMultiSelect = True
.ButtonName = "Importer"
.InitialFileName = Répertoire
.Filters.Add "Fichier texte", "*.txt; *.txt", 1
If .Show = -1 Then
'Pour chaque fichiers sélectionnées
For Each Elt In .SelectedItems
'Ajout d'une nouvelle feuille
Set Sh = ThisWorkbook.Worksheets.Add
With Sh
Sh.Name = Split(Elt, "")(UBound(Split(Elt, "")))
FName = Chemin & Elt
Open FName For Input Access Read As #1
A = 1
While Not EOF(1)
Line Input #1, WholeLine
T = Split(WholeLine, Sep)
.Range("A" & A).Resize(, UBound(T) + 1) = T
A = A + 1
Wend
Close #1
End With
Next Elt
End If
End With
Set Fd = Nothing
End Sub
'-------------------------------------------------


MichD
---------------------------------------------------------------
MichD
Le #25316042
Juste en dessous de la déclaration des variables
dans la procédure, tu devrais ajouter ces 2 lignes
de code :

Application.ScreenUpdating = False
Application.EnableEvents = False

Et juste avant la toute dernière ligne de code :
Application.ScreenUpdating = True
Application.EnableEvents = True

Cela devrait grandement augmenter la vitesse de traitement!


MichD
---------------------------------------------------------------
Publicité
Poster une réponse
Anonyme