Pb d'importation d'objets dans une macro

big_jules

XLDnaute Nouveau
Salut a tous ,
Je tiens a vous dire d'entrée que je suis un débutant dans les macros Excel ...:eek:

Voici mon souchi :
Je voudrai importer dans un tableau des fichiers .txt dont les valeurs sont séparées par des ;

La première ligne de mon tableau est fixe , elle contient la description des données que je veux importer.

Le but final est que quand je clique sur le bouton Macro tous les fichiers .txt qui sont dans mon repertoire source , soient importés dans mon tableau , une ligne = un fichier .txt

Voila j'espère que je me suis fait comprendre et surtout que c'est possible ... :D

Merci d'avance pour vos réponses ;)
 

Coriolan

XLDnaute Occasionnel
Re : Pb d'importation d'objets dans une macro

Bonjour,

Oui, c'est possible, avec quelques restrictions: si j'ai bien compris, un fchier texte complet se retrouvera dans une cellule, ou bien j'ai mal compris et c'est chaque champ (entre deux ";") qui se retrouvera dans une cellule?

Dans le premier cas, on est limité à la longueur totale du texte (< 32000 caractères), et dans le deuxième par le nombre de colonnes.

Un fichier .txt exemple serait le bienvenu
 

big_jules

XLDnaute Nouveau
Re : Pb d'importation d'objets dans une macro

c'est bien chaque champ (entre deux ";") qui se retrouvera dans une cellule.

Voici une copie d'un fichier .txt :

9;105100303351;2007-07-02 00:00:00;11250;611;C;O;;;;;48;982027;Echantillon 1;021051003033512007018001;0;30;2007-07-02 00:00:00;;;1626;O;DDSV51;88;4119;30;CHA-07-01620;< ;0.0005; ;;;< 0.0005;;2007-10-11 12:59:26;N;0;;
 

Coriolan

XLDnaute Occasionnel
Re : Pb d'importation d'objets dans une macro

Rebonjour,

Voilà la macro:

Sub ImportTextFile()

Dim ceclasseur As String
Dim monrépertoire As String
Dim ii As Integer
monrépertoire = "nom du répertoire contenant les fichiers .txt à importer"

ceclasseur = ThisWorkbook.Name

Set fc = CreateObject("Scripting.FileSystemObject").getfolder(monrépertoire).Files
If fc.Count > 0 Then 'il y a des fichiers
ii = 0
For Each f1 In fc
If Right(f1.Name, 3) = "txt" Then 'c'est un fichier texte
ii = ii + 1
Workbooks.OpenText Filename:= _
monrépertoire & "\" & f1.Name, Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Semicolon:=True
Rows(1).Copy Workbooks(ceclasseur).Sheets(1).Range("A" & ii + 1)
ActiveWorkbook.Close savechanges:=False

End If
Next
End If

Columns("A:IV").Select
Cells.EntireColumn.AutoFit
Range("A1").Select




End Sub

Ne pas oublier de renseigner monrépertoire.

La macro colle les champs à partir de la deuxième ligne, tant qu'il y a des fichier .txt dans monrépertoire
 

big_jules

XLDnaute Nouveau
Re : Pb d'importation d'objets dans une macro

Petit souchis suplémentaire :
La macro marche impec si mon .txt ne fait qu'une ligne.
Quand je l'exécute sur un fichier qui fait plusieurs ligne elle me récupère que la première ligne du .txt

Comment faire pour récupérer toutes les lignes ...?
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Pb d'importation d'objets dans une macro

Bonjour,

Testes ce fichier issu du code de Coriolan que je remercie vivement car c'est du compact de chez compact.

Il permet de fusionner des fichiers TXT en mettant le nom du fichier en première colonne.
 

Pièces jointes

  • RécupFichierTxt.xls
    41 KB · Affichages: 257

big_jules

XLDnaute Nouveau
Re : Pb d'importation d'objets dans une macro

Salut les gens ;)

J'ai une petite requete suplémentaire a formuler :

Actuellement la macro me propose de sélectionner un dossier et importe tous les fichiers .txt qui sont a l'intérieur.
Je voudrais pouvoir sélectionner que le(s) fichier(s) que je sélectionne.

Merci d'avance pour vos réponses :D
 

MJ13

XLDnaute Barbatruc
Re : Pb d'importation d'objets dans une macro

Bonjour

Pour cela c'est très simple.

Tu modifies la macro d'origine et au lieu de concaténer les fichiers, tu les inscrits dans une feuille.
Ensuite tu mets en gras les fichiers que tu veux sélectionner puis tu remodifies la macro d'origine et tu fais un test sur la mise en gras des cellules en parcourant ta liste.


C'est pas sorcier!
icon12.gif
 

big_jules

XLDnaute Nouveau
Re : Pb d'importation d'objets dans une macro

Je pense que je me suis fait mal comprendre ...

Le début de la macro permet de sélectionner un dossier avec une fenêtre type explorateur.Je voudrais avoir une fenêtre ou je puisse choisir un fichier .txt au lieu de sélectionner un dossier entier , qui contient plusieurs fichier .txt.

Pour faire simple je voudrais ça :

http://imageshack.us

A la place de ça :
http://imageshack.us
 

big_jules

XLDnaute Nouveau
Re : Pb d'importation d'objets dans une macro

On est vraiment pas loin , la boite s'ouvre bien et je peux choisir un fichier , mais j'ai une erreur :

erreur d'execution 5
Argument ou appel de procédure incorrect

Je remet le code complet tel que l'utilise , avec la ligne d'erreur en jaune.

Code:
Public chemin As String
Public ceclasseur As String
Public nomtxt As String
Public ii As Single
Public derligne As Single
Sub ImportTextFile()

choisirRepertoire
ceclasseur = ThisWorkbook.Name

[COLOR="Yellow"]Set fc = CreateObject("Scripting.FileSystemObject").GetFolder(chemin).Files[/COLOR]
If fc.Count > 0 Then 'il y a des fichiers
ii = 0
For Each f1 In fc
If Right(f1.Name, 3) = "txt" Or Right(f1.Name, 3) = "txt" Then  'c'est un fichier texte
nomtxt = f1.Name
ii = ActiveSheet.Range("a65536").End(xlUp).Row

Workbooks.OpenText FileName:= _
chemin & "\" & f1.Name, Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Semicolon:=False, Other:=True, OtherChar:="|"
'inclu_nom_fichier début
derligne = ActiveSheet.Range("a65536").End(xlUp).Row
Range("A1:A" & derligne).Select
    Selection.Insert Shift:=xlToRight
    Selection.FormulaR1C1 = f1.Name
'inclu_nom_fichier fin
derligne = ActiveSheet.Range("a65536").End(xlUp).Row

Rows(1 & ":" & derligne).Copy Workbooks(ceclasseur).ActiveSheet.Range("A" & ii + 2)
ActiveWorkbook.Close savechanges:=False

End If
Next
End If

Range("A1").Select

Rows.HorizontalAlignment = -4108 'centrer le texte
Columns("c").NumberFormat = "0" 'colone b format nombre
Columns("p").NumberFormat = "0" 'colone o format nombre
End Sub

Sub choisirRepertoire()

Application.Dialogs(xlDialogOpen).Show

End Sub


Sub clear()

Dim i%
For i = 500 To 7 Step -1  'à adapter à la situation
If Application.CountA(Rows(i)) Then Rows(i).Delete
Next
End Sub
 

Discussions similaires

Réponses
11
Affichages
511
Réponses
7
Affichages
323

Statistiques des forums

Discussions
312 249
Messages
2 086 601
Membres
103 258
dernier inscrit
kalis03