Signaler

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

Posez votre question hiphophi 2Messages postés samedi 11 novembre 2017Date d'inscription 11 novembre 2017 Dernière intervention - Dernière réponse le 11 nov. 2017 à 13:36 par Whismeril
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.
Utile
+0
plus moins
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")
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
Bonjour

à tout hasard, Excel fait ça tout seul,
"Enregistrer sous" / "Autres formats" dans la liste Type choisir "Texte (séparateur:espace")
Whismeril 10272Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 11 novembre 2017 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.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !