Automatiser l'insertion de fichiers texte
Bonjour, j'ai un classeur excel comprenant 600 lignes. Je voudrais y insérer le contenu de 400 fichiers texte dont le nom reprend le contenu d'une cellule "identifiant". Par exemple : si la cellule "identifiant" = petitpoucet, il y a un fichier texte correspondant petitpoucet.txt. Par contre, certains identifiants n'ont pas de fichier texte correspondant.
J'avais trouvé comment pointer chaque fichier : ="fichiers\textes\" & MINUSCULE($B$2:$B$601) & ".txt" . Cela fonctionne mais ce n'est pas ce que je recherche soit l'insertion du texte lui-même.
J'ai créé une macro pour une ligne, mais comment faire pour la copier pour chacune avec la modification du nom adéquate et l'affichage du texte uniquement si un fichier texte correspondant existe ?
Et que le texte s'insère dans mon classeur et pas dans un nouveau ?
Désolé, je n'y connais rien en VBA et autres script.
Voici la macro créée :
Sub ImportTEXTE2()
'
' ImportTEXTE2 Macro
'
'
Workbooks.OpenText Filename:= _
"C:\chemin_fichiers\fichiers\textes\petitpoucet.txt", Origin:= _
xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 2), _
TrailingMinusNumbers:=True
Windows("extrait3.xls").Activate
End Sub
J'aimerais trouver l'astuce pour remplacer petitpoucet par une variable qui aille chercher le fichier texte correspondant au contenu de la cellule identifiant, et que cette macro se répète à chaque enregistrement pour lequel un fichier texte existe.
J'espère avoir été clair dans ma demande et espère que l'un(e) de vous pourra m'aider.
Merci d'avance !
Bonjour,
Il va falloir être un peu plus précis...
Combien de lignes, dans chaque fichier texte?
Est-ce que les fichiers "texte" sont tous dans le même répertoire? (indique le répertoire)
Où coller la ou les lignes de chaque fichier "texte"?
Tu dis que certains identifiants n'ont pas de fichier "texte" correspondant, mais est-ce que tous les fichiers "texte" ont un identifiant?
Bref, précise un peu plus, ce sera bien plus facile pour t'aider.
Bonjour cousinhub et merci pour ta réponse si rapide !
Mes fichiers texte contiennent le descriptif. Par exemple, pour l'enregistrement dont l'id est petitpoucet, le fichier texte comprendra : <strong>livre pour enfant</strong> racontant l'histoire d'un petit garçon et ses 7 frères blablablablabla. Ceci pouvant être sur plusieurs lignes mais ne devant remplir d'un champ de mon classeur.
Oui, tous les fichiers texte sont dans le répertoire fichiers\textes.
Le contenu de chaque fichier texte serait à coller dans une cellule "descriptif" de mon classeur.
Oui, tous les fichiers texte ont un id dans la table, mais tous les id n'ont pas de fichier texte correspondant. Seulement 400 sur les 600.
J'espère que c'est un peu plus clair ?
merci de te pencher sur mon problème
Re-,
en supposant que ton classeur Excel soit enregistré dans le même répertoire que tes fichiers "textes", essaie ce code :
Sub lireFichier_txt()
Dim LePath As String, Resultat As String
Dim Fich As String
Application.ScreenUpdating = False
LePath = ThisWorkbook.Path & "\" ' à adapter
Fich = Dir(LePath & "*.txt")
Do While Fich <> ""
Set c = Columns(2).Find(Fich)
If Not c Is Nothing Then
Open Fich For Input As #1
Do While Not EOF(1)
Line Input #1, Cible 'boucle sur chaque ligne du fichier texte
Resultat = Resultat & Cible & vbLf
Loop
c.Offset(0, 1) = Resultat
Resultat = ""
Close #1
End If
Fich = Dir
Loop
End Subreste une petite mise en forme à faire...(largeur de la colonne C, par exemple)
bigre, tu es rapide !
je vais essayer, mais juste de petites précisions :
1)quand tu écris "à adapter" si mon xls est dans le répertoire des txt, faut-il changer quelque chose ?
2)la colonne que je souhaite remplir est la T. Je remplace dont c par T dans "Set c = Column" et "if Not c Is Nothing Then" ?
merci !
Re-,
1)quand tu écris "à adapter" si mon xls est dans le répertoire des txt, faut-il changer quelque chose ?
Non, rien à changer, l'instruction :
LePath = ThisWorkbook.Path & "\"déterminant le répertoire de recherche, qui se trouve être le fichier contenant la macro
Set c = Columns(2).Find(Fich)On recherche le nom du fichier dans la colonne B (columns(2))..
si tu veux écrire en colonne T, il faut donc décaler :
c.Offset(0, 1) = Resultatcar ce code décale d'une colonne vers la droite, c'est à dire qu'on écrit en colonne C
Pour la colonne T, ce sera donc :
c.Offset(0, 18) = ResultatTiens, juste pour ma culture personnelle, peux-tu me dire en combien de temps tu vas traiter tous tes fichiers?
Pour cela, modifie le code ainsi :
Sub lireFichier_txt()
Dim LePath As String, Resultat As String
Dim Fich As String
Dim T
T = Timer
Application.ScreenUpdating = False
LePath = ThisWorkbook.Path & "\" ' à adapter
Fich = Dir(LePath & "*.txt")
Do While Fich <> ""
Set c = Columns(2).Find(Fich)
If Not c Is Nothing Then
Open Fich For Input As #1
Do While Not EOF(1)
Line Input #1, Cible 'boucle sur chaque ligne du fichier texte
Resultat = Resultat & Cible & vbLf
Loop
c.Offset(0, 18) = Resultat
Resultat = ""
Close #1
End If
Fich = Dir
Loop
MsgBox Timer - T
End SubTu auras un msgbox te donnant le temps d'éxécution...
Bon courage
bé ... j'ai bien un msgbox qui s'affiche (0,4...) mais en fait, le script ne donne aucun résultat.
Est-ce possible que ce soit dû au fait que dans la colonne B, les id est en majuscule alors que les noms des fichiers txt sont en minuscules ? Car il n'y a pas de message d'erreur de script.
Re-,
normalement, non, je viens de faire un essai avec les noms en majuscules dans le fichier Excel, et les noms de fichiers texte en minuscules, et il n'y a pas de soucis....
Euh, comment sont marqués tes fichiers dans le fichier Excel?
Est-ce qu'ils ont bien l'extension .txt (exemple petitpoucet.txt, ou uniquement petitpoucet)?
En faisant en pas à pas, et que tu passes ta souris sur Fich, qu'indique l'info-bulle?
(Pour faire du pas à pas, tu cliques n'importe où dans le code, et tu appuies sur F8, puis à suivre, sur F8.... tu passes chaque ligne de code)
Dès que la ligne n'est plus surlignée en jaune, tu passes ta souris sur Fich, et regarde si tu as quelque chose?
Sinon, peux-tu mettre ton fichier excel, avec juste 3 ou 4 lignes de la colonne B, ainsi qu'un fichier texte exemple, où tu modifies les données à l'intérieur au besoin?
@ te relire
merci pour ta patience !
Heu ... l'est où le Fich sur lequel je dois passer la souris ?
la référence dans le classeur est sans le txt.
Bonjour,
Ok, dans mon code, le nom inscrit dans le fichier Excel comportait le .txt...
Essaie avec ce code :
Sub lireFichier_txt()
Dim LePath As String, Resultat As String
Dim Fich As String
Dim T
T = Timer
Application.ScreenUpdating = False
LePath = ThisWorkbook.Path & "\" ' à adapter
ChDir LePath
Fich = Dir(LePath & "\" & "*.txt")
Do While Fich <> ""
Set c = Columns(2).Find(Left(Fich, Len(Fich) - 4))
If Not c Is Nothing Then
Open Fich For Input As #1
Do While Not EOF(1)
Line Input #1, Cible 'boucle sur chaque ligne du fichier texte
Resultat = Resultat & Cible & vbLf
Loop
c.Offset(0, 18) = Left(Resultat, Len(Resultat) - 1)
Resultat = ""
Close #1
End If
Fich = Dir
Loop
MsgBox Timer - T
End SubBonne journée
Merci membre dévoué ! je n'avais pas vu où tu étais, il doit déjà être bien tard chez toi !
Bon, ben ... ça marche toujours pas ... c'est peut-être moi qui ne sais pas lancer une macro (j'ai pas trop l'habitude avec ces petites bêtes là)
Je te joins un fichier créé sur le modèle de celui que je souhaite traiter : 5 enregistrements dont 3 ont un fichier texte portant le même nom.
Désolé de t'embêter et merci de ta patience ! bonne soirée
Bonjour,
Bon, si tu quittes, à peine avoir fini de poser ta question, on va pas y arriver....
Regarde le fichier joint
Enregistre-le dans le répertoire contenant tes fichiers texte
et clique sur le bouton jaune...(GO)
Bonne nuit, du moins pour moi
j'ai pas quitté, mais je ne pensais pas que tu répondrais aussi vite vu l'heure et ai continué à bosser (ben oui, ici c'est pas encore l'heure d'aller se coucher)
Bon, j'ai mis le xls dans le dossier des fichiers texte et cliqué sur le bouton jaune (là, je risque pas de me tromper).
Résultat : erreur d'exécution '53' Fichier introuvable. Le débogage me met la ligne "Open Fich For Input As #1" en jaune.
Manifestement, ça a marché chez toi car je vois que la colonne T est très large, j'imagine donc qu'avant de me renvoyer le fichier, tu as effacé le contenu.
Alors, je pige pas ! pfff ...
A demain ... si vous le voulez bien
Merci !
Bonsoir,
Moi aussi, dans mes essais, j'ai eu ce message d'erreur....
Un simple Alpha/Mike, du docteur OnOff a résolu ce souci...
Euh......
Je voulais juste dire, un simple Arrêt/Marche du PC "pourrait" peut-être résoudre ton souci....
Salut, il y a combien d'heures de décalage ? Nous avons des amis qui habitent là où tu es, un photographe. Mais il a beau me répéter combien d'heures, j'oublie ...
A part ça, merci pour ton conseil. Fatalement, depuis hier, je l'ai rallumé. Mais zélas cela n'a rien changé.
Par contre, il m'est venu l'inspiration de supprimer l'ancien testtexte.xls du répertoire ... et cela a marché ... pour le premier enregistrement. Va savoirpourquoi, les 2 fichiers n'ont pas le même nom ...
Mais bon, c'est super !!!
Mais maintenant, comment le faire fonctionner automatiquement sur toutes les lignes ?
Bonne nuit et merci !
Bonsoir,
Euh, ici, 01H50, en Métro, 14H50....
Par contre, cela fonctionne, ou non?
La lecture de fichier "txt", par la méthode "open .....#1" est assez difficile, quand mal maitrisée....
Hier, j'ai du faire 2 ou 3 A/M pour que cela fonctionne....
Donc, je ne la maitrise pas totalement.....(si quelqu'un la maitrise, merci de rentrer dans ce fil)
Par contre, normalement, cela devrait fonctionner, chez toi....
J'ai passé quelques jours, sur un autre forum, avec un souci quelque peu similaire, pour une extraction de plus de 900 fichiers "Text", et ce n'était pas du "tout cuit"....
Et l'A/M a résolu bien des soucis....
Au plaisir
oui, ça fonctionne, comme je te le disais dans mon précédent post, mais que sur le premier enregistrement. Ce serait être au niveau de la boucle qu'il y a un souci ?
Chez toi, il t'a fait chaque ligne automatiquement ?
bonne nuit et à demain
Re-,
Vi, j'ai eu les 3 commentaires....
Look at "espace" before or after.....
Excel est "béton"...
Un terme, "ressemble" à un autre, mais "pas tout à fait"....
Euh, 02h30, ici, et demain au boulot à 07H00.....
ça va pas être facile....
bon ... tu dois être frais aujourd'hui !
Pardon de venir encore t'emm...
mais j'y comprends rien ... maintenant, cela ne veut plus marcher, même pour un seul enregistrement ...
Ce qui est marrant, c'est que si je mets le xls dans un dossier tout seul, il m'affiche le timing sans erreur (mais vu la vitesse, il doit juste scanner et voir qu'il n'y a rien). Par contre, si je lui mets ne fût-ce qu'un fichier txt dans le même rép, cela me donne l'erreur 53, fichier introuvable ... c'est logique, ça ??
j'ai rebooté, ça ne change rien.
Quand tu l'as fait de ton côté, tu avais bien le xls dans le même répertoire que les txt ?
merci pour le temps que tu y passes !
Bonjour,
essaie les fichiers joint.
Dézippe dans un nouveau répertoire, tu auras le fichier excel, et 3 fichiers texte
Chez moi, en 2003 ou 2007, cela fonctionne...
On va voir...