Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Ouverture d'un fichier avec convertion

12 réponses
Avatar
HD
Bonjour,

Pour une de mes macros, je dois ouvrir un fichier avec séparateur " ; ".
Jusque là tout fonctionne bien sauf que... Dans ma 4e colonne j'ai des
données numériques sur plus de 15 caractères d'où le fait que je me retrouve
avec par exemple :
"1,23E+11" à la place de "123102000000". Lorsque j'ouvre le fichier
manuellement je peux bien sûr définir que la 4e colonne sera récupérée en
format texte... Mais le problème est que dans la fonction VBA je ne trouve
pas où préciser la chose. Et bien sûr il ne me sert à rien de définir après
récupération des données que ma colonne 4 est en texte...

Merci d'avance pour votre aide
--
@+
HD

10 réponses

1 2
Avatar
Daniel
Bonjour.
Renomme ton fichier en supprimant l'extension .csv. Ca va calmer Excel et, à
l'ouverture, il va te présenter l'assistant. Là, tu pourras décider du
format de tes champs. Fais-le une fois manuellement avec l'enregistreur de
macro pour récupérer le code.
Cordialement.
Daniel
"HD" a écrit dans le message de news:
es8vvk$34a$
Bonjour,

Pour une de mes macros, je dois ouvrir un fichier avec séparateur " ; ".
Jusque là tout fonctionne bien sauf que... Dans ma 4e colonne j'ai des
données numériques sur plus de 15 caractères d'où le fait que je me
retrouve
avec par exemple :
"1,23E+11" à la place de "123102000000". Lorsque j'ouvre le fichier
manuellement je peux bien sûr définir que la 4e colonne sera récupérée en
format texte... Mais le problème est que dans la fonction VBA je ne trouve
pas où préciser la chose. Et bien sûr il ne me sert à rien de définir
après
récupération des données que ma colonne 4 est en texte...

Merci d'avance pour votre aide
--
@+
HD




Avatar
HD
Bonjour Daniel,

Renomme ton fichier en supprimant
l'extension .csv. Ca va calmer Excel
et, à l'ouverture, il va te présenter
l'assistant. Là, tu pourras décider du
format de tes champs. Fais-le une fois
manuellement avec l'enregistreur de
macro pour récupérer le code.


C'est ce que j'ai fait mais... le problème est que nul part dans le code
récupéré l'on a une donnée spécifiant que la 4e colonne est en texte.

Voici par exemple le code récupéré pour ouvrir ce fichier avec un délimiteur
de champs qui est le point virgule et avec le 4e champs qui est mis en texte
:

Workbooks.OpenText FileName:= _
"Z:Import ClientSTOCK 98GENERAL 02.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True, Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 1), Array(2, 1),
_
Array(3, 1), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1),
Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1),
Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1),
Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1),
Array(28, 1))

De plus... Il semblerait que celà ne change pas grand chose à mon problème
car les données longues apparaissent alors directement en valeur
scientifique :
Par exemple : 1,23102E+11 est afficher dans ma cellule... et la valeur de
la cellule est alors 1,23102E+11 et non plus 123102000000 comme
auparavant... :-(

Y'aurait il un moyen de convertir ces longues séries de chiffres en texte ?
J'ai fait un essai avec une boucle qui me parcourt toute la 4e colonne pour
transformer la valeur en texte avec format... mais celà ne change rien.
Voici le code :

i = 7
Do
Cells(i, 4).Value = CStr(Format(Cells(i, 4).Value, "#################"))
Application.StatusBar = i & " / " & iMax
i = i + 1
Loop Until Cells(i, 4).Value = ""

--
@+
HD

Avatar
Daniel
"HD" a écrit dans le message de news:
es9b7s$7cl$
Bonjour Daniel,

Renomme ton fichier en supprimant
l'extension .csv. Ca va calmer Excel
et, à l'ouverture, il va te présenter
l'assistant. Là, tu pourras décider du
format de tes champs. Fais-le une fois
manuellement avec l'enregistreur de
macro pour récupérer le code.


C'est ce que j'ai fait mais... le problème est que nul part dans le code
récupéré l'on a une donnée spécifiant que la 4e colonne est en texte.

Voici par exemple le code récupéré pour ouvrir ce fichier avec un
délimiteur
de champs qui est le point virgule et avec le 4e champs qui est mis en
texte
:

Workbooks.OpenText FileName:= _
"Z:Import ClientSTOCK 98GENERAL 02.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True, Comma:úlse
_
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 1), Array(2,
1),
_
Array(3, 1), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1),
Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1),
Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1),
Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1),
Array(28, 1))

De plus... Il semblerait que celà ne change pas grand chose à mon problème
car les données longues apparaissent alors directement en valeur
scientifique :
Par exemple : 1,23102E+11 est afficher dans ma cellule... et la valeur
de
la cellule est alors 1,23102E+11 et non plus 123102000000 comme
auparavant... :-(

Y'aurait il un moyen de convertir ces longues séries de chiffres en texte
?
J'ai fait un essai avec une boucle qui me parcourt toute la 4e colonne
pour
transformer la valeur en texte avec format... mais celà ne change rien.
Voici le code :

i = 7
Do
Cells(i, 4).Value = CStr(Format(Cells(i, 4).Value,
"#################"))
Application.StatusBar = i & " / " & iMax
i = i + 1
Loop Until Cells(i, 4).Value = ""

--
@+
HD





Avatar
Daniel
J'ai un fichier text nommé toto qui contient les 2 lgnes suivantes :

toto;123456789123456789;titi
tata;123456789123456789;tyty

Je l'ouvre avec la macro :

Workbooks.OpenText Filename:="E:DonneesDanieltoto", Origin:=xlMSDOS,
_
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 1), Array(2,
2), _
Array(3, 1)), TrailingMinusNumbers:=True

Le fait d'avoir codé Array(2, 2) me mets bien la seconde colonne en format
texte et je récupère bien les 18 caractères du nombre.
Daniel
"HD" a écrit dans le message de news:
es9b7s$7cl$
Bonjour Daniel,

Renomme ton fichier en supprimant
l'extension .csv. Ca va calmer Excel
et, à l'ouverture, il va te présenter
l'assistant. Là, tu pourras décider du
format de tes champs. Fais-le une fois
manuellement avec l'enregistreur de
macro pour récupérer le code.


C'est ce que j'ai fait mais... le problème est que nul part dans le code
récupéré l'on a une donnée spécifiant que la 4e colonne est en texte.

Voici par exemple le code récupéré pour ouvrir ce fichier avec un
délimiteur
de champs qui est le point virgule et avec le 4e champs qui est mis en
texte
:

Workbooks.OpenText FileName:= _
"Z:Import ClientSTOCK 98GENERAL 02.txt", Origin:=xlWindows, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True, Comma:úlse
_
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 1), Array(2,
1),
_
Array(3, 1), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1),
Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1),
Array(15, 1), Array( _
16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1),
Array(21, 1), Array(22, 1), _
Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1),
Array(28, 1))

De plus... Il semblerait que celà ne change pas grand chose à mon problème
car les données longues apparaissent alors directement en valeur
scientifique :
Par exemple : 1,23102E+11 est afficher dans ma cellule... et la valeur
de
la cellule est alors 1,23102E+11 et non plus 123102000000 comme
auparavant... :-(

Y'aurait il un moyen de convertir ces longues séries de chiffres en texte
?
J'ai fait un essai avec une boucle qui me parcourt toute la 4e colonne
pour
transformer la valeur en texte avec format... mais celà ne change rien.
Voici le code :

i = 7
Do
Cells(i, 4).Value = CStr(Format(Cells(i, 4).Value,
"#################"))
Application.StatusBar = i & " / " & iMax
i = i + 1
Loop Until Cells(i, 4).Value = ""

--
@+
HD





Avatar
HD
Ok. Merci Daniel.

Je vais tester ça lundi au boulot...

--
@+
HD
Avatar
Thierry
Bonjour,

a tu essayer d'élargir ta colonne ?

Cela m'arrive souvent et c'est juste que la colonne n'est pas assée large.
pour afficher le nombre.

Bon week-end.
Salutations,
Thierry.

"HD" a écrit dans le message de news:
es8vvk$34a$
Bonjour,

Pour une de mes macros, je dois ouvrir un fichier avec séparateur " ; ".
Jusque là tout fonctionne bien sauf que... Dans ma 4e colonne j'ai des
données numériques sur plus de 15 caractères d'où le fait que je me
retrouve

avec par exemple :
"1,23E+11" à la place de "123102000000". Lorsque j'ouvre le fichier
manuellement je peux bien sûr définir que la 4e colonne sera récupérée en
format texte... Mais le problème est que dans la fonction VBA je ne trouve
pas où préciser la chose. Et bien sûr il ne me sert à rien de définir
après

récupération des données que ma colonne 4 est en texte...

Merci d'avance pour votre aide
--
@+
HD




Avatar
HD
Le fait d'avoir codé Array(2, 2) me mets bien
la seconde colonne en format texte


Effectivement, celà fonctionne bien... Je comprend mieux maintenant à quoi
servent les Array...

Par contre, il m'a fallut virer le TrailingMinusNumbers:=True car il n'est
pas reconnu par mon vieu Excel97... A Quoi sert cette option ?

Avatar
HD
Celà aurait pu effectivement venir de celà... mais ce n'est pas le cas.
Daniel a trouvé la solution...

Merci quand même ;-)
--
@+
HD
Avatar
Daniel
Bonjour.
Je pense qu'il s'agit de considérer comme numériques les nombres ayant le
signe "-" à la fin.
La doc ne dit rien. L'aide de MS :
http://msdn2.microsoft.com/en-us/library/aa192231(office.10).aspx
me semble erronée (aurai-je gagné un T-shirt ?), qui parle de signe "-"
devant le nombre, alors que "trailing" signifie clairement "derrière".
Je ferai un test quand j'aurai le temps.
Cordialement.
Daniel
"HD" a écrit dans le message de news:
esgqne$2ap$
Le fait d'avoir codé Array(2, 2) me mets bien
la seconde colonne en format texte


Effectivement, celà fonctionne bien... Je comprend mieux maintenant à quoi
servent les Array...

Par contre, il m'a fallut virer le TrailingMinusNumbers:=True car il
n'est
pas reconnu par mon vieu Excel97... A Quoi sert cette option ?





Avatar
HD
Je pense qu'il s'agit de considérer comme
numériques les nombres ayant le signe "-" à la fin.


Intéressant... Car j'ai déja eû un étrange problème sur Excel avec des
graphiques crées sur Excel 97 dont les données apparaissent complétement
inversées sur un Excel 2003.

Exemple, j'ai << -12 693 >> sur Excel 97 et si j'ouvre le graphique sur
Excel 2003 la valeur m'apparaît en << 693 12 - >>. N'ayant jamais trouvé
d'où venait le problème, et personne ne connaissant ce problème sur le
newsgroup, j'ai dû me résoudre à supprimer tout mes graphiques pour les
recréer sous Excel 2003... Peut être était ce un bug non référencé ? :-(

--
@+
HD

1 2