Le texte mis en forme (.prn) est limité à 240 caractères par ligne dans Excel

Symptômes

Dans Microsoft Excel, lorsque vous enregistrez une feuille de calcul en tant que fichier Texte mis en forme (espace délimité) (.prn), tous les caractères au-delà du quarantième caractère sont encapsulés à la ligne suivante.

Remarque

Si plusieurs lignes d’une même feuille contiennent du texte au-delà de 240 caractères, le texte commence à être habillage à la ligne après la dernière ligne qui contient du texte.

Par exemple, considérez la feuille suivante :

Cell Number of Characters
A1 40
A2 255
A3 10
A4 21
A5 2
A6 52
A7 255
A8 5
A9 3
A20 13

Le fichier texte mis en forme obtenu contient des lignes avec le nombre de caractères suivant :

Numéro de ligne Caractères
1 40
2 240
3 10
4 21
5 2
6 52
7 240
8 5
9 3
10-19 0
20 13
21 0
22 15
23-26 0
27 15

Après la dernière ligne (dans cet exemple, la ligne 20), la numérotation des lignes commence à 1 pour les lignes qui sont encapsulées. En effet, la ligne 21 correspond à la ligne 1, la ligne 22 correspond à la ligne 2, et ainsi de suite.

Cause

Ce comportement se produit parce que, par nature, les fichiers texte mis en forme (délimité par des espaces) (.prn) ont une limite de 240 caractères par ligne.

Solution de contournement

Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques. Pour créer un fichier texte délimité par des espaces qui dépasse la limite de 240 caractères par ligne, utilisez une macro similaire à l’exemple de macro suivant.

Remarque

Avant d’exécuter cette macro, procédez comme suit :

  • Sélectionnez les cellules à inclure dans le fichier texte.
  • Vérifiez que les largeurs de colonne sont suffisamment larges pour afficher la plus grande chaîne dans chaque colonne. La largeur maximale d’une colonne Excel est de 255 caractères lorsqu’elle est mise en forme avec une police à largeur fixe.
  • Utilisez les commandes de menu Style pour mettre en forme la feuille de calcul afin qu’elle utilise une police à largeur fixe. Par exemple, Courier est une police à largeur fixe.

L’exemple de code suivant peut être modifié pour exporter des données délimitées par des caractères autres qu’un espace. Vous devez sélectionner la plage de données à exporter avant d’exécuter cet exemple de macro.

Sub ExportText()

Dim delimiter As String
   Dim quotes As Integer
   Dim Returned As String

       delimiter = " "

       quotes = MsgBox("Surround Cell Information with Quotes?", vbYesNo)

' Call the WriteFile function passing the delimiter and quotes options.
      Returned = WriteFile(delimiter, quotes)

' Print a message box indicating if the process was completed.
      Select Case Returned
         Case "Canceled"
            MsgBox "The export operation was canceled."
         Case "Exported"
            MsgBox "The information was exported."
      End Select

End Sub

'------------------------------------------------------------

Function WriteFile(delimiter As String, quotes As Integer) As String

  ' Dimension variables to be used in this function.
   Dim CurFile As String
   Dim SaveFileName
   Dim CellText As String
   Dim RowNum As Integer
   Dim ColNum As Integer
   Dim FNum As Integer
   Dim TotalRows As Double
   Dim TotalCols As Double

   ' Show Save As dialog box with the .TXT file name as the default.
   ' Test to see what kind of system this macro is being run on.
   If Left(Application.OperatingSystem, 3) = "Win" Then
      SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "Text Delimited (*.txt), *.txt", , "Text Delimited Exporter")
   Else
       SaveFileName = Application.GetSaveAsFilename(CurFile, _
      "TEXT", , "Text Delimited Exporter")
   End If

   ' Check to see if Cancel was clicked.
      If SaveFileName = False Then
         WriteFile = "Canceled"
         Exit Function
      End If
   ' Obtain the next free file number.
      FNum = FreeFile()

   ' Open the selected file name for data output.
      Open SaveFileName For Output As #FNum

   ' Store the total number of rows and columns to variables.
      TotalRows = Selection.Rows.Count
      TotalCols = Selection.Columns.Count

   ' Loop through every cell, from left to right and top to bottom.
      For RowNum = 1 To TotalRows
         For ColNum = 1 To TotalCols
            With Selection.Cells(RowNum, ColNum)
            Dim ColWidth as Integer
            ColWidth=Application.RoundUp(.ColumnWidth, 0)
            ' Store the current cells contents to a variable.
            Select Case .HorizontalAlignment
               Case xlRight
                  CellText = Space(Abs(ColWidth - Len(.Text))) & .Text
               Case xlCenter
                  CellText = Space(Abs(ColWidth - Len(.Text))/2) & .Text & _
                             Space(Abs(ColWidth - Len(.Text))/2)
               Case Else
                  CellText = .Text & Space(Abs(ColWidth - Len(.Text)))
            End Select
            End With
   ' Write the contents to the file.
   ' With or without quotation marks around the cell information.
            Select Case quotes
               Case vbYes
                  CellText = Chr(34) & CellText & Chr(34) & delimiter
               Case vbNo
                  CellText = CellText & delimiter
            End Select
            Print #FNum, CellText;

   ' Update the status bar with the progress.
            Application.StatusBar = Format((((RowNum - 1) * TotalCols) _
               + ColNum) / (TotalRows * TotalCols), "0%") & " Completed."

   ' Loop to the next column.
         Next ColNum
   ' Add a linefeed character at the end of each row.
         If RowNum <> TotalRows Then Print #FNum, ""
   ' Loop to the next row.
      Next RowNum

   ' Close the .prn file.
      Close #FNum

   ' Reset the status bar.
      Application.StatusBar = False
      WriteFile = "Exported"
   End Function

Remarque

Le fichier de sortie créé par cette routine est, par définition, différent d’un fichier Texte mis en forme (*.prn). Par définition, le fichier texte mis en forme ne peut pas contenir plus de 240 caractères par ligne. En outre, le fichier texte mis en forme contient également des informations sur la police de l’imprimante. Cet exemple de macro ne le fait pas. Cette solution est conçue pour offrir une flexibilité lors de l’exportation vers des fichiers texte.