Bonjour,
J'ai aujourd'hui un fichier de 250 000 cellules a devoir gérer avec 40 colonnes et 6215 lignes.
Ce fichier contient l’ensemble des références en gestion sur notre site.
Le fichier a pour but de venir comparer pour chaque références les prévisions de vente du Moi M avec le Mois M-1, M-2…
Si je laisse les formules dans toutes ces cellules, le fichier devient trop volumineux et non manipulable.
J’ai donc pensé à passer par du VBA qui viendrait exécuter ma formule se trouvant dans une cellule et la copier/coller sur une plage définie.
J’ai donc tapé ce code
Cela fonctionne mais le mise à jour prend tout de même 4 à 5 minutes.
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 Sub copie_colle_formules() ' ' copie_colle_formules Macro ' ' Dim nbligne As Integer Dim DernColonne As Integer nbligne = Sheets("Analysis").Range("I5").End(xlDown).Row DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column For i = 10 To DernColonne 'copie la formule et la colle sur la bonne cellule Cells(3, i).Select Application.CutCopyMode = False Selection.Copy Range(Cells(5, i), Cells(nbligne, i)).Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'remplace la formule par la valeur Range(Cells(5, i), Cells(nbligne, i)).Value = Range(Cells(5, i), Cells(nbligne, i)).Value Next End Sub
Les Formules se trouvant sur la ligne 3 ressemble à :
J’utilise la formule INDIRECT() pour rendre la sélection de l’onglet dynamique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 =SI(ESTERREUR(RECHERCHEV($E3;INDIRECT("'" & J$4 & "'" & "!$C$3:$S$6215" );Analysis!J$1;0));"";RECHERCHEV($E3;INDIRECT("'" & J$4 & "'" & "!$C$3:$S$6215" );Analysis!J$1;0))
Qqun aurait-il une bonne idée
Partager