Txt et excel VBA [Résolu]

Signaler
Messages postés
25
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
9 janvier 2006
-
Messages postés
25
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
9 janvier 2006
-
Boujour à tous, voilas j'ai un fichier txt qui doit avoir au moins
100000 carractère et je voudrait l'ouvrir sous excel en le coupant
comme je veux.



exemple : je voudrais que tout les 564 carractère il passe à la céllule de ligne suivante lors de l'import du txt.

Tout sa doit etre fait en vba mais j'avoue que je ne trouve pas. J'ai
essayé d'ouvrir le txt avec excel mais le problème est que lorsque je
choisie ou mettre les séparateurs, le fichier texte est sur une seule
ligne.



Je sais pas si c'est très compréhensible mais bon.

P.S.: je ne veux pas a avoir à modifier le txt en plus.





Merci d'avance à la personne qui pourra m'orienté.

Steed

8 réponses

Messages postés
25
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Je vois que mon sujet déchaine les passions, merci à tous ceux qui y on
réfléchie mais j'ai trouver comment faire depuis excel en VBA, voila
source :



Option Explicit



Dim Fichier As String

Dim Ligne()

Dim nbmoulinette As String

Dim carracterenow As Double

Dim i As Integer

Dim g As Integer

Dim nblignetraite As Double

Sub test()

carracterenow = -563

Dim Freenum As Integer



Freenum = FreeFile

Fichier = "D:\Rep de travail\Bureau\dadscrc 2004\AD2142.txt"

Open Fichier For Input As #Freenum

i = 1

While Not EOF(Freenum)

ReDim Preserve Ligne(i)

Line Input #Freenum, Ligne(i)

If Len(Ligne(i)) = 564 Then

Range("A" & i) = Ligne(i)

Else

nbmoulinette = (Len(Ligne(i)) / 564)

MsgBox nbmoulinette

For g = 1 To nbmoulinette

carracterenow = carracterenow + 564

Range("A" & g) = Mid(Ligne(i), carracterenow, 564)

Range("B" & g) = Len(Range("A" & g))

Next g



End If

i = i + 1

Wend

Close #Freenum

MsgBox (Len(Ligne(1)))

End Sub





Merci a tous et à bientot.

Steed
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 179 internautes nous ont dit merci ce mois-ci

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Bonsoir,
De quelle forme est le contenu de ton fichier texte ?
Est-ce simplement une chaine de caractères de 10000xxx caractères ? est-ce séparé par des ;,:/... ? par des retours à la ligne ?
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Moi je crois qu'il n'a aucun séparateurs et que tout est d'une traite!

La question primordiale est : Y'a-t-il, dans ton texte, des caractères "," ou ";" ???
Autrement dit : De quoi n'est pas composé ton texte (j'ai bien dit "n'est pas") ?

Car, en effet, on va devoir insérer des caractères séparateurs dans ton fichier d'origine. Du coup, évidemment, il ne faut pas que ces caractères soient déjà existants!!!

Mais bon, le plus simple (d'où la question de Willi) serait d'ajouter des retours chariot (retour à la ligne si tu préfères) dans ce fichier car Excel considérera qu'il s'agit d'une nouvelle ligne et donc, le mettra dans la cellule en dessous.

En fait, la technique consiste à importer (ouvrir, si tu préfères) ton fichier "brut" dans Excel. Excel reconnait plusieurs types de fichiers et est capable d'ouvrir les fichiers qui n'ont pas vraiment de standard... mais avec quelques conditions. Les fichiers de ce "non-type" sont considérés comme étant des fichiers de type "CSV". Excel, lorsqu'il va tenter de les ouvrir va également tenter (puisque c'est son rôle et que l'utilisateur est sensé savoir ce qu'il fait) de les comprendre... C'est à dire qu'il considère que ces fichiers, puisque l'utilisateur veux absolument les ouvrir par Excel, sont des tableaux. Il va donc tenter de retrouver leur structure. Tout tableau a des lignes, des cellules, des colonnes, ... Excel est donc très bien fait de ce coté là. Mais tous ces éléments (les cellules) sont généralement séparés dans les fichiers (en fait, ils doivent l'être sinon Excel ne peut pas retrouver leur structure).
Les séparateurs classiques sont :
- le caractère de tabulation et/ou une tabulation via des espaces [nombre d'espaces réguliers];
- la virgule;
- le point-virgule;
- un retour à la ligne (pour séparer les lignes de cellules).
Les colonnes sont donc déduites de fait !

Il va donc falloir modifier ton fichier de base de manière automatisé via le VB. Voilà pourquoi on a besoin de ces informations.
Mais je te rassure, rien de bien compliqué : un "Open", une boucle Do/Loop ou For/Next, un Mid$ et ce sera vite réglé.

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
47
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
18 mai 2007

Vous ne répondez pas à sa question, puisque justement lui ne veut PAS DEVOIR MODIFIER SON TEXTE.

Je ne sais pas si c'est faisable :

Accèder au fichier text via VB, stocker son contenue dans une variable String.
Et tous les X caractères insérer le caractere "retour chariot".
Et pour finir l'ouvrir avec excel qui va changer de cellule vers le bas a chaque retour chariot.
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
22
Cela est tout à fait faisable, il n'y a vraiment rien de compliqué.
Ce qu'ont demandent c'est de précisez la structure de son fichier texte pour pouvoir y répondre.....
Qui a parlé de modifier son texte ??
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Il ne veux pas modifier son texte, ok, mais on a subodoré qu'il ne voulais pas le faire... manuellement !!!

Le VB automatisera le procédé, c'est tout ! Mais son texte, de toute façon, il devra bien être un tantinet modifié !!!

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
47
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
18 mai 2007

"Ce qu'ont demandent c'est de précisez la structure de son fichier texte pour pouvoir y répondre....."

Imagine toi que c'est un extrait de roman et le tour est joué...
Si c'est un texte tout pres je ne vois pas l'interet de se faire chier avec du VB, suffit de faire clic droit ouvrir avec puis excel et y'a rien à faire.

"Le VB automatisera le procédé, c'est tout ! Mais son texte, de toute façon, il devra bien être un tantinet modifié !!!"

Justement, comment tu fais pour modifier un texte automatiquement grâce à VB ? Parce que si tu peux modifier un texte grace à VB ça revient à ce que moi je disais...
C'est comme si tu me demandais : "combien ça fait 1+1 ?" et moi je te réponds : "je connais la réponse"...Ca avance vachement tu trouves pas ???

On dirait pas que vous etes programmeur...moi au moins je laisse entrevoir une solution programmable...
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Oui mais c'est oublier le sujet de l'exercice !!! Je te le rappelle :
"... j'ai un fichier txt qui doit avoir au moins 100000 carractère et je voudrait l'ouvrir sous excel en le coupant comme je veux.
exemple : je voudrais que tout les 564 carractère il passe à la céllule de ligne suivante lors de l'import du txt.
Tout sa doit etre fait en vba mais j'avoue que je ne trouve pas.
"

Bref, on ne peut pas subodorer qu'il s'agisse d'un roman. Et quand bien même, est-ce que ce roman utilise des caractères ASCII particuliers ??? On n'en sait rien!
Moi, en tant que codeur, je me dois de subodorer que le texte n'est qu'une suite d'octets! D'où ma question : y'en aurait-il un qui ne soit pas utilisé afin de l'utiliser comme séparateur ?

Mais d'un autre coté on peu aussi s'imaginer ne pas passer par la méthode Open et ouvrir manuellement le fichier via l'instruction Open en mode binary par exemple...

Comme quoi, on est pas si fermé d'esprit que ça!!! Mais il nous manque un chouïa plus d'infos, c'est tout, pas de quoi en faire une patate!

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )