Accélérer Macro Boucle lecture en 1 seule fois

Hello tout le monde,

Voilà je début en VBA et j'ai un petit problème; j'ai réalisé un somme.si.ens en version VBA pour que cela me prenne moins de place et il fonctionne parfaitement. Or, la macro doit chercher les info dans un autre onglet puis les mettre dans le tableau voulu avec les critères. Et la macro est un peu longue (6h).

Je pense que c'est dû au faut qu'il y ait une boucle et qu'il doit revenir sans cesse dans le tableau et ceux pour 2000lignes et 2000 colonnes. J'ai éssayé de mettre .Value mais ça ne fonctionne pas. Pouvez vous m'aider?

Voici la macro

Sub BomSarah()

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

Application.EnableEvents = False

ActiveSheet.DisplayPageBreaks = False

Dim x As Integer

Dim y As Integer

Set qty = ThisWorkbook.Worksheets("BOM indice OK article E enlevé").Range("J:J")

Set article = ThisWorkbook.Worksheets("BOM indice OK article E enlevé").Range("A:A")

Set composant = ThisWorkbook.Worksheets("BOM indice OK article E enlevé").Range("E:E")

For y = 3 To 2055

For x = 14 To 2053

Cells(x, y) = WorksheetFunction.SumIfs(qty, composant, Cells(x, 1), article, Cells(5, y)) * Cells(8, y)

Next x

Next y

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Application.EnableEvents = True

ActiveSheet.DisplayPageBreaks = True

End Sub


Et je pense que le range(L:L) peut être long aussi puisqu'il prend des lignes à l'infini non ?

Salut,

Un fichier exemple est tjrs préférable. pour accélérer le traitement Préfère les variables tableaux (Variant) mais j'attend ton fichier si je peux t'aider.

A+

Il y a beaucoup de données confidentielles, je vais me modifier avant de la publier

Bonjour,

Pas sûr que tu choisisses la bonne option.

Garde tes formules sur la 1ère ligne, tu les recopies lors d'une mise à jour (1 double-clic) et tu copies-colle valeurs à nouveau sur les autres lignes.

Ca sera beaucoup plus rapide qu'en vba.

Non seulement parce que le traitement est ralenti en vba, mais en plus vba est mono thread, alors que les formules utilisent tous les threads. Si tu as 8 coeurs déjà tu multiplies le temps par 8 (théorique, d'accord c'est moins).

4 000 000 de matricielles, il y a du boulot quand même...

eric

Edit : ou alors il faut changer de méthode dans la macro, ne pas utiliser la même fonction sur toutes les cellules.

Bonjour,

Lorsque je les fais avec les formules excel, cela m'a prit énormément de mémoire et le fichier plantait, c'est pour cela que j'ai choisi la VBA. Avec ceci j'ai pu diminuer la mémoire de 2/3.

Malheureusement le fichier est toujours long.

Je n'arrive pas à importer le fichier car il fait plus de 1MO, j'ai essayé de le réduire mais j'ai gagné qu'un Mo sur 14 xP

Bonjour,

Quelques dizaines de lignes devraient suffire.

Une suggestion :

je suppose que tu le lances régulièrement et que ce n'est pas un usage unique.

Dans ce cas tu pourrais stocker à quelle ligne tu as fini, et la fois suivante ne recalculer que pour les nouvelles ce qui réduira d'autant ta boucle sur les anciennes lignes. Seules les nouvelles devant les explorer toutes.

eric

Bonjour,

Je souhaiterai éviter de revenir une 20aine de fois sur le fichier. Et même en supprimant des lignes mon fichier est trop gros.

Que dois je faire ?

Bonjour,

à mon avis tu vides seulement les cellules (Suppr dessus) au lieu de sélectionner les lignes entières et clic-droit Supprimer.

eric

Rechercher des sujets similaires à "accelerer macro boucle lecture seule fois"