OVH Cloud OVH Cloud

Ouvrir un fichier .txt dans Excel avec espace comme séparateur de champs

16 réponses
Avatar
Christian
Bonjour,

Comment ouvrir un fichier .txt dans Excel avec espace comme séparateur de
champs ?
Le code ci dessous est une tentative d'adaptation d'un code vba, mais ça ne
marche pas.
Ou est le Pb ???

Merçi de votre aide


For i = 2 To LmaxListe
CHEMIN = mafeuilleliste.Cells(i, 1).Value

MonExcel.Workbooks.OpenText FileName:= _
CHEMIN, Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited,
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True,
Semicolon:=True, Comma:=False, _
Space:=False, Other:=False,
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array( _

3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _

Array(9, 1), Array(10, 1))


Next

6 réponses

1 2
Avatar
Gloops
parci a écrit, le 24/06/2005 16:43 :
Tu pourrais peut-être essayer d'appeler cette macro écrite dans un classeur
Excel (version 95) depuis VB avec Application.Run.



A vrai dire c'est bien ça que j'avais fait, et je viens de le refaire
pour être sûr.

Ensuite, je me suis contenté, après avoir copié l'instruction dans VB6,
d'ajouter l'instance d'Excel et de la rendre visible, et aussi d'ajouter
un point pour que WorkBooks renvoie à cette instance.

J'ai bougé un peu les coupures de lignes pour que ça soit lisible dans
un newsgroup, en respectant l'espace et le souligné à la fin de la ligne.

ça donne :

Set ExcelApp = CreateObject("Excel.Application")
With ExcelApp
.Visible = True
.Workbooks.OpenText FileName:= _
"C:...(chemin) ...Mes documentstest.txt", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab _
:=True, Semicolon:úlse, Comma:=True, Space:úlse, Other _
:úlse, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array( _
4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
Array(8, 1), Array(9, 1), Array(10 _
, 1))
End With

Et toujours l'erreur 1004, la méthode a échoué.

Cette fois j'ai Excel d'ouvert sans classeur bien entendu, puisque je
n'ai pas mis Workbooks.Add

C'est une macro que je venais juste d'enregistrer et qui avait très bien
fonctionné -à partir de l'interface d'Excel.

D'ailleurs, ensuite, j'ai recopié l'instruction dans un nouveau module
d'Excel, retiré le point devant Workbooks, mis un nom de procédure, et
exécuté, et le fichier a été chargé et fractionné sans aucun problème.
Avatar
Alain CROS
Bonjour.

Il faut définir les constantes.

Const xlWindows = 2
Const xlDelimited = 1
Const xlDoubleQuote = 1

Alain CROS

"Gloops" a écrit dans le message de news: 42bc2c0e$0$11707$
| parci a écrit, le 24/06/2005 16:43 :
| > Tu pourrais peut-être essayer d'appeler cette macro écrite dans un classeur
| > Excel (version 95) depuis VB avec Application.Run.
|
| A vrai dire c'est bien ça que j'avais fait, et je viens de le refaire
| pour être sûr.
|
| Ensuite, je me suis contenté, après avoir copié l'instruction dans VB6,
| d'ajouter l'instance d'Excel et de la rendre visible, et aussi d'ajouter
| un point pour que WorkBooks renvoie à cette instance.
|
| J'ai bougé un peu les coupures de lignes pour que ça soit lisible dans
| un newsgroup, en respectant l'espace et le souligné à la fin de la ligne.
|
| ça donne :
|
| Set ExcelApp = CreateObject("Excel.Application")
| With ExcelApp
| .Visible = True
| .Workbooks.OpenText FileName:= _
| "C:...(chemin) ...Mes documentstest.txt", _
| Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, _
| TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab _
| :=True, Semicolon:úlse, Comma:=True, Space:úlse, Other _
| :úlse, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
| Array(3, 1), Array( _
| 4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
| Array(8, 1), Array(9, 1), Array(10 _
| , 1))
| End With
|
| Et toujours l'erreur 1004, la méthode a échoué.
|
| Cette fois j'ai Excel d'ouvert sans classeur bien entendu, puisque je
| n'ai pas mis Workbooks.Add
|
| C'est une macro que je venais juste d'enregistrer et qui avait très bien
| fonctionné -à partir de l'interface d'Excel.
|
| D'ailleurs, ensuite, j'ai recopié l'instruction dans un nouveau module
| d'Excel, retiré le point devant Workbooks, mis un nom de procédure, et
| exécuté, et le fichier a été chargé et fractionné sans aucun problème.
|
Avatar
Gloops
Ah, là y a qu'e'qu'chose ...
Comme dit plus haut dans le fil, la première fois j'y avais pourtant pensé.

Cette fois j'avais oublié, et ça s'est avéré décisif, le fractionnement
s'est fait proprement, commandé depuis VB6.

Il me reste à regarder de près les différences de syntaxe, pour voir ce
qui coince, enfin ce qui coinçait au début. Je n'ai pas tout sauvegardé
en route, mais avec le premier message du fil on devrait pouvoir mettre
le doigt dessus, je regarderai à tête reposée une fois déconnecté.

Une fois que ce sera fait je crois que cette fois Christian aura eu
droit à une réponse dans les règles de l'art.

Merci Alain pour ce rappel à l'ordre, et merci à tous les intervenants.

_________________________________________
Alain CROS a écrit, le 24/06/2005 19:01 :
Bonjour.

Il faut définir les constantes.

Const xlWindows = 2
Const xlDelimited = 1
Const xlDoubleQuote = 1

Alain CROS

"Gloops" a écrit dans le message de news: 42bc2c0e$0$11707$
| parci a écrit, le 24/06/2005 16:43 :
| > Tu pourrais peut-être essayer d'appeler cette macro écrite dans un classeur
| > Excel (version 95) depuis VB avec Application.Run.
|
| A vrai dire c'est bien ça que j'avais fait, et je viens de le refaire
| pour être sûr.
|
| Ensuite, je me suis contenté, après avoir copié l'instruction dans VB6,
| d'ajouter l'instance d'Excel et de la rendre visible, et aussi d'ajouter
| un point pour que WorkBooks renvoie à cette instance.
|
| J'ai bougé un peu les coupures de lignes pour que ça soit lisible dans
| un newsgroup, en respectant l'espace et le souligné à la fin de la ligne.
|
| ça donne :
|
| Set ExcelApp = CreateObject("Excel.Application")
| With ExcelApp
| .Visible = True
| .Workbooks.OpenText FileName:= _
| "C:...(chemin) ...Mes documentstest.txt", _
| Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, _
| TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab _
| :=True, Semicolon:úlse, Comma:=True, Space:úlse, Other _
| :úlse, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
| Array(3, 1), Array( _
| 4, 1), Array(5, 1), Array(6, 1), Array(7, 1), _
| Array(8, 1), Array(9, 1), Array(10 _
| , 1))
| End With
|
| Et toujours l'erreur 1004, la méthode a échoué.
|
| Cette fois j'ai Excel d'ouvert sans classeur bien entendu, puisque je
| n'ai pas mis Workbooks.Add
|
| C'est une macro que je venais juste d'enregistrer et qui avait très bien
| fonctionné -à partir de l'interface d'Excel.
|
| D'ailleurs, ensuite, j'ai recopié l'instruction dans un nouveau module
| d'Excel, retiré le point devant Workbooks, mis un nom de procédure, et
| exécuté, et le fichier a été chargé et fractionné sans aucun problème.
|




Avatar
Gloops
Oh ben v'là aut'chose, au début j'avais bien explicité xlWindows et
xlDelimited, mais on dirait bien que j'avais oublié xlDoubleQuote, si on
le met aussi le code de Christian fonctionne.

J'ai été piteux sur ce coup-là ...
Avatar
Gloops
Finalement, la bonne réponse pour Christian, c'est qu'en début de
module, il faut mettre une ligne "Option Explicit" (sans les guillemets).

De cette façon, Excel fait un bip sur chaque variable ou constante non
définie, et on ne risque pas de l'oublier.


Pour être complet il aurait bien fallu dire comment avoir ça par défaut,
pour le moment j'avoue que j'ai un trou de mémoire ...
Avatar
Gloops
Et allez donc ...

Bon, on oublie mon message de 7:51. Il faut reconnaître qu'il y a
malheureusement des moments, comme ça ...

En réponse à la question initiale, le bon conseil est de placer en début
de module la ligne
Option Explicit

De cette manière, VB6 va réclamer chaque variable ou constante non
déclarée, et on ne risquera pas de l'oublier.

En cherchant bien dans les options on va trouver quelque chose à cocher
pour avoir ça par défaut.
1 2