Une macro qui fait ralentir le programme

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

Bonjour,

Et en quoi elle ralentit ? Et quel programme ?

NB- Cela t'aurait vraiment gêné de mettre ton code sous balises Code ?

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

Rien compris !

Bonjour luky-luke,

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

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

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

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

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

1teste-5.xlsx (11.82 Ko)

Bonjour luky,

je te retourne ton fichier modifié :

5test-5.xlsm (20.98 Ko)

* 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

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

ok jais trouver jusque 75 sa marche bien un grand merci

luky

je comprends pas ta demande ; tu écris « le résultat doit toujours rester en ligne 2 » et après tu écris « 578 devrait venir en ligne 3 » ; alors si c'est 3, c'est pas 2 ! et précise sur quelle feuille c'est !

pour le nombre de feuilles, ça gêne pas : tu peux avoir la feuille « n75 ».

dhany

ajout : est-ce que tu veux dire que les résultats doivent toujours commencer à partir de la ligne 2 ?

bonjour

oui quand on va sur la feuille on voir les dernier résultat. du jour

si il descend on le voie pas il faut faire ALT END pour voir

bien à toi

luky

@luky

tu a écrit :

il faut faire ALT END pour voir

il me semble que c'est plutôt avec CTRL END


autre version du fichier :

1test-5.xlsm (21.24 Ko)

* la dernière feuille est "n75" ; y'a uniquement les entêtes

* idem pour les autres feuilles dont le nom commence par "n"

* va sur la feuille "travail" ; fais Ctrl d ; vérifie les résultats

tu as fourni un fichier avec trop peu de données

➯ y'a qu'une seule ligne par feuille !

dhany

salut j ais sue mettre tous sur un fichier et sa marche merci

comment je pourrai faire pour la feuille de résultat une VBA

la feuille de recherche est sur la première ligne jais des commentaire sur le tableau

puis il dois aller par le nom dans les feuille N1 N2 N3 ex dans la colonne G QT prendre les ligne de 2 a 32 pour 31 jour 31 pour 30 jour et 29 pour 28 jour et le mettre ex harrit ligne 4

bien a toi

luky et un grand merci sa me fait plaisir de travaillé avec toi tu es sympa

1test-6.xlsm (42.77 Ko)

Bonjour luky,

je te retourne ton fichier modifié :

1test-6.xlsm (46.14 Ko)

tu es sur la feuille "RESULTAT" ; note bien que y'a aucune donnée sous les entêtes J1 à J31 ; fais Ctrl f

Alt F11 pour voir le code VBA : c'est dans le Module2, sub CpyQT()

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.


attention : pour la 1ère sub Dispatch() tu as fait quelques erreurs ! alors regarde dans le Module1 ma sub Dispatch() et compare attentivement mon code VBA avec le tien.

dhany

Bonjour,

Désolé d'intervenir pour ça mais je pense qu'il faut le dire.

Dhany, il y a des raccourcis clavier très utilisés à éviter pour les macros :

Ctrl+F (Rechercher), Ctrl+H (Remplacer), Ctrl+C et Ctrl+Ins (Copier), Ctrl+X (Couper), Ctrl+V et Maj+Ins(Coller), Ctrl+S (Enregistrer), Ctr+Z (Défaire), Ctrl+Y (Refaire)

Et d'autres dans une moindre mesures comme Ctrl+B (Gras), Ctrl+I (Italique), Ctrl+U (Souligner), Ctrl+P (Imprimer) et sûrement d'autres selon les utilisateurs.

Ce n'est pas sympa de les obliger à aller dans les menus pour un simple copier (déjà vu) ou rechercher.

eric

Bonjour eriiic,

tu as raison pour Ctrl f, par exemple ; mais y'a un équivalent simple pour ces 3 là :

* au lieu de Ctrl c faire Ctrl Inser (touche Insertion)

* au lieu de Ctrl x faire Maj Suppr (touche Suppression)

* au lieu de Ctrl v faire Maj Inser

ces 3 raccourcis sont valables dans toutes les applications, même Word et le Bloc-notes de Windows (c'est pas spécifique à Excel) ; pour les autres raccourcis clavier, le demandeur est bien sûr libre de choisir une autre lettre que celle que j'ai choisie.


d'un autre côté, personnellement, je suis habitué à utiliser des raccourcis clavier : c'est plus rapide que d'utiliser la souris pour cliquer sur un bouton ; et y'a aussi qu'un bouton prend de la place sur l'écran et quand c'est déjà encombré, c'est parfois difficile de trouver un endroit où le mettre ! parfois aussi, une macro doit être lancée sur plusieurs feuilles de classeur ; ça oblige à mettre un bouton sur chaque feuille du classeur ! alors qu'un raccourci clavier n'a pas cet inconvénient.

après, je laisse le demandeur choisir selon ses goûts, et ça m'est déjà arrivé de remplacer un raccourci clavier par un bouton quand il le réclame.

dhany

bonjour

merci grand chef manitou lollll

luky est contant lol la calumet la paix .

passe un bon weekend

luky

merci ecricc je connais les raccourci clavier et des fait sa me ces bien sur internet je c'est copier des chose que en fessant normal je ces pas le faire bon weekend

luky

Rechercher des sujets similaires à "macro qui fait ralentir programme"