Optimisation de ma macro

Bonjour à tous,

Je vous explique ma requête.

J'ai un tableau qui centralise différentes données liées à nos fournisseurs qui proviennent de 4 fichiers Excel différents.

Je regroupe toutes les données dans la même feuille.

Ainsi, j'ai :

  • 2 colonnes avec les noms des fournisseurs et leurs résultats en taux de service
  • 2 colonnes avec les noms des fournisseurs et leurs nombres de non-conformité
  • 5 colonnes avec les noms des fournisseurs, une unité de mesure, les pièces livrées, les pièces NC et donc leurs nombre de PPM (pièces par millions de non-conformes)
  • 2 colonnes avec les noms des fournisseurs et leurs chiffres d'affaires.

Donc j'ai un tableau dans les colonnes A --> K rempli.

Sauf que, pour certaines fournisseurs, je n'ai pas de non-conformités, ou pas de ppm, etc et donc j'ai crée un programme pour me faire un tableau regroupant par fournisseur --> leurs taux de service, leurs nombre de NC, leurs ppm et leurs CA.

Problème ! --> Mon programme met environ 30 minutes pour générer mon tableau

Comment optimiser ce dernier pour que l'exécution soit un peu plus rapide ?!

Voici le programme :

Sub Grouper_les_donnees()

Dim i As Integer, j As Integer

    Application.ScreenUpdating = False

    With Worksheets("Feuil1")

        For i = 2 To 600

            For j = 2 To 500

                'Copie le contenu de la colonne A (Nom fournisseurs QSC) dans la colonne M (Nom fournisseur QSC)
                .Cells(i, "A").Copy .Cells(i, "M")
                'Copie le résultat QSC dans la colonne L (Résultats QSC)
                .Cells(i, "B").Copy .Cells(i, "N")

                'Si le nom trouvé dans la colonne M (Fournisseur QSC) correspond à celui trouvé dans la colonne C (Nom Fournisseur FNC)
                If Trim(.Cells(i, "M").Value) = Trim(.Cells(j, "C").Value) Then

                    'If Cells(j, "D").Value <> "" Then

                        'Copie le nombre de FNC dans la colonne M
                        .Cells(j, "D").Copy .Cells(i, "O")

                    'ElseIf Cells(j, "D").Value = "" Then

                        'Cells(i, "O").Value = 0

                    'End If

                End If

                'Si le nom trouvé dans la colonne A correspond à celui trouvé dans la colonne E
                If Trim(.Cells(i, "M").Value) = Trim(.Cells(j, "E").Value) Then

                'Copie les types de données pour les ppm
                .Cells(j, "F").Copy .Cells(i, "P")
                'Copie les quantités NC
                .Cells(j, "G").Copy .Cells(i, "Q")
                'Copie les quantités reçues
                .Cells(j, "H").Copy .Cells(i, "R")
                'Copie la quantité de ppm
                .Cells(j, "I").Copy .Cells(i, "S")

                End If

                If Trim(.Cells(i, "M").Value) = Trim(.Cells(j, "J").Value) Then

                'Copie les chiffres d'affaires des fournisseurs
                .Cells(j, "K").Copy .Cells(i, "T")

                End If

            Next j

        Next i

    End With

End Sub

Par souci de confidentialité, je ne peux pas diffuser le fichier, j'espère que vous comprendrez

Enfin, pourquoi faire un programme et pas, une rechercheV ou un tableau croisé ?

Simplement parce que dans un premier temps, je veux avoir une vision sur l'année puis pour la suite pouvoir générer ce tableau mois par mois et je pense que la macro est un bon moyen d'automatiser cette tâche !

En espérant que quelqu'un pourra me venir en aide !

Bonne journée à vous,

Cordialement,

Floo73

Le mieux serait tout mettre dans des tableaux.. Manipuler les tableaux et coller le tableau. Encore mieux avec des dictionnaires...

Mais ne comprenant pas tes manipulations je ne peux t'aider.

Par contre qqchose qui devrait bien aider c'est remplacer ce genre de ligne:

.Cells(j, "D").Copy .Cells(i, "O")

Par:

.Cells(i, "O") = .Cells(j, "D")

Et si tu as des formules dans ton tableau mettre en début de macro

application.calculation = xlmanual

Bonjour EngueEngue,

Merci pour ta réponse !

J'ai tout d'abord pris en compte ta remarque pour la syntaxe de mes copier/coller et ca accélère déjà un peu le programme !

Ensuite je me suis aperçu de multiples incohérences dans mes données donc je suis en train de revoir ma copie !

Après cette relecture, je t'enverrai le programme par messages privés avec les données pour que tu puisses me donner ton avis !

Merci pour ton aide en tout cas,

Bonne journée,

Cdlt,

Floo73

Rechercher des sujets similaires à "optimisation macro"