Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Peut on améliorer mon code pour qu'il soit plus rapide

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Arpette

XLDnaute Impliqué
Bonjour à toutes et à tous,
j'ai une macro que j'ai faite avec votre aide, elle fonctionne comme je le souhaite, mais elle tourne pendand 1 H environ. J'aimerais savoir si on peut l'améliorer. Elle trourne sur 3 onglets ( 2 de 8000 lignes et 1 de 50000). Je sais çà fait beaucoup.
Merci de votre aide
@+
Code:
Sub Suivi_des_PO()
Dim i%
Dim j As Range
Dim l As Range
Dim c As Range
Dim r As Range
Dim d As Range
Dim e As Range
Dim f As Range
Dim Départ As String
Dim Somme&

With Worksheets("TradeCard")
Application.ScreenUpdating = False
Set l = .Range("D65536").End(xlUp)
Do While l.Row > 1
If InStr(l, "M") <> 1 Then
    l.EntireRow.Delete
    Set l = .Range("D65536").End(xlUp)
Else: Set l = l(0, 1)
End If
Loop
.Columns(5).Insert
.Cells(1, 5) = "PO-LG"
Set f = .Range("E2")
Do While f.Offset(0, -1) <> ""
    f = Split(f(1, 0), "/")(0) & "-" & Mid(.Range("G" & f.Row).Value, 4, 3)
    Set f = f.Offset(1, 0)
Loop

End With

'supprime les colonnes de A,B,D,E,F,G,H,M,S,U,V,W
With Worksheets("5-9-12")
.Range("A:B,D:D,J:K,M:M,S:S,U:W").Delete

'supprime toutes les lignes dont les cellules de C ne commence pas par M
Set l = .Range("C65536").End(xlUp)
Do While l.Row > 1
If InStr(l, "M") <> 1 Then
    l.EntireRow.Delete
    Set l = .Range("C65536").End(xlUp)
Else: Set l = l(0, 1)
End If
Loop

'insertion d'une colonne pour constituer ma valeur
.Columns("D").Insert
.Columns("H").Insert
.Columns("I").Insert
.Columns("J").Insert
.Columns("K").Insert
.Columns("L").Insert
.Columns("M").Insert
.Columns("N").Insert
.Columns("M").Insert
.Columns("N").Insert
.Columns("O").Insert
.Cells(1, 2) = "Fournisseur"
.Cells(1, 4) = "PO-LG"
.Cells(1, 8) = "Qtés RCT-PO"
.Cells(1, 9) = "Qté ASN"
.Cells(1, 10) = "Date RCT-PO"
.Cells(1, 11) = "Qté RCT-C3D"
.Cells(1, 12) = "Date RCT-C3D"
.Cells(1, 13) = "Qté En Transit"
.Cells(1, 14) = "Date Prévue-C3D"
.Cells(1, 15) = "Product Line"
.Cells(1, 16) = "CDC FY"
.Cells(1, 17) = "CDC Period"

'concatène C et "-" et S
    Set c = .Range("D2")
    Do While c.Offset(0, -1) <> ""
        c = c(1, 0) & "-" & Format(c(1, 19), "000")
        Set c = c.Offset(1, 0)
    Loop
End With
'prise en compte de la page "5-17"
'With Sheets("5-17")

'remplace ? par Transit.
With Sheets("5-17").Range("AB:AB")
    Set j = .Find(What:="?", LookIn:=xlValues, lookat:=xlWhole)
    If Not j Is Nothing Then
        Do
            j.Value = "Transit"
            Set j = .FindNext(j)
        Loop While Not j Is Nothing
    End If
'prise en compte de la page "5-17"
With Sheets("5-17")
'insertion d'une colonne
.Columns(6).Insert
.Cells(1, 6) = "PO-LG"

'transforme les cellules texte en nombre. Tester vide
For i = 2 To .Range("K65536").End(xlUp).Row
    .Cells(i, 11) = CDbl(Trim(Replace(Cells(i, 11), ".", ",")))
Next
'supprime toutes les lignes dont les cellules de E ne commence pas par M
Set l = .Range("E65536").End(xlUp)
Do While l.Row > 1
Application.StatusBar = l.Row
If InStr(l, "M") <> 1 Then
    l.EntireRow.Delete
    Set l = .Range("E65536").End(xlUp)
Else: Set l = l(0, 1)
End If
Loop

'concatène E et "-" et Hf
Set d = .Range("F2")
    Do While d.Offset(0, -1) <> ""
    d = d(1, 0) & "-" & Format(d(1, 3), "000")
    Set d = d.Offset(1, 0)
    Loop
End With


Set c = Worksheets("5-9-12").Range("D" & Worksheets("5-9-12").Range("D65536").End(xlUp).Row)
Do While c.Row > 1
Somme& = 0
With Worksheets("5-17").Range("F2:F" & Worksheets("5-17").Range("F65536").End(xlUp).Row)
    Set d = .Find(c)
        If Not d Is Nothing Then
            Départ = d.Address
            Do
                Somme& = d(1, 6) + Somme&
                c(2, 1).EntireRow.Insert
                c(2, 0) = "N° ASN"
                'n° d'ASN OK
                c(2, 1) = d(1, 26)
                'qt dans l'ASN OK
                c(2, 6) = d(1, 6)
                'date rct-po
                c(2, 7) = d(1, 5)
                'date rct-c3d
                c(2, 9) = d(1, 19)
                If d(1, 24) = "Transit" Then
                    c(2, 8) = 0
                    Else: c(2, 8) = d(1, 6)
                End If
                'Qté réceptionnée C3D
                If d(1, 20) = "?" Then
                    c(2, 8) = 0
                ElseIf d(1, 6) = d(1, 18) Then
                    c(2, 8) = d(1, 6)
                ElseIf d(1, 6) - d(1, 18) <> 0 Then
                c(2, 8) = d(1, 6) - d(1, 18)
                Else
                End If
                'date prévue c3d
                c(2, 11) = d(1, 24)
                If d(1, 24) = "Transit" Then
                    c(2, 11) = d(1, 23)
                    Else: c(2, 10) = d(1, 18)
                End If
                'Qté en transit
                If c(2, 6) = c(2, 8) Then
                    c(2, 10) = 0
                    Else: c(2, 10) = d(1, 18)
                End If
                Set d = .FindNext(d)
        Loop While Not d Is Nothing And d.Address <> Départ
        End If
    End With
    With Worksheets("TradeCard").Range("E2:E" & Worksheets("TradeCard").Range("E65536").End(xlUp).Row)
    Set f = .Find(c)
        If Not f Is Nothing Then
            Départ = f.Address
            Do
                c(1, 12) = f(1, 14)
                c(1, 13) = f(1, 46)
                c(1, 14) = f(1, 47)
        Loop While Not f Is Nothing And f.Address <> Départ
        End If
    End With

'on fait le total de tous les ASN
c(1, 5) = Somme&
Set c = c(0, 1)
Loop
With Worksheets("5-9-12")
.Range("J:J,L:L,N:N").NumberFormat = "dd/mm/yyyy"
.Columns("A:X").Columns.AutoFit
.Columns("A:X").HorizontalAlignment = xlCenter
End With
End With
Application.ScreenUpdating = True
End Sub
 
Re : Peut on améliorer mon code pour qu'il soit plus rapide

Bonsoir j'ai rajouté une boucle dans ma macro , mais çà ne fontionne pas. Je souhaite rechercher la valeur de la colonne A feuille 5-9-12 dans la colonne A de la feuille Product_Line. Et renvoyer en colonne O 5-9-12, valeur B Product_Line.
Merci de votre aide
@

Cijoint.fr - Service gratuit de dépôt de fichiers
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…