Probleme performance sur copie cellule

Bonjour,

j'ai une macro qui copie des cellules d'un onglet vers un autre onglet. je trouve cette macro tres lente et ne comprends pas pourquoi.

500 lignes pour 1min23.

quelqu'un a t'il une idée?

 Worksheets("AQP").Range("Debug_deb_moe").Value = Time       ' Heure début mise en forme
        Application.ScreenUpdating = False             ' On masque l'affichage des feuilles pendant l'execution de la macro
        On Error Resume Next

        'New
        Set wsfica = Worksheets("Avancement Homologation")          ' Nom de la feuille de calcul  
        Set wsfic_moe = Worksheets("moe")                           ' Nom de la feuille de calcul moe

        wsfica.Select
        nblig_Avanc1 = wsfica.UsedRange.Rows.Count                  ' NB lignes de l'onglet Avancement Homologation
        Set maplage = wsfica.Range("A2:CH" & nblig_Avanc1).SpecialCells(xlCellTypeVisible)
        'New
        nblig_moe = wsfic_moe.UsedRange.Rows.Count                   ' NB lignes de l'onglet moe

        'MsgBox " Nb lig avancement " & nblig_Avanc1 & " Nb lig moe " & nblig_moe
        J = 0

For Each Ligne In maplage.Rows
    I = Ligne.Row

        Set c = wsfic_moe.Range("A2:A" & nblig_moe).Find(wsfica.Range("A" & I).Value)       ' Recherche ligne dans onglet MOE
        J = c.Row

        'MsgBox " Trace1 mef_MOE -- Projet:  " & wsfica.Range("A" & I).Value & Chr(10) & " N° ligne dans onglet MOE: " & therow & "-- Indice J: " & J

        If (J > 0) Then

            ActiveSheet.Range("Q" & I).Value = wsfic_moe.Cells(J, 19).Value                                     
            ActiveSheet.Range("s" & I).Value = wsfic_moe.Cells(J, 20).Value                                     
            ActiveSheet.Range("AH" & I).Value = wsfic_moe.Cells(J, 22).Value                                 
            ActiveSheet.Range("AK" & I).Value = wsfic_moe.Cells(J, 25).Value                                   
            ActiveSheet.Range("AM" & I).Value = wsfic_moe.Cells(J, 27).Value                                   
            ActiveSheet.Range("AN" & I).Value = wsfic_moe.Cells(J, 28).Value                                 
            ActiveSheet.Range("AO" & I).Value = wsfic_moe.Cells(J, 29).Value                                   
            ActiveSheet.Range("AP" & I).Value = wsfic_moe.Cells(J, 30).Value                                   
            ActiveSheet.Range("AQ" & I).Value = wsfic_moe.Cells(J, 31).Value                                   
            ActiveSheet.Range("AR" & I).Value = wsfic_moe.Cells(J, 32).Value                                  
            ActiveSheet.Range("AS" & I).Value = "   "                                                               

        End If

        I = I + 1

Next
        Worksheets("AQP").Range("Debug_fin_moe").Value = Time       ' Heure fin mise en forme
End Sub 

Bonjour,

normal car boucler sur des cellules est ce qu'il y a de plus lent, surtout en écriture cellule par cellule au lieu d'en grouper !

Envisager un filtre et des variables de type tableau en lecture comme en écriture …

Bonjour

Sans garantie mais essaie une variante, en simplifiant les codes.

Remplace les instructions telles que :

ActiveSheet.Range("Q" & I).Value = wsfic_moe.Cells(J, 19).Value 

par :

wsfic_moe.Cells(J, 19).copy  Range("Q" & I).Value 

Quel est le résultat ?

Heu, t'es sûr que cela marche .Value en destination de Copy ? …

Vaudrait mieux commencer par grouper les cellules contigües en écriture :

ActiveSheet.Cells(I, "AM").Resize(, 6).Value = wsfic_moe.Cells(J, 27).Resize(, 6).Value

Marc L a écrit :

Heu, t'es sûr que cela marche .Value en destination de Copy ? …

Tu as raison. J'ai oublié d'enlever le ''.copy''

Mais je suis sûr que ta solution est bonne. Je la retiens. Merci.

Heu, plutôt Value à supprimer ?

Sinon je ne suis sûr de rien vu la présentation légère et sans classeur …

Je n'ai pas détaillé le bout de code car dès la deuxième ligne avec On Error cela n'augure rien de bon !


Si déboguer est l’art de corriger les bogues, alors programmer est l’art d’en faire !

Marc L a écrit :

vu la présentation légère et sans classeur …

Moi aussi, je préfère travailler sur un classeur joint par le demandeur.

Cela permet de tester les solutions avant de les proposer. Dans le cas présent, cela m'aurait éviter les bourdes que tu as relevées.

Mais je constate que les nouveaux venus semblent éviter de joindre un fichier. Sans doute parce qu’un autre forum le déconseille explicitement, et l’interdit même lors d’un premier message.

Dommage !

Il faut relancer !

Bye ! et merci encore !

Rechercher des sujets similaires à "probleme performance copie"