Bonjour à tous et à toute,
Mes capacités en VBA sont limitées.
J’ai de nouveaux un problème avec mon fichier Excel. Il est volumineux ce qui ralenti considérablement la macro de traitement. Je pense qu’il est possible de le faire maigrir parce que la page consacrée au stockage des données est volumineuse.
La page de stockage est divisée en 2 parties, la première contient les données brutes et la deuxième j’additionne des combinaisons possibles et c’est cela qui est très volumineux.
Pour expliquer les combinaisons, prenons le cas avec 3 éléments a, b et c. le nombre de permutations possible sans répétition est : a, b, c, a+b, a+c, b+c, a+b+c soit 7 permutations possible.
Je ne sais pas s’il existe un code pour générer les sommes de permutations mais je suis face à 14 éléments ce qui donne un nombre de permutations très important. De plus je rapatrie successivement 45 colonnes pour traitement en feuille »B ». Pour réduire le volume du fichier, je garde la première ligne de calcul des 45 premières colonnes que je fais glisser jusqu’en bas et que je colle ensuite en feuille »B ».
Ma question est la suivante, existe-t-il une solution pour éviter toutes les formules de permutations possibles qui finissent par donner du volume et par ralentir l’autre macro. L’automatisation par une boucle de cette partie serait la bienvenue plutôt que de gérer individuellement chaque tronçon de 45 colonnes. Il faut reconnaître que cette partie ressemble a du bricolage.
Merci par avance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Sub MacroXX()
 
'
'1) Selection et les formules sont glissées jusqu'en ligne 3379
 
    Range("Z20:BR20").Select
    Selection.AutoFill Destination:=Range("Z20:BR3379"), Type:=xlFillDefault
 
 ' le tableau est copié sur la feuille "B"
Set shtTo = Worksheets("B")
Set shtFrom = Worksheets("A")
shtTo.Range("A20:N3379").Value = shtFrom.Range("Z20:BR3379").Value
 
  ' lancement de la macro traitement
  MacroXY
 
'pour gagner en mémoire, effacement du tableau crée sauf la 1° ligne
 
    Sheets("A").Select
    Range("Z21:BR3379").Select
    Selection.ClearContents
 
'2) Selection et les formules sont glissées jusqu'en ligne 3379
 
    Range("BS20:DK20").Select
    Selection.AutoFill Destination:=Range("BS20:DK3379"), Type:=xlFillDefault
 
 ' le tableau est copié sur la feuille "B"
Set shtTo = Worksheets("B")
Set shtFrom = Worksheets("A")
shtTo.Range("A20:N3379").Value = shtFrom.Range("BS20:DK3379").Value
 
  ' lancement de la macro traitement
  MacroXY
 
'pour gagner en mémoire, effacement du tableau crée sauf la 1° ligne
 
    Sheets("A").Select
    Range("BS21:DK3379").Select
    Selection.ClearContents
 
'3) Selection et les formules sont glissées jusqu'en ligne 3379
 
    Range("DL20:FD20").Select
    Selection.AutoFill Destination:=Range("DL20:FD3379"), Type:=xlFillDefault
 
 ' le tableau est copié sur la feuille "B"
Set shtTo = Worksheets("B")
Set shtFrom = Worksheets("A")
shtTo.Range("A20:N3379").Value = shtFrom.Range("DL20:FD3379").Value
 
  ' lancement de la macro traitement
  MacroXY
 
'pour gagner en mémoire, effacement du tableau crée sauf la 1° ligne
 
    Sheets("A").Select
    Range("DL21:FD3379").Select
    Selection.ClearContents
 
'Etc...
 
End Sub