J'ai un fichier qui fait 15 000 lignes pour 50 colonnes qui me sert de base de données (feuille bdd) pour calculer des nb.si.ens (au moins 50)
> le problème c'est que du coup les formules sont vachement longues à s'exécuter.
J'aurai aimé pour optimiser mes formules les lancer par macro et afficher les résultats dans les cellules du tableau de la feuille "resultat"
J'ai trouvé comment afficher le résultat mais cela m'affiche également la formule, chose que je ne souhaite pas pour ne pas alourdir mon fichier
>> Comment faire pour lancer les nb.si.ens en même temps et afficher seulement le résultat obtenu ?
Ton fichier en retour, regarde si ça te convient. A prendre comme exemple. Le lancement de la macro se fait à partir de l'évenement Change de la feuille bdd.
Merci pour ton travail,
à un détail près c'était parfait lol car il ne faut pas tenir compte du critère "Article"
Exemple : Nombre de prix à 10 de couleur noir différent de NULL = 4
Ma formule est
=NB.SI.ENS(bdd!B:B;"20";bdd!C:C;"<>NULL";bdd!D: D;">0")
Le problème c'est que dans mon vrai fichier, je peux avoir au moins 6 ou 7 critères dans la formule c'est pour ça que je l'écris directement dans la formule
Sub Resultats()
With Sheets("resultat").Range("b2")
.FormulaLocal = "=NB.SI.ENS(bdd!B:B;""10"";bdd!C:C;""OK"";bdd!D:D;"">0"")"
.Value = .Value
End With
With Sheets("resultat").Range("b3")
.FormulaLocal = "=NB.SI.ENS(bdd!B:B;""20"";bdd!C:C;""OK"";bdd!D:D;"">0"")"
.Value = .Value
End With
With Sheets("resultat").Range("c2")
.FormulaLocal = "=NB.SI.ENS(bdd!B:B;""10"";bdd!C:C;""OK"";bdd!E:E;"">0"")"
.Value = .Value
End With
With Sheets("resultat").Range("c3")
.FormulaLocal = "=NB.SI.ENS(bdd!B:B;""20"";bdd!C:C;""OK"";bdd!E:E;"">0"")"
.Value = .Value
End With
End Sub
Après recomptage, il y aurait en fait pratiquement 400 formules à lancer en même temps,
En fouillant un peu, j'ai trouvé un bout de code qui à l'air de fonctionner mais comme j'y connais pas grand chose, quel code est le plus optimiser pour mon fichier entre le tien et celui là
Code:
Sub test()
Dim Cel As Range
Dim myRange As Range
Range("B2") = "=COUNTIFS(bdd!C,""10"",bdd!C[1],""<>NULL"",bdd!C[2],"">0"")"
Set myRange = Range("B2:C10")
For Each Cel In myRange
Cel.FormulaLocal = Cel
Next Cel
End Sub
Comme tu as beaucoup de formules, mieux vaut utiliser le 2ème exemple que je t'ai montré. For each, rique de tourner longtemps avant d'afficher les résultats et de faire planter le programme.