Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui ont
été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui ont
été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui ont
été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :
Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
les supprimant au fur et à mesure elle ne doit s'exécuter que 2400 fois ce
qui convient
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
les supprimant au fur et à mesure elle ne doit s'exécuter que 2400 fois ce
qui convient
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :
Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
les supprimant au fur et à mesure elle ne doit s'exécuter que 2400 fois ce
qui convient
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1), Array(22,
1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58, 1),
Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Effectivement, la suppression d'un grand nombre de cellules les unes après
les autres peut prendre du temps... j'ai déjà eu le "problème"...
Personnellement, j'ai résolu le problème en utilisant "union". Parcours
les cellules, et ne supprime pas celles que tu souhaites voir disparaître
mais mets unis les en une seule plage à détruire tout à la fin de ta
macro. Tu y gagneras beaucoup de temps..
@+
HD
Effectivement, la suppression d'un grand nombre de cellules les unes après
les autres peut prendre du temps... j'ai déjà eu le "problème"...
Personnellement, j'ai résolu le problème en utilisant "union". Parcours
les cellules, et ne supprime pas celles que tu souhaites voir disparaître
mais mets unis les en une seule plage à détruire tout à la fin de ta
macro. Tu y gagneras beaucoup de temps..
@+
HD
Effectivement, la suppression d'un grand nombre de cellules les unes après
les autres peut prendre du temps... j'ai déjà eu le "problème"...
Personnellement, j'ai résolu le problème en utilisant "union". Parcours
les cellules, et ne supprime pas celles que tu souhaites voir disparaître
mais mets unis les en une seule plage à détruire tout à la fin de ta
macro. Tu y gagneras beaucoup de temps..
@+
HD
Bonjour,
tu peux aussi gelé l'affichage en début de macro
Application.SceenUpdating = False
et le réactivé à la fin
Application.SceenUpdating = True
Sur certaines macro, le résultat est impressionnant.
@+
"LSteph" a écrit dans le message de news:
%Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1),
Array(22, 1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58,
1), Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
tu peux aussi gelé l'affichage en début de macro
Application.SceenUpdating = False
et le réactivé à la fin
Application.SceenUpdating = True
Sur certaines macro, le résultat est impressionnant.
@+
"LSteph" <lecocosteph@frite.fr> a écrit dans le message de news:
%23PbpAtJyJHA.1372@TK2MSFTNGP05.phx.gbl...
Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :
Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1),
Array(22, 1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58,
1), Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Bonjour,
tu peux aussi gelé l'affichage en début de macro
Application.SceenUpdating = False
et le réactivé à la fin
Application.SceenUpdating = True
Sur certaines macro, le résultat est impressionnant.
@+
"LSteph" a écrit dans le message de news:
%Bonjour,
(je dois partir, mais tu devrais y arriver avec ces qqs indications)
détail:
For i = 1 to fin
Définis fin en haut du module
Dim fin as long
'....
Plus important:
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Surtout pour aller plus vite:
Supprime les select inutiles
(particulièrement en boucle, c'est désastreux))
> For k = 1 To fin
> For n = 2 To 5
> Cells(k, 1).Select ''''''''cette ligne ne sert à rien
> Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
> Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
> Paste:=xlPasteValues
> Next
Enfin quand tu supprime des lignes faut remonter.
For i=fin to 1 step -1
@+
--
lSteph
Caroual a écrit :Bonjour,
J'aurais aimé avoir un peu d'aide pour améliorer mon code.
J'ai un fichier texte sur 12000 lignes et 16 colonnes. Dans excel je
voudrais mettre 5 lignes sur une seule ligne et supprimer les lignes qui
ont été recopiées.
J'ai écrit ce code qui marche mais cela me semble anormalement long. (2
minutes d'éxécution)
Sub essai()
Application.ScreenUpdating = False
tata = Application.GetOpenFilename
Workbooks.OpenText Filename:=tata, Origin:=xlMSDOS, StartRow:=1,
DataType:=xlFixedWidth, FieldInfo:= _
Array(Array(0, 1), Array(4, 1), Array(10, 1), Array(16, 1),
Array(22, 1), Array(28, 1), _
Array(34, 1), Array(40, 1), Array(46, 1), Array(52, 1), Array(58,
1), Array(64, 1), Array( _
70, 1), Array(76, 1), Array(82, 1), Array(88, 1), Array(94, 1)),
TrailingMinusNumbers _
:=True
fin = Range("a35000").End(xlUp)
Range("a1").Select
For k = 1 To fin
For n = 2 To 5
Cells(k, 1).Select
Range(Cells(n + k - 1, 2), Cells(n + k - 1, 16)).Copy
Cells(k, 200).End(xlToLeft).Offset(, 1).PasteSpecial
Paste:=xlPasteValues
Next
Range(Cells(k + 1, 1), Cells(k + 4, 18)).Delete
Next
End Sub
J'avais désactivé les calculs auto mais il n'y a aucune formule dans ce
fichier donc cela ne doit servir à rien.
Peut être est-ce normal. J'aimerais votre un avis.
Merci
Caroual
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
Fin = Source.Range("A65000").End(xlUp).Row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
Fin = Source.Range("A65000").End(xlUp).Row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors qu'en
Fin = Source.Range("A65000").End(xlUp).Row
"LSteph" a écrit dans le message de news:
%Bonjour,
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
@+
--
lSteph
"LSteph" <lecocosteph@frite.fr> a écrit dans le message de news:
%23PbpAtJyJHA.1372@TK2MSFTNGP05.phx.gbl...
Bonjour,
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
@+
--
lSteph
"LSteph" a écrit dans le message de news:
%Bonjour,
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
@+
--
lSteph
Bonsoir Caroual,
Sommes nous bien d'accord (excuses moi si j'ai un doute) sur le fait que
l'expression :
fin = Range("a35000").End(xlUp)
sert à trouver la dernière cellule non vide de la colonne A ?
Cette expression renverra telle quelle la valeur de cette cellule, alors
qu'assortie d'un ".row", elle renverra le numéro de la ligne.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Caroual" a écrit dans le message de
news:49f890b6$0$17099$
"LSteph" a écrit dans le message de news:
%Bonjour,
[...]mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
[...]Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
[...]@+
--
lSteph
Bonsoir Caroual,
Sommes nous bien d'accord (excuses moi si j'ai un doute) sur le fait que
l'expression :
fin = Range("a35000").End(xlUp)
sert à trouver la dernière cellule non vide de la colonne A ?
Cette expression renverra telle quelle la valeur de cette cellule, alors
qu'assortie d'un ".row", elle renverra le numéro de la ligne.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Caroual" <caroual22@orange.fr> a écrit dans le message de
news:49f890b6$0$17099$ba4acef3@news.orange.fr...
"LSteph" <lecocosteph@frite.fr> a écrit dans le message de news:
%23PbpAtJyJHA.1372@TK2MSFTNGP05.phx.gbl...
Bonjour,
[...]
mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
[...]
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
[...]
@+
--
lSteph
Bonsoir Caroual,
Sommes nous bien d'accord (excuses moi si j'ai un doute) sur le fait que
l'expression :
fin = Range("a35000").End(xlUp)
sert à trouver la dernière cellule non vide de la colonne A ?
Cette expression renverra telle quelle la valeur de cette cellule, alors
qu'assortie d'un ".row", elle renverra le numéro de la ligne.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Caroual" a écrit dans le message de
news:49f890b6$0$17099$
"LSteph" a écrit dans le message de news:
%Bonjour,
[...]mets y la ligne pas la valeur
> fin = Range("a35000").End(xlUp)
fin = [a65536].end(xlup).row
[...]Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en les supprimant au fur et à mesure elle ne doit s'exécuter que 2400
fois ce qui convient
[...]@+
--
lSteph
Bonsoir,Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en
Pas du tout regarde l'exemple de MichDenisFin = Source.Range("A65000").End(xlUp).Row
Sauf si tuaqs mis 2400 dans la cellule Fin et que tusavais d'avance que
tuu n'aurais que 2400 lignes.
Dans ce cas l'instruction n'aurait plus de sens...
... le reste est à l'avenant,
Suppression des Select inutiles
ça ce n'est plus à démontrer!
hors mis la façon de traiter la suppression,
j'en reviens que si tu dois le faire en boucle
remonter est plus sûr!
Cordialement.
--
lSteph
Bonsoir,
Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en
Pas du tout regarde l'exemple de MichDenis
Fin = Source.Range("A65000").End(xlUp).Row
Sauf si tuaqs mis 2400 dans la cellule Fin et que tusavais d'avance que
tuu n'aurais que 2400 lignes.
Dans ce cas l'instruction n'aurait plus de sens...
... le reste est à l'avenant,
Suppression des Select inutiles
ça ce n'est plus à démontrer!
hors mis la façon de traiter la suppression,
j'en reviens que si tu dois le faire en boucle
remonter est plus sûr!
Cordialement.
--
lSteph
Bonsoir,Si je mets ta ligne, fin = 12000 et j'exécute sur 12000 lignes alors
qu'en
Pas du tout regarde l'exemple de MichDenisFin = Source.Range("A65000").End(xlUp).Row
Sauf si tuaqs mis 2400 dans la cellule Fin et que tusavais d'avance que
tuu n'aurais que 2400 lignes.
Dans ce cas l'instruction n'aurait plus de sens...
... le reste est à l'avenant,
Suppression des Select inutiles
ça ce n'est plus à démontrer!
hors mis la façon de traiter la suppression,
j'en reviens que si tu dois le faire en boucle
remonter est plus sûr!
Cordialement.
--
lSteph