Export au format txt avec concaténation

  • Initiateur de la discussion Reckless
  • Date de début
R

Reckless

Guest
Bonjour le Forum,

Je dispose d'un fichier excel contenant de nombreuses feuilles. Dans chaque feuille, 3 colonnes sont renseignées: clé, valeur en français et valeur en anglais.
J'aimerais créer deux fichiers txt par feuille, le premier contenant toutes les lignes clé '=' valeur en rançais et le second contenant clé '=' valeur en anglais...
Pour l'instant tout ce que j'arrive à faire c'est concaténer les différentes colonnes.
Quelqu'un pourrait-il me mettre sur la bonne piste?
Merci
 

Hervé

XLDnaute Barbatruc
Bonjour reckless

ta demande manque un peu de précision.

je suis parti du postulat que ta clé est en colonne 1, le francais en 2 et l'anglais en 3.

ce code crée automatiquement un fichier txt en racine en lui donnant le nom de la feuille suivi de francais ou anglais.


Sub Bouton1_QuandClic()
Dim Fichier As String, nom As String
Dim tablo As Variant
Dim ws As Worksheet
Dim i As Byte, colonne As Byte
Dim j As Integer

For Each ws In Worksheets
tablo = ws.Range('a1').CurrentRegion
For i = 1 To 2
If i = 1 Then
nom = 'francais': colonne = 2
Else
nom = 'anglais': colonne = 3
End If
Fichier = 'C:\\\\\\\\' & ws.Name & nom & ' .Txt'
Open Fichier For Output As #1
For j = 1 To UBound(tablo)
Print #1, tablo(j, 1) & '=' & tablo(j, colonne)
Next j
Close
Next i
Next ws

End Sub

salut

Message édité par: hervé, à: 27/03/2006 17:25
 

vekmort

XLDnaute Occasionnel
Bonjour,

J'avais créé une macro, mais j'ai enregistré mon fichier au format '.txt'. Du coup, plus de Macro... Je vois que de toutes façons Hervé a fait un truc très bien avec le même postulat que moi sur les colonnes...
Bon courage,

Je l'aurais bien refaite, mais je suis trop long... Et puis la journée sur écran se termine...

Vekmort :sick:
 
R

Reckless

Guest
Bonjour vekmort et Hervé,

Merci Hervé!
Ton postulat était correct et ton code est parfait. Merci beaucoup.

J'avais commencé ma macro, mais je faisais un select de chaque cell avant de la traiter. Je suppose que mon traitement aurait été beaucoup plus long.... :eek:

Mes feuilles excel ont quelques lignes blanches (id lignes avec des cellules vides), j'aimerai que ces lignes provoquent un simple retour à la ligne dans le fichier txt. Saurais-tu comment faire cela ? (pour l'instant le calcul du UBound s'arrête à la première cellule vide)

Merci
 

Hervé

XLDnaute Barbatruc
bonjour reckless, vekmort, le forum

peut etre comme ceci :


Sub Bouton1_QuandClic()
Dim Fichier As String, nom As String
Dim tablo As Variant
Dim ws As Worksheet
Dim i As Byte, colonne As Byte
Dim j As Integer

For Each ws In Worksheets
tablo = ws.Range('a1:c' & ws.Range('a65536').End(xlUp).Row)
For i = 1 To 2
If i = 1 Then
nom = 'francais': colonne = 2
Else
nom = 'anglais': colonne = 3
End If
Fichier = 'C:\\\\\\\\' & ws.Name & nom & ' .Txt'
Open Fichier For Output As #1
For j = 1 To UBound(tablo)
If Not tablo(j, 1) = '' And Not tablo(j, colonne) = '' Then
Print #1, tablo(j, 1) & '=' & tablo(j, colonne)
End If
Next j
Close
Next i
Next ws

End Sub


salut

Message édité par: hervé, à: 28/03/2006 15:12
 
R

Reckless

Guest
Bonjour Hervé, le forum

Oui ça a l'air de bien fonctionner. Merci.

Pour ma culture personnelle, comment fonctionne cette commande:
Code:
tablo = ws.Range('a1:c' & ws.Range('a65536').End(xlUp).Row)

Si je veux obtenir la dernière cellule non-vide de la colonne B, quelle est la commande?
Merci.
 

Hervé

XLDnaute Barbatruc
re reckless, vekmort, le forum

cette ligne, alimente une variable tableau (tablo) avec la plage a1:c...jusqu'a la derniere cellule non vide de la colonne B

si tu veux tester la colonne B, remplace a65536 par b65536.

pour ma culture personnelle egalement, pourrais-je savoir combien d'onglet tu as dans ton fichier, le nombre de lignes par onglet environ, et le temps que met se code pour créer les txt.

je suis curieux de connaitre la rapidité de se code que je n'ai pas testé.

d'avance merci de me tenir au courant.

salut
 
R

Reckless

Guest
Bonjour à tous,

Hervé, mon fichier possède 49 feuilles, le nombre de lignes par feuille est très variable, mais le nombre total de lignes est de presque 2700 pour l'instant.
L'opération s'effectue en moins d'une seconde pour ces valeurs. Je disposerai de plus de valeurs bientôt...

Tout semble fonctionner au mieux.
J'ai un dernier souci concernant un couple de cellules contenant un texte de la forme '-blabla1\\n-blabla2\\n-blabla3\\n'.
Ce texte est considéré comme une formule de calcul par Excel, je crois. Je peux m'en affranchir en ajoutant un caractère ' devant chaque caractère -, mais mon fichier de résultat se trouve alors pollué par des caractères ' intempestifs.

Hervé, je te dois une fière chandelle.
Merci d'avoir passé du temps et de l'énergie pour ce coup de main.
 
R

Reckless

Guest
Petit correctif quant à mon dernier souci de caractères ' intempestifs:
il suffit de placer un seul caratère ' devant le premier caractère - pour qu'Excel considère cette cellule ne contient pas de formule.

En clair, je remplace '-blabla1\\n-blabla2\\n-blabla3\\n' par ''-blabla1\\n-blabla2\\n-blabla3\\n'.

Et je n'ai plus de caractères intempestifs en résultat.

Merci encore Hervé.
 

Discussions similaires

Réponses
4
Affichages
300

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal