mdeg
Messages postés28Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention29 avril 2010
-
19 avril 2010 à 13:00
mdeg
Messages postés28Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention29 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
A voir également:
Exporter les résultats dans un fichier texte - Mise en page
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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);"<"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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"
mdeg
Messages postés28Date d'inscriptionmercredi 31 mars 2010StatutMembreDernière intervention29 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...