Exporter les résultats dans un fichier texte - Mise en page

Résolu
mdeg Messages postés 28 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 avril 2010 - 19 avril 2010 à 13:00
mdeg Messages postés 28 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 avril 2010 - 19 avril 2010 à 15:39
Bonjour,

J'ai réalisé des calculs dans une macro vba, puis maintenant je souhaite écrire les résultats intermédiaires et finaux dans un fichier texte.
Les résultats à écrire dans le fichier texte sont soit des matrices (tableaux), des valeurs simples, des valeurs de textbox.

Je bloque sur la mise en page du fichier excel. Par exemple pour un tableau je souhaiterais que toutes les données soient alignées en colonne (avec une tabulation), mais je n'y arrive pas.

Voilà mon code :
CommonDialog1.Filter = ".txt"
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1

Print #1, "Liste des points homologues"

Print #1,

Dim Entete_tab1 As String
Entete_tab1 = "N°" & vbTab & "x FDP(m)" & vbTab & "y FDP(m)" & vbTab & "E GPS(m)" & vbTab & "N GPS(m)"
Print #1, Entete_tab1

Dim i As Integer
For i = 0 To UserForm_Accueil.ListBox_Points_Homologues.ListCount - 1
Print #1, UserForm_Accueil.ListBox_Points_Homologues.List(i, 0) & vbTab & FormatNumber(UserForm_Accueil.ListBox_Points_Homologues.List(i, 1), 4, vbTrue) & vbTab & FormatNumber(UserForm_Accueil.ListBox_Points_Homologues.List(i, 2), 4, vbTrue) & vbTab & FormatNumber(UserForm_Accueil.ListBox_Points_Homologues.List(i, 3), 4, vbTrue) & vbTab & FormatNumber(UserForm_Accueil.ListBox_Points_Homologues.List(i, 4), 4, vbTrue)
Next i

Print #1,

Print #1, "Coordonnées du barycentre des points homologues"

Print #1, "X barycentre (m) = " & FormatNumber(TxtB_Xb.Value, 4, vbTrue)
Print #1, "Y barycentre (m) = " & FormatNumber(TxtB_Yb.Value, 4, vbTrue)
Print #1, "E barycentre (m) = " & FormatNumber(TxtB_Eb.Value, 4, vbTrue)
Print #1, "N barycentre (m) = " & FormatNumber(TxtB_Nb.Value, 4, vbTrue)

Print #1,

Print #1, "Translations"

Print #1, "en X (m) = " & FormatNumber(-TxtB_Xb.Value, 4, vbTrue)
Print #1, "en Y (m) = " & FormatNumber(-TxtB_Yb.Value, 4, vbTrue)
Print #1, "en E (m) = " & FormatNumber(-TxtB_Eb.Value, 4, vbTrue)
Print #1, "en N (m) = " & FormatNumber(-TxtB_Nb.Value, 4, vbTrue)

Print #1,

Print #1, "Coordonnées des points homologues aprés soustraction du barycentre"

Print #1, Entete_tab1

For i = 0 To LstB_Pts_Hom_Bary.ListCount - 1
Print #1, LstB_Pts_Hom_Bary.List(i, 0) & vbTab & FormatNumber(LstB_Pts_Hom_Bary.List(i, 1), 4, vbTrue) & vbTab & FormatNumber(LstB_Pts_Hom_Bary.List(i, 2), 4, vbTrue) & vbTab & FormatNumber(LstB_Pts_Hom_Bary.List(i, 3), 4, vbTrue) & vbTab & FormatNumber(LstB_Pts_Hom_Bary.List(i, 4), 4, vbTrue)
Next i

Close #1


Le résultat obtenu est le suivant :

Liste des points homologues

N°	x FDP(m)	y FDP(m)	E GPS(m)	N GPS(m)
1	85,7229	67,4117	1 002 000,0000	113 500,0000
2	85,7067	20,1816	1 002 000,0000	113 000,0000
3	10,1344	20,2246	1 001 200,0000	113 000,0000
4	38,4709	29,6488	1 001 500,0000	113 100,0000

Coordonnées du barycentre des points homologues
X barycentre (m) = 55,0090
Y barycentre (m) = 34,3670
E barycentre (m) = 1 001 675,0000
N barycentre (m) = 113 150,0000

Translations
en X (m) = -55,0090
en Y (m) = -34,3670
en E (m) = -1 001 675,0000
en N (m) = -113 150,0000

Coordonnées des points homologues aprés soustraction du barycentre
N°	x FDP(m)	y FDP(m)	E GPS(m)	N GPS(m)
1	30,7139	33,0447	325,0000	350,0000
2	30,6977	-14,1854	325,0000	-150,0000
3	-44,8746	-14,1424	-475,0000	-150,0000
4	-16,5381	-4,7182	-175,0000	-50,0000



Pour le dernier tableaux, la mise en page c'est du grand n'importe quoi.

Est ce que vous avez une solution à ce probléme?

De plus je suis preneuse de toute suggestion pour améliorer ce code, notamment passer une ligne etc... Car je n'ai pas trouvé grand chose sur le net, donc je me suis débrouillée avec les seules commandes que je connaissais...

Merci

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 avril 2010 à 15:19
Oui, mais ce n'est qu'une solution (les chaines à longueur fixe).
Tu peux très bien faire la même chose avec des String classiques et jongler avec les instructions de 'remplissage' comme String (oui, c'est aussi une fonction) ou Space.

Exemple qui écrit une chaine de longueur désirée :
Debug.Print ">";Left$("MonTexte" & Space$(Largeur), Largeur);"<"
ou
Debug.Print ">";Right$(Space$(Largeur) & "MonTexte", Largeur);"<"
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 avril 2010 à 13:19
Salut
C'est normal.
Les tabulations correspondent à des emplacements, par exemple, tous les 10 caractères.
Quand tu ajoutes une tabulation à un texte de 7 carctères, le prochain caractère se placera en 10.
Mais si ton premier texte fait 11 caractères, la prochaine tabulation se retrouve en 20.
D'où le décalage observé dans NotePad.
Par contre, le fichier sera compatible avec un import Excel CSV, par exemple.

Si tu veux placer des textes à des emplacements (colonne) précis et toujours les mêmes, tu ne pourras pas le faire avec des tabulations; il te faut gérer des espaces.
Exemple pour formater une colonne de 20 caractères (texte ou espaces complémentaires)
Dim sTemp1 As String*20
Dim sTemp2 As String*10
Dim sTemp3 As String*3
sTemp1 = "Coucou 1"
sTemp2 = "Coucou 2"
sTemp3 = "Coucou 3"

s'affera comme ceci :
....'....1....'....2....'....3....'....4....'....5
Coucou              Coucou    Cou

A toi de t'en inspirer pour gérer tes colonnes en fonction de leur largeur maximum

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
mdeg Messages postés 28 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 avril 2010
19 avril 2010 à 14:47
Bjr,

Ah d'accord, je comprends pourquoi tout est décalé.
Mais du coup ça devient trés contraignant d'exporter dans un fichier texte s'il faut une variable par colonne...

Merci
0
mdeg Messages postés 28 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 avril 2010
19 avril 2010 à 15:39
Bjr,

Oui effectivement avec ces fonctions il y a moyen de mettre en page les tableaux plus facilement. Je ne les connaissais pas.
Merci beaucoup!
0
Rejoignez-nous