Exportation texte sans délimiteur avec alignement à droite pour

Résolu/Fermé
hiphophi Messages postés 2 Date d'inscription samedi 11 novembre 2017 Statut Membre Dernière intervention 11 novembre 2017 - Modifié le 11 nov. 2017 à 17:09
Whismeril Messages postés 18015 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 décembre 2022 - 11 nov. 2017 à 13:36
Bonjour,

Mon but est de convertir un fichier excel en txt avec espaces sans séparateur pour faire un import ascii dans un logiciel comptable.
Après plusieurs recherches, j'ai trouvé ce langage qui fonctionne :

Sub xlsTOtxt()
 
Dim i As Long
 
FichierCible = Application.GetSaveAsFilename("monfichiertexte", "Fichier texte (*.txt), (*.txt)")
 
If FichierCible = False Then Exit Sub
 
Open FichierCible For Output As #1
 
If FichierCible <> False Then
 
For i = 1 To Range("A:A").End(xlDown).Row
 
Print #1, Left(Range("A" & i).Value, 1) & Space(1 - Len(Left(Range("A" & i).Value, 1))) & Left(Range("B" & i).Value, 8) & Space(8 - Len(Left(Range("B" & i).Value, 8))) & Left(Range("C" & i).Value, 2) & Space(2 - Len(Left(Range("C" & i).Value, 2))) & _
Left(Range("D" & i).Value, 9) & Space(9 - Len(Left(Range("D" & i).Value, 9))) & Left(Range("E" & i).Value, 21) & Space(21 - Len(Left(Range("E" & i).Value, 21))) & Left(Range("F" & i).Value, 2) & Space(2 - Len(Left(Range("F" & i).Value, 2))) & _
Left(Range("G" & i).Value, 12) & Space(12 - Len(Left(Range("G" & i).Value, 12))) & Left(Range("H" & i).Value, 52) & Space(52 - Len(Left(Range("H" & i).Value, 52))) & Left(Range("I" & i).Value, 3) & Space(3 - Len(Left(Range("I" & i).Value, 3))) & _
Left(Range("J" & i).Value, 3) & Space(3 - Len(Left(Range("J" & i).Value, 3))) & Left(Range("K" & i).Value, 1) & Space(1 - Len(Left(Range("K" & i).Value, 1))) & Left(Range("L" & i).Value, 11) & Space(11 - Len(Left(Range("L" & i).Value, 11))) & _
Left(Range("M" & i).Value, 23) & Space(23 - Len(Left(Range("M" & i).Value, 23)))
Next i
 
Close #1
 
MsgBox "Exportation réussie !"
End If
End Sub 


Cependant la valeur de la colonne G à l'origine est un chiffre et avec cette exportation
j'obtiens une série de chiffre collés vers la gauche sans décimales :
60012
40013
100025

alors qu' il faudrait :
600.12
400.13
1000.25

J'ai trouvé le langage VBA qui fonctionne pour cela :
Sub xlsTOtxt()
 
Dim i As Long
 
FichierCible = Application.GetSaveAsFilename("monfichiertexte", "Fichier texte (*.txt), (*.txt)")
 
If FichierCible = False Then Exit Sub
 
Open FichierCible For Output As #1
 
If FichierCible <> False Then
 
For i = 1 To Range("A:A").End(xlDown).Row
Print #1, Space(12 - Len(VBA.Format(Range("G" & i).Value, "0.00"))) & VBA.Format(Range("G" & i).Value, "0.00")
Next i
 
Close #1
 
MsgBox "Exportation réussie !"
End If
End Sub

Mais cela fonctionne que pour la seule colonne de chiffres, je n'arrive pas à rajouter des lignes supplémentaires de langage pour exporter les autres colonnes qui ne sont pas des chiffres mais composées d'une série de caractères.

Avez vous une idée ?
Je vous remercie bien par avance pour votre aide.

3 réponses

Bonjour,

Dans la sub xlsTOtxt() remplace tout simplement

Left(Range("G" & i).Value, 12) & Space(12 - Len(Left(Range("G" & i).Value, 12)))

par

Space(12 - Len(VBA.Format(Range("G" & i).Value, "0.00"))) & VBA.Format(Range("G" & i).Value, "0.00")
0
hiphophi Messages postés 2 Date d'inscription samedi 11 novembre 2017 Statut Membre Dernière intervention 11 novembre 2017
11 nov. 2017 à 13:32
Bonjour

ça fonctionne !
merci lundi je testerai au bureau l'importation dans mon logiciel comptable
Quadratus, je vais gagner beaucoup de temps de saisie ..
bon we
0
Whismeril Messages postés 18015 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 décembre 2022 876
11 nov. 2017 à 13:33
Bonjour

à tout hasard, Excel fait ça tout seul,
"Enregistrer sous" / "Autres formats" dans la liste Type choisir "Texte (séparateur:espace")
0
Whismeril Messages postés 18015 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 2 décembre 2022 876
11 nov. 2017 à 13:36
A la réflexion j'ai peut être mal interprété la question, s'il s'agit de champs à largeur fixe, il faut bien une macro de ce type.
0