VBA et optimisation formule SOMME.SI.ENS

  • Initiateur de la discussion Initiateur de la discussion skyteam92
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

skyteam92

Guest
Bonjour.

J'ai un classeur avec deux feuilles importantes:
- MRP (qui est un import brut)
- Demande_MRP (qui est le résultat de ma macro traitant les données de la feuille MRP)

J'ai mis le classeur en ligne sur le lien suivant (car trop volumineux)
http://speedy.sh/F29Xe/MRP.xlsm.

L'import (Feuille MRP) contient:
- Colonne A: article
- Colonne E: Quantité que je veux sommer
- Colonne F: je prends le critère=2
- Colonne P: Concaténation Date Année_Semaine.

Dans la feuille Demande_MRP, je feux faire la somme par article et par Date (Année_Semaine).

J'ai crée un code VBA (voir variableMemoire, Routine 1) dans lequel j'utilise la fonction excel somme.si.ens


Code:
tablo(j, k) = Application.WorksheetFunction.SumIfs(fMrp.Columns(5), fMrp.Columns(1), tablo(j, 1), fMrp.Columns(16), tablo(1, k), fMrp.Columns(6), 2)

Mais le temps d'exécution est trop long (environ 250 secondes) et quand j'enregistre le fichier le temps est long aussi.


Pouvez-vous m'indiquer un moyen d'accélérer ce code ?

Merci.

😉
 
Re : VBA et optimisation formule SOMME.SI.ENS

Bonsoir à tous

skyteam92 (Bienvenue sur le forum)
(Et bien le bonjour aux camarades de la SNECMA)

•Pour informations
Si tu utilises les tableaux comme dans ce petit exemple ci-dessous
(en évitant de les remplir avec des boules), ton code pourrait déjà s'optimiser 😉
Code VB:
Global tablo() As Variant
Sub a()
Dim f As Worksheet, derlig&
'///////////////////////A NE PAS CONSERVER///////////////////////////
' partie du code pour créer des données sur la feuille 1
With Sheets(1).Range("A1:E50")
.FormulaLocal = "=ENT(LIGNE()*ALEA()*COLONNE()*CNUM(AUJOURDHUI()))"
.Value = .Value
End With
'//////////////////////////////////////////////////////////////////////

'Ci-dessous partie du code concernant ta question sur le forum
derlig = Cells(Rows.Count, "A").End(3).Row
'remplissage de l'array tablo [ sans boucle , avec valeurs des Colonne A et B de feuille 1)]
tablo = Range(Cells(1, 1), Cells(derlig, 2)).Value
'copie de tablo sans boucle sur la feuille 2
Set f = Sheets(2)
f.Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)).Value = tablo
End Sub




 
Re : VBA et optimisation formule SOMME.SI.ENS

Merci de ta réponse Staple1600.

En effet c'est une bonne idée que de remplir le tableau de cette manière.
Mais en mettant des timer je me suis rendu compte que c'est l'utilisation de la formile somme.si.ens en vba qui allongent considérablement le temps.
Comment on pourrait adapter la forumle à ton code ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
877
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
889
Réponses
33
Affichages
3 K
Réponses
5
Affichages
740
Réponses
2
Affichages
811
D
Réponses
4
Affichages
1 K
Réponses
3
Affichages
1 K
R
  • Question Question
Réponses
1
Affichages
1 K
M
Réponses
4
Affichages
960
mimich_88
M
R
Réponses
3
Affichages
4 K
R
Retour