Enregistrer Excel en txt sans fermer le fichier Excel encours
s
Bonsoir
quand j'enregistre une feuille de mon classeur excel en fichier txt , je reçois un message comme quoi des données incompatibles, je clique oui et le fichier excel sur le quel je travaillait se ferme et seule s'affiche la feuille convertie en Txt.
y a t il un moyen par macro ou autre pour que
- la feuille s'enregistre en txt (mais ne s'affiche pas )
- Mon fichier excel reste toujours ouvert
Merci
T
Bonjour,
Une piste. La feuille visée (voir la variable NomFeuille) est copiée, ses formules sont supprimées et les valeurs sont inscrites par l'intermédiaire d'un tableau et séparées par des point-virgules :
Sub FichierTexte()
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range
Dim Tbl() As String
Dim Ligne As String
Dim Dossier As String
Dim FichierTXT As String
Dim NomFeuille As String
Dim I As Long
Dim J As Long
Dossier = ThisWorkbook.Path & "\"
FichierTXT = "Nom du fichier Texte.txt"
NomFeuille = "Feuil1"
'gèle l'affichage
Application.ScreenUpdating = False
'copie la feuille afin de préserver l'originale
Worksheets(NomFeuille).Copy , Sheets(Sheets.Count)
'utilise une variable
Set Fe = Worksheets(Sheets.Count)
'défini la plage sur toute la feuille
Set Plage = DefPlage(Fe, 1, 1)
'supprime les formules
Plage.Value = Plage.Value
'redéfini la plage sur les valeurs en "dur"
Set Plage = DefPlage(Fe, 1, 1)
'crée les lignes pour les enregistrements tabulés avec comme séparateur le ;
For I = 1 To Plage.Rows.Count: For J = 1 To Plage.Columns.Count
Ligne = Ligne & Plage(I, J).Value & ";"
Next J
'supprime le ; de fin
Ligne = Left(Ligne, Len(Ligne) - 1)
'stocke dans un tableau
ReDim Preserve Tbl(1 To I)
Tbl(I) = Ligne
'pour la suivante
Ligne = ""
Next I
'création du fichier .csv
Open Dossier & FichierTXT For Output As #1
For I = 1 To UBound(Tbl): Print #1, Tbl(I): Next I
Close #1
'suspension du message d'alerte
Application.DisplayAlerts = False
Fe.Delete 'suppression de la feuille
ThisWorkbook.Save 'enregistre
Application.DisplayAlerts = True
'réactive la feuille
Worksheets(NomFeuille).Activate
'rétabli
Application.ScreenUpdating = True
End Sub
Function DefPlage(Fe As Worksheet, L As Long, C As Long) As Range
On Error GoTo Fin
With Fe
Set DefPlage = .Range(.Cells(L, C), _
.Cells(.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
Exit Function
Fin:
Set DefPlage = Nothing
End Function