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

VBA - lecture d'un fichier texte

2 réponses
Avatar
René Roy
Bonjour à toutes et à tous,

Avec VBA - Excel 2003 (mais je dois considérer exécuter mon classeur sur des
versions moins récentes), je cherche comment je peux lire les 3 premières
lignes d'un fichier texte. Ce fichier contient quelque chose comme:

"Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre
d'activité";"Nature
objet";"Objet";"Compte";"Description";Montant1;Montant2;Montant3;Montant4;Montant5;Montant6;Montant7;Montant8;
"2005-11-24";"1";"02";"8";"3";"0";"0283000";"0";"000";"02-830-00-000";"DESCRIPTION DU POSTE";1000.00;950.00;1025.00;0.00;1000.00;9750.00;0.00;0.00;

J'ai essayé avec cette proc trouvée sur l'excellent site du non moins
excellent Frederic Sigonneau:

Sub lirefichier()

Dim NomDeFichier As String
Dim NoFichier As Integer
Dim LongueurFichier As Long
Dim MaVariable As String

NomDeFichier = "C:\Documents and Settings\rener.LAPTOP05\Mes
documents\_BSA\Export_budget_bouche.dat"
NoFichier = FreeFile()
'Ouvre le fichier en mode lecture.
Open NomDeFichier For Input As #NoFichier
LongueurFichier = FileLen(NomDeFichier)
MaVariable = Input(LongueurFichier, NoFichier)
Close NoFichier
Stop
'Tout le fichier se trouve dans la variable MaVariable
'qu'il suffit de décortiquer et de répartir à votre gré
'dans le classeur.
'Par exemple, pour voir les 30 premiers caractères dans la
'fenêtre exécution:
Debug.Print Mid(MaVariable, 1, 10000)

End Sub

Cependant, je ne réussi qu'à obtenir ceci:

""Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre d'activité";"Nature objet";"Objet";"Compte";"Description";Montant1;Montan"

Mon objectif: Je dois trouver la première valeur sous la colonne Fonction.
Cette valeur en format texte dans le fichier a une longueur que je veux
restituer à l'ensemble de la colonne lorsque le fichier sera ouvert dans
Excel.

La raison: Excel convertit systématiquement les valeurs de cette colonne en
valeurs numériques alors que je dois conserver le format texte. Étant donné
que certaines valeurs ressemblent à "0283000", excel m'affiche 283000. Mais
j'ai besoin de "0283000".

Mon problème: Le nombre de colonnes du fichier importé est variable. La
colonne peut avoir un titre différent de mon exemple (Fonction). La position
de la colonne Fonction peut variée d'un fichier à un autre. Le nombre total
de colonnes peut varier d'un fichier à un autre.

C'est pourquoi j'aimerais savoir comment ouvrir en format texte, calculer la
longueur des valeurs (nbcar) de la première ligne de valeurs pour les
premières colonnes jusqu'à la colonne "Compte". Avec ces infos mémorisées en
variables, je pourrai ouvrir le fichier puis tranformer les valeurs au format
texte à la longueur prévue.

Je ne sais pas si mais explications sont claires. Toute piste de solution
sera grandement apprécié.

Merci à l'avance.

René

2 réponses

Avatar
FxM
Bonsoir,

Pour ce qui est de séparer "a";"b";"c" en différentes variables, il y a
par exemple split (Excel 2k et +). Exemple -> tablo = split(texte,";").
Chez frederic, tu trouveras un équivalent pour Excel 97
http://frederic.sigonneau.free.fr

Pour ce qui est de garder "03" comme "03" et non 3, tu peux ajouter une
apostrophe devant la variable variable = "'" & ...

Il est quelque peu difficile de trouver ce que contient chaque ligne.
Pourrais-tu mettre une dizaine de lignes de ton fichier sur cjoint.com
afin d'y jeter un oeil sur des données réelles ?

@+
FxM


Bonjour à toutes et à tous,

Avec VBA - Excel 2003 (mais je dois considérer exécuter mon classeur sur des
versions moins récentes), je cherche comment je peux lire les 3 premières
lignes d'un fichier texte. Ce fichier contient quelque chose comme:

"Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre
d'activité";"Nature
objet";"Objet";"Compte";"Description";Montant1;Montant2;Montant3;Montant4;Montant5;Montant6;Montant7;Montant8;
"2005-11-24";"1";"02";"8";"3";"0";"0283000";"0";"000";"02-830-00-000";"DESCRIPTION DU POSTE";1000.00;950.00;1025.00;0.00;1000.00;9750.00;0.00;0.00;

J'ai essayé avec cette proc trouvée sur l'excellent site du non moins
excellent Frederic Sigonneau:

Sub lirefichier()

Dim NomDeFichier As String
Dim NoFichier As Integer
Dim LongueurFichier As Long
Dim MaVariable As String

NomDeFichier = "C:Documents and Settingsrener.LAPTOP05Mes
documents_BSAExport_budget_bouche.dat"
NoFichier = FreeFile()
'Ouvre le fichier en mode lecture.
Open NomDeFichier For Input As #NoFichier
LongueurFichier = FileLen(NomDeFichier)
MaVariable = Input(LongueurFichier, NoFichier)
Close NoFichier
Stop
'Tout le fichier se trouve dans la variable MaVariable
'qu'il suffit de décortiquer et de répartir à votre gré
'dans le classeur.
'Par exemple, pour voir les 30 premiers caractères dans la
'fenêtre exécution:
Debug.Print Mid(MaVariable, 1, 10000)

End Sub

Cependant, je ne réussi qu'à obtenir ceci:

""Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre d'activité";"Nature objet";"Objet";"Compte";"Description";Montant1;Montan"

Mon objectif: Je dois trouver la première valeur sous la colonne Fonction.
Cette valeur en format texte dans le fichier a une longueur que je veux
restituer à l'ensemble de la colonne lorsque le fichier sera ouvert dans
Excel.

La raison: Excel convertit systématiquement les valeurs de cette colonne en
valeurs numériques alors que je dois conserver le format texte. Étant donné
que certaines valeurs ressemblent à "0283000", excel m'affiche 283000. Mais
j'ai besoin de "0283000".

Mon problème: Le nombre de colonnes du fichier importé est variable. La
colonne peut avoir un titre différent de mon exemple (Fonction). La position
de la colonne Fonction peut variée d'un fichier à un autre. Le nombre total
de colonnes peut varier d'un fichier à un autre.

C'est pourquoi j'aimerais savoir comment ouvrir en format texte, calculer la
longueur des valeurs (nbcar) de la première ligne de valeurs pour les
premières colonnes jusqu'à la colonne "Compte". Avec ces infos mémorisées en
variables, je pourrai ouvrir le fichier puis tranformer les valeurs au format
texte à la longueur prévue.

Je ne sais pas si mais explications sont claires. Toute piste de solution
sera grandement apprécié.

Merci à l'avance.

René


Avatar
Daniel
Bonsoir.
Essaie :

Sub lirefichier()

Dim NomDeFichier As String
Dim NoFichier As Integer
Dim MaVariable As String
Dim Tablo

'NomDeFichier = "C:Documents and Settingsrener.LAPTOP05Mes "
'documents_BSAExport_budget_bouche.dat"
NomDeFichier = "e:donneesdanielmpfetest1.txt"
NoFichier = FreeFile()
'Ouvre le fichier en mode lecture.
Open NomDeFichier For Input As #NoFichier
For i = 1 To 3
Line Input #NoFichier, MaVariable
MaVariable = Replace(MaVariable, """", "")
Tablo = Split(MaVariable, ";")
For x = 0 To UBound(Tablo)
Cells(i, x + 1) = Tablo(x)
Next x
Next i
Close NoFichier
Stop
End Sub

Cordialement.
Daniel

"René Roy" (sanssapm)> a écrit dans le message de news:

Bonjour à toutes et à tous,

Avec VBA - Excel 2003 (mais je dois considérer exécuter mon classeur sur
des
versions moins récentes), je cherche comment je peux lire les 3 premières
lignes d'un fichier texte. Ce fichier contient quelque chose comme:

"Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre
d'activité";"Nature
objet";"Objet";"Compte";"Description";Montant1;Montant2;Montant3;Montant4;Montant5;Montant6;Montant7;Montant8;
"2005-11-24";"1";"02";"8";"3";"0";"0283000";"0";"000";"02-830-00-000";"DESCRIPTION
DU POSTE";1000.00;950.00;1025.00;0.00;1000.00;9750.00;0.00;0.00;

J'ai essayé avec cette proc trouvée sur l'excellent site du non moins
excellent Frederic Sigonneau:

Sub lirefichier()

Dim NomDeFichier As String
Dim NoFichier As Integer
Dim LongueurFichier As Long
Dim MaVariable As String

NomDeFichier = "C:Documents and Settingsrener.LAPTOP05Mes
documents_BSAExport_budget_bouche.dat"
NoFichier = FreeFile()
'Ouvre le fichier en mode lecture.
Open NomDeFichier For Input As #NoFichier
LongueurFichier = FileLen(NomDeFichier)
MaVariable = Input(LongueurFichier, NoFichier)
Close NoFichier
Stop
'Tout le fichier se trouve dans la variable MaVariable
'qu'il suffit de décortiquer et de répartir à votre gré
'dans le classeur.
'Par exemple, pour voir les 30 premiers caractères dans la
'fenêtre exécution:
Debug.Print Mid(MaVariable, 1, 10000)

End Sub

Cependant, je ne réussi qu'à obtenir ceci:

""Fichier pour le budget Excel";"2006-06-02 13:30:06";"ADMINISTRATEUR DU
SYSTÈME";"8";
"Création";"Organisme";"Groupe";"Fonction";"Activité";"Sous-activité";"Centre
d'activité";"Nature objet";"Objet";"Compte";"Description";Montant1;Montan"

Mon objectif: Je dois trouver la première valeur sous la colonne Fonction.
Cette valeur en format texte dans le fichier a une longueur que je veux
restituer à l'ensemble de la colonne lorsque le fichier sera ouvert dans
Excel.

La raison: Excel convertit systématiquement les valeurs de cette colonne
en
valeurs numériques alors que je dois conserver le format texte. Étant
donné
que certaines valeurs ressemblent à "0283000", excel m'affiche 283000.
Mais
j'ai besoin de "0283000".

Mon problème: Le nombre de colonnes du fichier importé est variable. La
colonne peut avoir un titre différent de mon exemple (Fonction). La
position
de la colonne Fonction peut variée d'un fichier à un autre. Le nombre
total
de colonnes peut varier d'un fichier à un autre.

C'est pourquoi j'aimerais savoir comment ouvrir en format texte, calculer
la
longueur des valeurs (nbcar) de la première ligne de valeurs pour les
premières colonnes jusqu'à la colonne "Compte". Avec ces infos mémorisées
en
variables, je pourrai ouvrir le fichier puis tranformer les valeurs au
format
texte à la longueur prévue.

Je ne sais pas si mais explications sont claires. Toute piste de solution
sera grandement apprécié.

Merci à l'avance.

René