Scinder un fichier texte avant importation dans Excel

Bonjour tout le monde

Voici un probleme qui se pose a moi:

j'ai un fichier .txt a importer dans excel pour mes reporting. Mais probleme, un des fichier compte trop de ligne pour etre ouvert par excel.

Ma question: connaissez vous un moyen pour couper le fichier .txt en deux par exemple par une macro dans word afin que je puisse m'en servir dans excel (car d'apres ce que j'ai vu sur le net, cela est impossible par excel)

En esperant que je ne demande pas l'impossible.

Cordialement

Salut le forum

Maguetlolo a écrit :

Car d'apres ce que j'ai vu sur le net, cela est impossible par excel.

Impossible par Excel, essayes-tu de me faire rire la

L'exemple ci dessous t'écrira le fichier txt dans le classeur actif en partant

de la feuille 1 et en décalant d'une feuille toutes les 65536 lignes.

Cette ligne est à adapter

Open "d:\copy\test.txt" For Input As #1

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim Compteur As Long
Dim Compteur2 As Integer

On Error GoTo Ferme

Open "d:\copy\test.txt" For Input As #1

Compteur = 0
Compteur2 = 1

Do While Not EOF(1)
Line Input #1, Val_Ligne
Sheets(Compteur2).Range("A1").Offset(Compteur, 0).Value = Val_Ligne
Compteur = Compteur + 1
If Compteur = 65536 Then Compteur = 0: Compteur2 = Compteur2 + 1
Loop

Ferme:
Close #1

End Sub

Sinon il te reste Excel 2007.

Mytå

P.S. Tu aurais pu poser la question sur le forum questions

Bonjour Myta

Avé Cesar !!!! Trop bon le gars!

j'ai pourtant cherché sur un paquet de forum et site et pas un ne donnais la solution,

Un grand merci a toi.

et puisque rien ne te résiste peut on incorporer dedans qu'il nomme ces différentes pages par un nom genre : aaa1; aaa2; aaa3 etc...

(ps: puisque cette question concerne finalement excel, un moderateur pourrait-il la déplacer dans la bonne rubrique afin qu'elle profite à tous? merci)

cordialement

Re Maguetlolo et le forum

Sans tester

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim Compteur As Long
Dim Compteur2 As Byte

On Error GoTo Ferme

Open "d:\copy\test.txt" For Input As #1

Compteur = 0
Compteur2 = 1

Do While Not EOF(1)
Line Input #1, Val_Ligne
Sheets(Compteur2).Range("A1").Offset(Compteur, 0).Value = Val_Ligne
Compteur = Compteur + 1
If Compteur = 65536 Then
Compteur = 0
Sheets(Compteur2).Name = "AAAA" & Compteur2
Compteur2 = Compteur2 + 1
End If
Loop
Sheets(Compteur2).Name = "AAAA" & Compteur2
Ferme:
Close #1

End Sub

Mytå

P.S.

Maguetlolo a écrit :

J'ai pourtant cherché sur un paquet de forum et site et pas un ne donnais la solution.

Une recherche ici sur le forum avec : Tableau de plus de 65536 lignes

https://forum.excel-pratique.com/viewtopic.php?t=1454&highlight=

Re

j'ai essayer et cela fonctionne

une autre question (j'aurais dut le dire avant mais je pensait que c'etais impossible, a tort)

comment adapter cette macro (qui est de toi) afin quelle s'execute sur ces différentes feuilles (AAAA1;AAAA2;AAAA3...) jusqu'a que ces AAAA* s'arrettent (car il peut y en avoir 1 jusque 5 ou plus suivant les jour)

Sub Extraire5()

For Each Cellule In Range("B41:B43,B49:B51,B53:B61")

With Sheets("AAAA1")
  With .Range("F2:F" & .Range("F65536").End(xlUp).Row)
    Set Cell = .Find(Cellule, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns) 'xlpart xlwhole

  If Not Cell Is Nothing Then
    Premcell = Cell.Address
    Do
        Select Case Cell.Offset(0, -2)
            Case "CCC_CC"
            Cellule.Offset(0, 2) = Cellule.Offset(0, 2) + 1

        End Select

      Set Cell = .Cells.FindNext(Cell)
    Loop Until Cell.Address = Premcell
  End If

    Set Cell = Nothing

  End With
End With
Next Cellule
End Sub

cordialement

Re

Une recherche ici sur le forum avec : Tableau de plus de 65536 lignes 
http://forum.excel-pratique.com/viewtopic.php?t=1454&highlight=

effectivement, j'ai pas dut mettre les bons mots clé dans la recherche, désolé

cordialement

Re le forum

Sans fichier, je tentes cette solution

Sub Extraire5()

For Each Feuille In Worksheets

If Feuille.Name Like "AAAA*" Then

For Each Cellule In Range("B41:B43,B49:B51,B53:B61")

With Feuille
  With .Range("F2:F" & .Range("F65536").End(xlUp).Row)
    Set cell = .Find(Cellule, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns) 'xlpart xlwhole

  If Not cell Is Nothing Then
    Premcell = cell.Address
    Do
        Select Case cell.Offset(0, -2)
            Case "CCC_CC"
            Cellule.Offset(0, 2) = Cellule.Offset(0, 2) + 1

        End Select

      Set cell = .Cells.FindNext(cell)
    Loop Until cell.Address = Premcell
  End If

    Set cell = Nothing

  End With
End With

Next Cellule

End If

Next Feuille

End Sub

Mytå

P.S. Pas un exemple à suivre... aucune déclaration de variables

Maguetlolo, édites ton premier message et ajoute [A déplacer] devant ton sujet, cela

va être plus facile pour les responsables du forum de voir pour déplacer ta question.

Je n'ai plus les accès pour le faire à ta place.

Sinon, tu envoies un MP à Sébastien, il va le faire directement, en lui donnant l'url de la ficelle.

Re

Après essai, cela fonctionne

Il me reste à l'incorporer à mon classeur qui commence à comporter beaucoup de macros, ca va pas être facile.

Je ne clos pas ce sujet au cas où j'aurais encore une question.

Encore merci à toi

Cordialement

PS: message à Sébastien envoyé.

Re:

déja une petite modif:

il faudrait creer les feuilles AAAA* car là elle prends les pages existantes (qui sont destinées à autre chose)

Sub OuvertureFichier() 

Dim Val_Ligne As String 
Dim Compteur As Long 
Dim Compteur2 As Byte 

On Error GoTo Ferme 

Open "d:\copy\test.txt" For Input As #1 

Compteur = 0 
Compteur2 = 1 

Do While Not EOF(1) 
Line Input #1, Val_Ligne 
Sheets(Compteur2).Range("A1").Offset(Compteur, 0).Value = Val_Ligne 
Compteur = Compteur + 1 
If Compteur = 65536 Then 
Compteur = 0 
Sheets(Compteur2).Name = "AAAA" & Compteur2 
Compteur2 = Compteur2 + 1 
End If 
Loop 
Sheets(Compteur2).Name = "AAAA" & Compteur2 
Ferme: 
Close #1 

End Sub

cordialement

re le forum

Maguetlolo, à tester sur ton programme.

J'ai ajouté une fonction qui détecte si la feuille existe.

Sub OuvertureFichier()

Dim Val_Ligne As String
Dim Compteur As Long
Dim Compteur2 As Byte

On Error GoTo Ferme

Open "D:\copy\test.txt" For Input As #1

Compteur = 0
Compteur2 = 1

Do While Not EOF(1)
Line Input #1, Val_Ligne

If Not WsExist("AAAA" & Compteur2) Then
Worksheets.Add
ActiveSheet.Name = "AAAA" & Compteur2
End If

Sheets("AAAA" & Compteur2).Range("A1").Offset(Compteur, 0).Value = Val_Ligne
Compteur = Compteur + 1
If Compteur = 65536 Then
Compteur = 0
Compteur2 = Compteur2 + 1
End If
Loop

Ferme:
Close #1

End Sub

Function WsExist(nom$) As Boolean
On Error Resume Next
WsExist = Sheets(nom).Index
End Function

Mytå

Bonjour tout le monde

Merci Myta pour tes réponse qui m'ont bien fait avancer

j'ai fait une macro avec l'enregistreur pour convertir un texte importé

comment puis-je faire pour que cette instruction : Application.Run "Macro15"

s'applique sur toutes les feuille de mon classeur qui se nomme :

"aaaa1";"aaaa2",aaaa3" etc ?

j'ai essayer de piocher dans les macro ci-dessus mais sans résultat

cordialement

Salut le forum

Tu avais déjà la solution sur la page précédente

Sub Extraction()

For Each Feuille In Worksheets 

If Feuille.Name Like "AAAA*" Then 

'ici le traitement de ta macro

End If 

Next Feuille 

End Sub

Mytå

Bonjour tout le monde

peut-etre est ce moi, mais j'ai deja essayer ca et ca ne marche pas, si je le lance sur une autre feuille, ca ne cherche pas les feuilles AAAA* etc et si je me met sur la premiere des AAAA* ca marche que sur celle la et pas sur les autres.

j'espers que ca n'est pas a cause des noms de feuilles car celle ci s'appelle mfrA21; mfrA22 etc, j'ai mis AAAA* sur la question car ensuite je voudrais l'appliquer sur d'autres feuille qui ne porte pas le meme nom.

cordialement

Re le forum

maguetlolo, adapte le code avec un With ou un Select, la macro doit savoir qu'elle est

la feuille ou on doit faire le traitement.

Sub Extraction() 

For Each Feuille In Worksheets 

If Feuille.Name Like "mfrA*" Then 

With Feuille
    'ici le traitement de ta macro 
End With

End If 

Next Feuille 

End Sub

Mytå

re

cela ne fonctionne pas et vu tes competence en la matiere, je pense que je n'ai pas tout compris, alors j'ai fait un fichier exemple ou la maco1 doit s'executer (sur toute les feuilles mfrA2* mais pas sur les autres) par l'intermediaire de la macro "extraction"

cordialement

https://www.excel-pratique.com/~files/doc/essaiconvertir.xls

Re le forum

Maguetlolo, pour faire dans le plus simple

Sub Extraction()

For Each Feuille In Worksheets

If Feuille.Name Like "mfrA2*" Then
 With Feuille
  .Columns("A:A").TextToColumns Destination:=Range("A1"), _
   DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), _
    Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
     TrailingMinusNumbers:=True
 End With
End If

Next Feuille

End Sub

Mytå

Re:

merci a toi, ca marche impeccable,

Peux tu me dire pourquoi ca ne fonctionnais pas ?

suite aux premieres modifs (fichier a importer trop gros) il faut que je reprenne toutes les macros une par une, pour chaque fichier importer et j'aimerais pouvoir me debrouiller tout seul pour les autres en m'appuyant sur le premier que le forum m'aide a faire.

alors si je fais une betise, j'aimerais savoir pour ne pas la reproduire (j'en fait suffisamment sans en rajouter )

cordialement

Re le forum

Maguetlolo, une macro par défaut travaille toujours sur la feuille Active, si tu ne

lui dit pas sur quelle feuille travailler.

Ne perd pas patience, le forum sera toujours la pour t'aider.

C'est avec le temps que l'on devient meilleur, persévere dans tes macros, une macro

lancer en pas-à-pas avec des variables bien déclarées aide beaucoup à trouver

ses erreurs.

A te relire, ici ou sur une autre ficelle

Mytå

re,

Merci beaucoup,

je laisse la ficelle ouverte pour les questions suivantes jusqu'a ce que je finisse de modifier tout mon dossier.

Bonne nuit a tous

Bonsoir

J'ai essayer de faire comme conseiller et de mettre sur cette macro les for each; with Feuille ...etc.

mais ca s'effectue tout de même sur la feuille active, pouvez vous me dire ce que je n'ai pas compris?

Sub Macro18()
'
' Macro18 Macro
' Macro enregistrée le 16/10/2008 par maguetlolo
'

'
For Each Feuille In Worksheets
If Feuille.Name Like "abc2*" Then

With Feuille
    Columns("I:I").Select
    Selection.Copy
    Columns("J:J").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Columns("J:J").Select
    Application.CutCopyMode = False
    Selection.TextToColumns Destination:=Range("K1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 9), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
        True
    Columns("J:CS").Select
    Columns("J:CS").EntireColumn.AutoFit

    Columns("I:J").Select
    Selection.EntireColumn.Hidden = True

        Range("A1").Select

End With

End If

Next Feuille

End Sub

cordialement

Rechercher des sujets similaires à "scinder fichier texte importation"