Menu

Exportation texte sans délimiteur avec alignement à droite pour [Résolu]

hiphophi 2 Messages postés samedi 11 novembre 2017Date d'inscription 11 novembre 2017 Dernière intervention - 11 nov. 2017 à 11:25 - Dernière réponse : Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

0
Merci
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")
Commenter la réponse de Yoda
hiphophi 2 Messages postés samedi 11 novembre 2017Date d'inscription 11 novembre 2017 Dernière intervention - 11 nov. 2017 à 13:32
0
Merci
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
Commenter la réponse de hiphophi
Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 11 nov. 2017 à 13:33
0
Merci
Bonjour

à tout hasard, Excel fait ça tout seul,
"Enregistrer sous" / "Autres formats" dans la liste Type choisir "Texte (séparateur:espace")
Whismeril 11642 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 juin 2018 Dernière intervention - 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.
Commenter la réponse de Whismeril