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 SubSinon 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 SubMytå
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 Subcordialement
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 SubMytå
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 Subcordialement
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 FunctionMytå
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 SubMytå
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 SubMytå
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 SubMytå
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 Subcordialement