Problème boucle FOR Trop lente

Bonjour,

Je désire transfert des données que je reçois; mais le données reçu contiennent des espaces dans les nombres et des lignes de numéros de comptes à enlever, des espaces au dé

15comptes.xlsm (21.06 Ko)

but à supprimer. J'inclus un fichier pour plus d'explications.

Merci à l'avance

Oiseau bleu

Hello,

Pas besoin de vba, une solution PowerQuery développée en 3 minutes avec un temps d'exécution quasi instantané

Tu as juste à mettre tes données dans le tableau structuré onglet 1, et faire clic droit puis actualiser sur le tableau de l'onglet BV2. Je t'ai volontairement enlevé les données résultat pour que tu fasses le test du clic droit actualiser et que tu vois la magie

@+

17comptes.xlsm (27.71 Ko)

Bonjour,
Une proposition VBA.
Cdlt.

11comptes.xlsm (25.76 Ko)
Public Sub Clean_Data()
Dim ws As Worksheet, ws2 As Worksheet
Dim lastRow As Long, I As Long, k As Long
Dim tbl As Variant, arr() As Variant

    Set ws = Worksheets("BV1")
    Set ws2 = Worksheets("BV2")

    With ws2
        .Cells(1).CurrentRegion.Offset(1).Clear
    End With

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(2, 1).Resize(lastRow - 1, 4).Value
    End With

    For I = LBound(tbl) To UBound(tbl)
        If tbl(I, 1) <> "" Then
            ReDim Preserve arr(4, k + 1)
            arr(0, k) = tbl(I, 1)
            arr(1, k) = WorksheetFunction.Trim(tbl(I, 2))
            arr(2, k) = CDbl(tbl(I, 3))
            arr(3, k) = CDbl(tbl(I, 4))
            k = k + 1
        End If
    Next I

    If k > 0 Then ws2.Cells(2, 1).Resize(k, 4).Value = Application.Transpose(arr)

End Sub

Bonjour et merci pour vos réponses.

Je ne suis pas très à l'aise avec Power Query et je ne sais pas trop comment l'intégrer dans mes macros. Mais le résultat est parfait.

La macro VBA est rapide, ce qui est excellent; mais elle comporte certaines erreurs par rapport au résultat escompté.

Les numéros de comptes devraient devenir numérique et il y a un espace après les 5 chiffres qui devrait être supprimer. chr(160)

Les lignes de comptes contenant "Total pour" devraient être supprimées puisqu'elles contiennent un numéro de compte en doublon et qui ne sert à rien.

Il faut vérifier dans le numéro de compte et les montants Débit et Crédit les chr(160) et chr(32).

Merci,

Hey,

Peut être le moment de découvrir,

J’ai quasiment remplacé toute l’utilisation de VBA que j’avais par PowerQuery.

C’est un gain de temps considérable.

N’hésite pas si tu as des questions je pourrais te guider ainsi que d’autres sur ce forum :)

Sinon il y a des manières simples pour demander l’actualisation d’une requête powerquery en VBA

@+

Bonjour,
Une petite mise à jour.
Cdlt.

15comptes.xlsm (26.82 Ko)
Public Sub Clean_Data()
Dim ws As Worksheet, ws2 As Worksheet
Dim lastRow As Long, I As Long, k As Long
Dim tbl As Variant, arr() As Variant

    Set ws = Worksheets("BV1")
    Set ws2 = Worksheets("BV2")

    With ws2
        .Cells(1).CurrentRegion.Offset(1).Clear
    End With

    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(2, 1).Resize(lastRow - 1, 4).Value
    End With

    For I = LBound(tbl) To UBound(tbl)
        If tbl(I, 1) <> "" And Not tbl(I, 2) Like "Total*" Then
            ReDim Preserve arr(4, k + 1)
            arr(0, k) = CLng(Replace(tbl(I, 1), Chr(160), ""))
            arr(1, k) = WorksheetFunction.Trim(tbl(I, 2))
            arr(2, k) = CDbl(tbl(I, 3))
            arr(3, k) = CDbl(tbl(I, 4))
            k = k + 1
        End If
    Next I

    If k > 0 Then ws2.Cells(2, 1).Resize(k, 4).Value = Application.Transpose(arr)

End Sub

Bonjour et encore merci et bravo à vous 2,

J'ai une lacune avec Power Query.

Baroute78 as-tu des bons sites où je peux me former avec Power Query?

As-tu des manières simples pour intégrer Power Query et VBA?

Jean-Éric, ton code VBA fonctionne parfaitement merci,

J'ai une autre demande parce que la colonne du compte, de la description, du Débit et Crédit peux variée.

Par exemple je reçois des fichiers à traiter où la description est en colonne A, le numéro de compte est en colonne B, le débit en colonne E, le crédit en colonne G.

Une autre chose qui arrive parfois est que le compte et la description sont sur la même colonne (A), le débit colonne (B) et le crédit colonne(C)

Êtes-il possible de définir à l'avance la colonne où sera le compte, la description, le débit et le crédit.

Avoir une macro qui couvre tous les cas possibles de compte, de description, débit et crédit sur des colonnes différentes ou compte et description sur la même colonne.

Voir onglet BV1

Lettre de la colonne du #compte: B

Lettre de la colonne de la description: A

Lettre de la colonne du Débit: C

Lettre de la colonne du Crédit: D

Récupérer à partir de la ligne: 6

Je vous fais parvenir des exemples de cas.BV3 colonnes différentes et BV4 Compte et Description sur la même colonne.

Donc en changeant les lettres des colonnes et la ligne de récupération il est possible de traiter différents modèles.

Merci à l'avance,

Oiseaubleu

Merci, pour vos réponses cela fonctionne très bien.

Oiseaubleu

Rechercher des sujets similaires à "probleme boucle trop lente"