PB temps d'excécution

Bonjour à tous,

J'ai récupéré une macro qui me permet de rapatrier un fichier .txt dans une colonne (EK) ce sont de numéros (un max de 600).

puis de ne garder par exemple de la ligne 20 à la ligne 35.

mais quelque soit la longueur de fichier txt il met tjrs autant de temps.

Dans la macro il y a à un endroit "601" alors je pense qu'il analyse les 601 cases mais les connaissances que j'ai ne me permet pas de savoir si c'est ça ou pas.

quelqu'un peut me dire si il y a un moyen de ne travailler que sur le nombre de numéro dans la colonne EK afin de réduire le temps.

par avance un grand merci.

Sub Import()

Dim contenuligne As Variant
Dim Ligne As Integer
Dim j As Integer
Dim v As Integer
Application.ScreenUpdating = False
    'Fichier = "import.txt"

    Dim CheminEtTypeFichier As String, Fichier As String

   Columns("EK:EK").Select
    Application.CutCopyMode = False
    Selection.ClearContents

'Variable à définir : Le chemin par défaut
CheminEtTypeFichier = "Choix du fichier"

Fichier = BrowseFile(CheminEtTypeFichier)

If Fichier <> "" Then

m = Split(Fichier, Application.PathSeparator)
        Range("CK8") = m(UBound(m))

Else
MsgBox "Aucune sélection a été effectuée."

Exit Sub

End If

    Open Fichier For Input As #1

        Do While Not EOF(1) And Ligne < 601
        Line Input #1, contenuligne

        Range("EK" & 1 + Ligne).Value = contenuligne
        Ligne = Ligne + 1
        Loop

    Close #1

v = 1
For j = Range("CP6").Value To Range("CS6").Value
Range("AK" & v).Value = Range("EK" & j).Value
v = v + 1
Next j
Application.ScreenUpdating = True
MsgBox "Importation réussie."
End Sub

Bonjour,
Une première proposition à vue de nez. Effectivement l'écriture ligne par ligne dans Excel peut très vite ralentir vos macros. Il est préférable de stocker toutes les données dans une Array (un tableau), puis de coller directement cette array dans Excel en 1 seule opération.

Je n'ai pas testé le programme, s'il y a une incompatibilité de type sur "Line Input #1, lignesLues(i)", remplacez "Dim lignesLues(1 To 600) As String" par "Dim lignesLues(1 To 600) As Variant".

Je pense qu'il est également possible d'optimiser la fin de votre code lorsque vous regardez les valeurs CP6 et CS6, mais pour cela j'aimerais si possible que vous joignez un fichier d'exemple afin de comprendre votre objectif final.

Sub Import()

    Dim Ligne As Integer
    Dim j As Integer
    Dim v As Integer

    Application.ScreenUpdating = False
    Application.CutCopyMode = False
        'Fichier = "import.txt"

    Columns("EK:EK").ClearContents

    Dim CheminEtTypeFichier As String, Fichier As String
    'Variable à définir : Le chemin par défaut
    CheminEtTypeFichier = "Choix du fichier"

    Fichier = BrowseFile(CheminEtTypeFichier)

    If Fichier <> "" Then

        m = Split(Fichier, Application.PathSeparator)
        Range("CK8").Value2 = m(UBound(m))
    Else
        MsgBox "Aucune sélection a été effectuée."
        Exit Sub
    End If

    Open Fichier For Input As #1
        Dim i As Long
        Dim lignesLues(1 To 600) As String
        For i = 1 To 600
            if EOF(1) Then Goto FinLecture
            Line Input #1, lignesLues(i)
        Next i

FinLecture:
    Close #1

    ' ecriture
    Activesheet.Range("EK1").Resize(600, 1).Value2 = lignesLues

    For j = Range("CP6").Value2 To Range("CS6").Value2
        v = v + 1
        Range("AK" & v).Value2 = Range("EK" & j).Value2
    Next j

    Application.ScreenUpdating = True
    MsgBox "Importation réussie."
End Sub

Edit : Je pense cependant que vous devriez VRAIMENT regarder du coté de PowerQuery pour ce genre de requêtes. VBA est "obsolète" sur ce point, et juste beaucoup plus lent que PowerQuery. Surtout que la requête à l'air très simple.

Bonjour,

Je viens de tester et dans mon fichier j'ai un bouton qui affiche les numéros un par un les uns en dessous des autres.
et là il m'affiche toujours le même j'ai regardé et il n'importe que le premier numéro du fichier .txt et le répète à la suite au lieu de passer au suivant

Sinon c'est bien plus rapide merci

Bonjour,

Ah c'est probablement un problème de transposition ligne/colonne.

réessayez avec

    ' ecriture
    Activesheet.Range("EK1").Resize(600, 1).Value2 = Application.Transpose(lignesLues)

yes c'est tout bon un grand merci

Rechercher des sujets similaires à "temps excecution"