Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

ouverture de fichier texte sur excel

  • Initiateur de la discussion Initiateur de la discussion sylv900
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sylv900

XLDnaute Occasionnel
salut à tous
j'ai un problème lors de l'ouverture d'un fichier texte, ce fichier est soit à séparateur espace, soit tabulation, soit alignié à gauche soit à droite.
après avoir ouvert ce fichier mon code traite les cellule dans un ordre précis, il faut donc absolument qu'il est la même forme...
j'utilisait ce code (pour séparateur espace):
Workbooks.OpenText Filename:= _
Fichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, _
1), Array(20, 1), Array(44, 1), Array(58, 1))

mais il fallait absolument que les chaine de caractère soient alignée à gauche donc j'ai utilisé le code suivant qui fonctionne pour alignement gauche ou droite :
Workbooks.OpenText Filename:= _
fichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth

mais il me reste le problème du séparateur tabulation!
vous me direz d'ouvrir le fichier délimitter par espace et tabulation mais alors l'alignement gauche ou droite modifi le résultat et la suite de mon code est out...
j'espère qu'une bonne ame pourra me secourir
merci d'avance
sylvain

ps : si je ne suis pas assez clair ou si vous voulez un exemple de fichier, demandez moi.
 
salut philipe,
ci joint un exemple de fichier
attention comme dit dans le message précédent
il y a 4 possibilité de forme de fichier (2 alignements et séparateur espace ou tab)
merci d'avance
a tchao [file name=test_20050428102640.zip size=643]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20050428102640.zip[/file]
 

Pièces jointes

Bonjour sylv900

Je suis entrain de résoudre ton problème. Mais j'ai juste une petite question. Est-ce qu'il se pourrait que dans un meme fichier il y est 2 type différent de séparateur pour une meme ligne?

C-a-d, separateur espace et un séparateur de tab dans une meme ligne d'un meme fichier ?
Parce que ça change la complexité de ton probleme .

Merci !

Philippe
 
salut phillipe,
non ne t'inquiète pas,
la forme du fichier dépend de la personne qui l'a enregistrer n'importe comment...donc c'est globalement pour un fichier...
si tu as des idées et que tu ne veux pas t'embéter à tout taper pas de problème, je sais faire quelque trucs..

en tout cas merci pour ton aide

sylvain
 
Bonjour sylv900

Le code que je te fournie est tiré de quelque chose que j'avais concocté pour des fichier qui avait plus de 255 colonnes avec la fonctionnalité que tu demande. J'ai retiré une partie du code qui ne s'applique pas à toi, mais il se peut qu'il y en ait enrore trop pour rien.

Code:
Sub Ouvrir_fichier()
  Dim szFile As String
  Dim szLine As String
  Dim tabl() As String
  Dim szR As String
  Dim iCols As Integer
  Dim iA As Integer
  Dim iFileNo As Integer
  Dim iLines As Integer
  Dim strInstring As String
  Dim intInstring As Integer
'  szDefaultDir = Cells(2, 3)
'  ChDir szDefaultDir

  
  vrtFiles = Application.GetOpenFilename('*.*, *.*', , 'Fichier prn', , True)
  Application.ScreenUpdating = False
  For Each fileToOpen In vrtFiles ' Peu ouvrir plus d'un fichier
  If fileToOpen <> False Then
    bolStopAddSheet = True
    szShortName = fileToOpen
    szXLSfile = fileToOpen & '.prn'
    Workbooks.Add
    Rem ActiveWorkbook.SaveAs szXLSfile
    iFileNo = FreeFile
    Open fileToOpen For Input As #iFileNo
    iLines = 1
    While Not EOF(iFileNo)
        Line Input #iFileNo, szLine
        szLine = Trim(szLine)
        While Left(szLine, 1) = Chr(9)
              szLine = Mid(szLine, 2, Len(szLine))
        Wend
        While Right(szLine, 1) = Chr(9)
              szLine = Mid(szLine, 1, Len(szLine) - 1)
        Wend
        For intChar = 1 To 4 ' Cette boucle sert a chercher la prochaine occurance du caractere de séparation
          Select Case intChar
                 Case 1
                      intInstring = InStr(1, szLine, Chr(9)) 'Tabulation
                 Case 2
                      intInstring = InStr(1, szLine, Chr(32)) 'Space
          End Select
          If intInstring > 1 Then
             strInstring = Mid(szLine, intInstring, 1)
             Exit For
          End If
      Next intChar
      szR = SplitFullCabane(tabl, szLine, strInstring, iLines)
      iLines = iLines + 1
      Application.StatusBar = 'Importing Row ' & _
      ActiveCell.Row & ' of text file ' '& iFileNo
    Wend
    Close #iFileNo
  End If
  Sheets(1).Select
  Next fileToOpen
End Sub

Function SplitFullCabane(tabstrTableau() As String, strLigne As String, strSeparateur As String, intLines As Integer)

Dim nLoop As Integer
ReDim tabstrTableau(0, 254)
iSheet = 1
nLoop = 0
If strSeparateur <> Empty Then
While InStr(strLigne, strSeparateur) > 0
    tabstrTableau(0, nLoop) = Trim(Left(strLigne, InStr(strLigne, strSeparateur) - 1))
    strLigne = Mid(strLigne, InStr(strLigne, strSeparateur) + 1)
    
    While Left(strLigne, 1) = strSeparateur
        strLigne = Mid(strLigne, 2)
    Wend
Wend
End If
tabstrTableau(0, nLoop) = strLigne
Sheets(iSheet).Range(Sheets(iSheet).Cells(intLines, 1), Sheets(iSheet).Cells(intLines, 255)) = tabstrTableau
ReDim tabstrTableau(0, 0)
ReDim tabstrTableau(0, 254)

End Function


Philippe
 
Bonjour sylv900

Excuse moi, je n'ai pas beaucoup de commentaire dans mon code. Mauvaise habitude. Mais quand tu le fait pour toit....

Il y a une chose que tu n'aimera pas. C'est que l'entête est un peut scappé. Mais ça s'arrange facile.

On s'en reparle

a+

Phil
 
sylv900 écrit:
j'oubliais, tu pourrais me dire ce que font les fonctions :
Trim
InStr
SplitFullCabane

merci

Répondu en délais.

def: string (chaine de caractères) ex: 'sylv900 est super sympa'

Trim supprime les espaces vide au début et à la fin d'une string.
InStr sert a chercher un caractère spécifique dans une string

SplitFullCabane c'est un peu plus spécial.

Je ne sais pas si tu sais que a l'intérieur d'une macro, tu peux appeler une autre macro en dehors de celle-ci. C'est ce que fait SplitFullCabane. De plus, il est parfois utilie de passer certaine condition ou variable qui te permettre de mieux contrôler ce l'autre macro va faire. Maintenant, cais celle-ci est un peu spéciale. Non seulement tu peu appeler une autre macro qui exécute autre chose, mais tu peu demander quel te retourne une réponse. On appelle ça une Fonction. C'est ce que précisément fait Function SplitFullCabane.

Si tu as d'autres questions ne te gêne pas.

a+

Philippe
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
1 K
D
Réponses
22
Affichages
3 K
T
  • Question Question
Réponses
13
Affichages
2 K
toper
T
D
Réponses
2
Affichages
1 K
D
N
Réponses
2
Affichages
2 K
Narduz
N
C
Réponses
0
Affichages
1 K
Cerealkiller57
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…