OVH Cloud OVH Cloud

aide sur macro xls versus txt

3 réponses
Avatar
FLy
bonjour

en fouillant , je suis tomb=E9 sur cette macro de Charles Balch qui fait
pratiquement ce que je veux, a l'exception de 2 petites choses.

Avant de commencer, petite explication. Cette macro g=E9nere un fichier
txt avec une virgule comme s=E9parateur de colonne.

'adapter de la macro de Charles Balch.
Sub FichierTexte() 's=E9parateur de colonne "," Voir***
Dim Var As Object
Set Var =3D Application.InputBox(Prompt:=3D"S=E9lectionner votre zone:
(Ex. A1:B10) ", _
Title:=3D"S=E9lection de zone ", Default:=3D"$A$1", Type:=3D8)

FichierTXT =3D "C:\ajeter\essai.txt" '=E0 modifier


NbColonne =3D Var.Columns.Count
NbLigne =3D Var.Rows.Count
CalcState =3D Application.Calculation
StatusBarState =3D Application.DisplayStatusBar
Application.Calculation =3D xlManual
Calculate
Application.StatusBar =3D "Patientez SVP...cr=E9ation du fichier"


If Len(Dir(FichierTXT)) > 1 Then Kill FichierTXT
Open FichierTXT For Output As 1
'cr=E9ation du fichier texte
'Print #1, "Fichier texte cr=E9e =E0 partir du tableau Excel"
'Print #1, " - D=E9part du tableau - "
'Print #1, ""


While Row < NbLigne
Row =3D Row + 1
DoEvents
Application.StatusBar =3D Str$(Int((Row / NbLigne) * 100)) & "%
achev=E9"
If (Not Var.Rows(Row).Hidden) Then
MV =3D ""
Col =3D 0
While Col < NbColonne
Col =3D Col + 1
If (Not Var.Columns(Col).Hidden) Then
CellV =3D Var.Cells(Row, Col).Text
End If


MV =3D MV & CellA & "," & CellV
'*** changer ici le s=E9parateur & ","
Wend
Print #1, MV
End If
Wend


'Print #1, ""
'Print #1, " - Fin du tableau - "
'Print #1, "Nota: Fichier g=E9n=E9r=E9 par la macro de cr=E9ation de
fichier texte "
'Print #1, "Nota: Le s=E9parateur de colonne est la virgule "
Close
DoEvents
Application.Calculation =3D CalcState
Application.StatusBar =3D ""
Application.DisplayStatusBar =3D StatusBarState
End Sub

Ce que j'aimerais :
1- Cette macro g=E9nere une virgule au commencement et il n'y a pas de
virgule a la fin de la ligne. Comment faire le contraire ?
2- est-il possible de demander la localisation du fichier et le nom que
l'on veux lui donner

Mille Merci

3 réponses

Avatar
MichDenis
Essaie ceci :

'---------------------------------------
Sub SaveAsTextFile()

Dim Rg As Range, NomFichier As String
Dim Ligne As String
On Error Resume Next
With Worksheets("Feuil1")
Set Rg = Application.InputBox(Prompt:= _
"Sélectionner votre zone:" & _
"(Ex. A1:B10)", _
Title:="Sélection de zone ", _
Default:="$A$1", Type:=8)
End With
If Rg Is Nothing Then Exit Sub

NomFichier = Application.GetSaveAsFilename _
(InitialFileName:="nom_par_defaut.txt", _
fileFilter:="Text Files (*.txt), *.txt")
Dim c As Range
Open NomFichier For Output As #1
For Each r In Rg.Rows
For Each c In r.Cells
Ligne = Ligne & c.Text & ","
Next
Print #1, Ligne
Ligne = ""
Next
Close #1
End Sub
'---------------------------------------



"FLy" a écrit dans le message de news:

bonjour

en fouillant , je suis tombé sur cette macro de Charles Balch qui fait
pratiquement ce que je veux, a l'exception de 2 petites choses.

Avant de commencer, petite explication. Cette macro génere un fichier
txt avec une virgule comme séparateur de colonne.

'adapter de la macro de Charles Balch.
Sub FichierTexte() 'séparateur de colonne "," Voir***
Dim Var As Object
Set Var = Application.InputBox(Prompt:="Sélectionner votre zone:
(Ex. A1:B10) ", _
Title:="Sélection de zone ", Default:="$A$1", Type:=8)

FichierTXT = "C:ajeteressai.txt" 'à modifier


NbColonne = Var.Columns.Count
NbLigne = Var.Rows.Count
CalcState = Application.Calculation
StatusBarState = Application.DisplayStatusBar
Application.Calculation = xlManual
Calculate
Application.StatusBar = "Patientez SVP...création du fichier"


If Len(Dir(FichierTXT)) > 1 Then Kill FichierTXT
Open FichierTXT For Output As 1
'création du fichier texte
'Print #1, "Fichier texte crée à partir du tableau Excel"
'Print #1, " - Départ du tableau - "
'Print #1, ""


While Row < NbLigne
Row = Row + 1
DoEvents
Application.StatusBar = Str$(Int((Row / NbLigne) * 100)) & "%
achevé"
If (Not Var.Rows(Row).Hidden) Then
MV = ""
Col = 0
While Col < NbColonne
Col = Col + 1
If (Not Var.Columns(Col).Hidden) Then
CellV = Var.Cells(Row, Col).Text
End If


MV = MV & CellA & "," & CellV
'*** changer ici le séparateur & ","
Wend
Print #1, MV
End If
Wend


'Print #1, ""
'Print #1, " - Fin du tableau - "
'Print #1, "Nota: Fichier généré par la macro de création de
fichier texte "
'Print #1, "Nota: Le séparateur de colonne est la virgule "
Close
DoEvents
Application.Calculation = CalcState
Application.StatusBar = ""
Application.DisplayStatusBar = StatusBarState
End Sub

Ce que j'aimerais :
1- Cette macro génere une virgule au commencement et il n'y a pas de
virgule a la fin de la ligne. Comment faire le contraire ?
2- est-il possible de demander la localisation du fichier et le nom que
l'on veux lui donner

Mille Merci
Avatar
FLy
Super MichDenis

Un gros MERCI . Elle fonctionne bien et elle est plus courte que
l'original. Question comme ca ? Il y a surement un moyen de ne pas
sélectionner les cellules manuellement.


Essaie ceci :

'---------------------------------------
Sub SaveAsTextFile()

Dim Rg As Range, NomFichier As String
Dim Ligne As String
On Error Resume Next
With Worksheets("Feuil1")
Set Rg = Application.InputBox(Prompt:= _
"Sélectionner votre zone:" & _
"(Ex. A1:B10)", _
Title:="Sélection de zone ", _
Default:="$A$1", Type:=8)
End With
If Rg Is Nothing Then Exit Sub

NomFichier = Application.GetSaveAsFilename _
(InitialFileName:="nom_par_defaut.txt", _
fileFilter:="Text Files (*.txt), *.txt")
Dim c As Range
Open NomFichier For Output As #1
For Each r In Rg.Rows
For Each c In r.Cells
Ligne = Ligne & c.Text & ","
Next
Print #1, Ligne
Ligne = ""
Next
Close #1
End Sub
'---------------------------------------




Mille Merci


Avatar
MichDenis
Si tu connais d'avance la plage à exporter
dans ton fichier texte, essaie ceci :

'---------------------------------------
Sub SaveAsTextFile()

Dim Rg As Range, NomFichier As String
Dim Ligne As String
On Error Resume Next
With Worksheets("Feuil1") 'nom feuille à définir
Set Rg = .Range("A1:G25") 'plage à définir selon ton application
End With
If Rg Is Nothing Then Exit Sub

NomFichier = Application.GetSaveAsFilename _
(InitialFileName:="nom_par_defaut.txt", _
fileFilter:="Text Files (*.txt), *.txt")
Dim c As Range
Open NomFichier For Output As #1
For Each r In Rg.Rows
For Each c In r.Cells
Ligne = Ligne & c.Text & ","
Next
Print #1, Ligne
Ligne = ""
Next
Close #1
End Sub
'---------------------------------------



"FLy" a écrit dans le message de news:

Super MichDenis

Un gros MERCI . Elle fonctionne bien et elle est plus courte que
l'original. Question comme ca ? Il y a surement un moyen de ne pas
sélectionner les cellules manuellement.


Essaie ceci :

'---------------------------------------
Sub SaveAsTextFile()

Dim Rg As Range, NomFichier As String
Dim Ligne As String
On Error Resume Next
With Worksheets("Feuil1")
Set Rg = Application.InputBox(Prompt:= _
"Sélectionner votre zone:" & _
"(Ex. A1:B10)", _
Title:="Sélection de zone ", _
Default:="$A$1", Type:=8)
End With
If Rg Is Nothing Then Exit Sub

NomFichier = Application.GetSaveAsFilename _
(InitialFileName:="nom_par_defaut.txt", _
fileFilter:="Text Files (*.txt), *.txt")
Dim c As Range
Open NomFichier For Output As #1
For Each r In Rg.Rows
For Each c In r.Cells
Ligne = Ligne & c.Text & ","
Next
Print #1, Ligne
Ligne = ""
Next
Close #1
End Sub
'---------------------------------------




Mille Merci