Une macro qui fait ralentir le programme

Y compris Power BI, Power Query et toute autre question en lien avec Excel
l
luky123
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 3 juin 2018
Version d'Excel : 2007

Message par luky123 » 10 août 2018, 02:44

bonjour j' ais une macro qui ralenti le programme comment je peux faire pour il ralentit pas
voici
Function Couleur(cl As Range) As Long 
Application.Volatile 
Couleur = cl.Interior.ColorIndex 
End Function 
Function NVert(cl As Range) As Integer 
Application.Volatile 
Dim cel As Range 
NVert = 0 
For Each cel In cl 
If Couleur(cel) = 14 Then 
NVert = NVert + 1 
Else 
Exit For 
End If 
Next 
End Function 
merci pour votre réponce
bien à vous
luky
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 447
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 août 2018, 03:32

Bonjour,

Et en quoi elle ralentit ? Et quel programme ?

NB- Cela t'aurait vraiment gêné de mettre ton code sous balises Code ?
l
luky123
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 3 juin 2018
Version d'Excel : 2007

Message par luky123 » 10 août 2018, 04:06

bonjour j ais plusieurs pages plus de 30 page je dois trier par date puis travaille j ais plusieurs a faire
ce vba c est pas le séparer par un sub ?????
bien a toi
luky
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 447
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 août 2018, 04:18

Rien compris ! ::(
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'910
Appréciations reçues : 693
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 10 août 2018, 04:20

Bonjour luky-luke,

quel dommage que ton code vba ne tourne pas plus vite que ton ombre !  ::( :cry:

je te propose celui-ci :
Option Explicit

Dim cel As Range, nb&

Function NVert(Plg As Range) As Integer
  Application.Volatile
  nb = 0
  For Each cel In Plg
    If cel.Interior.ColorIndex = 14 _
      Then nb = nb + 1 Else Exit For
  Next cel
  NVert = nb
End Function
* note que Next cel au lieu de Next accélère l'exécution, car VBA n'a pas à chercher à quelle variable correspond le Next pour pouvoir l'incrémenter (vu qu'ici, on l'indique explicitement)

* j'ai mis la déclaration des variables au niveau global du module : ça évite que ce soit lu à chaque appel de la fonction, donc ça évite aussi que VBA fasse à chaque appel une allocation de mémoire (y compris l'initialisation par défaut des variables)

* le seul travail de la fonction Couleur() est : Couleur = cl.Interior.ColorIndex ; aussi, je l'ai intégré dans la fonction NVert() : ça évite donc tous les multiples appels de la sub Couleur() par la sub NVert() ! (si la plage de cellules transmise est conséquente)

* pour totaliser le nombre de cellules de couleur 14, l'utilisation de la variable locale nb est peut-être plus rapide que les multiples affectations de la valeur de la fonction ; d'où le nb à la place du NVert (sauf à la fin, bien sûr, juste avant la sortie de sub)

* si ça suffit pas, j'te propose d'acheter un PC plus puissant (processeur i7 dopé aux MHz, avec overclocking et tout l'toutim) ; n'oublie pas d'y atteler Jolly Jumper, le cheval le plus rapide de l'Ouest ! seul Tornado, le cheval de Zorro, peut aller aussi vite que lui !

dhany   :(huuu):
l
luky123
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 3 juin 2018
Version d'Excel : 2007

Message par luky123 » 10 août 2018, 23:12

salut mdr Jolly Jumper, sa fonctionne quelque seconde de -
je peux te demander quelque chose
on ces faire une vba qui travaille sur plusieurs classeur, et que un classeur es fermer ?
ou les deux ouvert ?? classer 1 classeur 2 et sa peux aller sur 6 classeurs
merci pour ta réponse
luky qui tir plus vite que son ombre lolllll
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'409
Appréciations reçues : 405
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 11 août 2018, 16:35

Bonjour,

une fonction volatile est recalculée à chaque fois que tu valides une cellule quelconque.
Si elle est gourmande ça induit des lenteurs.
Change de technique :
- une colonne avec des "x" (que tu peux mettre/oter par une macro événementielle)
- une MFC qui met la couleur selon ces "x"
Tu n'as plus qu'à compter tes x avec une simple formule.
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
l
luky123
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 3 juin 2018
Version d'Excel : 2007

Message par luky123 » 19 août 2018, 17:35

bonjour ce passe bien le week
une question
voila sur ce tableau la première feuille ces des renseignement .
avec des noms par n° es que ces possible de faire une vba pour la fin journée .
la deuxième ligne n1 vas dans la feuille n1 en ligne 2
n2 vas dans la feuille n2 ligne 2.
attention il y a 3 pose et 75 nom
tu serais faire quelque chose pour moi
un grand merci d avance
luky
teste 5.xlsx
(11.82 Kio) Téléchargé 1 fois
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'910
Appréciations reçues : 693
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 20 août 2018, 00:54

Bonjour luky,

je te retourne ton fichier modifié :
test 5.xlsm
(20.98 Kio) Téléchargé 5 fois
* tu es sur la feuille "n5" ; note bien que y'a seulement la ligne 1 des entêtes
* va la feuille "n4" : idem ; va sur les feuilles "n3" ; "n2" ; "n1" : idem

* va la feuille "travail" ; ah, là, j'ai ajouté quelques données fictives pour que tu puisses mieux te rendre compte du résultat de la macro ; note bien aussi que j'ai mis une donnée erronée en A4 ; surtout, ne la corrige pas ! c'est pour que tu puisses voir que la macro ne plante pas si on saisit un nom de feuille inexistant ; la macro va simplement ignorer cette ligne et faire son job pour toutes les autres feuilles qui existent ; tu pourras voir que la feuille "n3" va rester inchangée, mais t'inquiètes pas : c'est normal.

* Ctrl d ➯ travail effectué !  :)  t'as plus qu'à vérifier les résultats sur les autres feuilles : à part pour "n3", y'a une ligne de plus

* reviens sur la feuille "travail" ; corrige l'erreur en A4 : remplace n35 par n3 ; fais Ctrl d ➯ ça fait une ligne de plus sur toutes les autres feuilles (y compris la feuille "n3")

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.
merci de me dire si ça te convient.

dhany  Image
Modifié en dernier par dhany le 20 août 2018, 07:47, modifié 1 fois.
l
luky123
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 3 juin 2018
Version d'Excel : 2007

Message par luky123 » 20 août 2018, 06:14

bonjour
merci mais le résultat dois toujours rester en ligne 2 ex 578 devais venir en ligne 3 et 12 en ligne 2
pour voir les résultats qui vient arriver .
et les N vas jusque 75 comment je peut faire .
un grand merci pour ton aide
luky :mrgreen: ;;)
ok jais trouver jusque 75 sa marche bien un grand merci
luky
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message