Optimmisation générale

supercrapaud

XLDnaute Occasionnel
Bonjour à vous tous,

Je viens au nouvelles car après avoir bourlingué sur le forum, je n'ai pas trouvé ce que je souhaitais. Je voudrais optimiser mes codes mais de manière générale.

Par exemple, lorsque l'on utilise des références à des textbox dans un formulaire, doit-on utiliser me.textbox1.value ou alors juste textbox1. Dans mes macros, je dois utiliser des recherches mais est-ce mieux d'utiliser des select dans tous les sens. par exemple je ne vois pas comment ne pas utiliser des select dans la fonction find ou index.

Je dois faire les mêmes opérations sur plusieurs feuilles en une fois. Dois-je utiliser sheets(array("coco", "toto") ou alors les sélectionner une à une et recopier le code pour chaque ? et utiliser des with plutôt que des select ?

Bref plein de question générales. Je peux vous donner une code si vous le souhaitez (mais il y en a pour une cinquantaine de lignes) mais c'est plus une question de "culture générale". Je remercie d'avance les pros de la prog.

Je vous remercie d'avance.
 

Dranreb

XLDnaute Barbatruc
Re : Optimmisation générale

Bonjour.
Par exemple, lorsque l'on utilise des références à des textbox dans un formulaire, doit-on utiliser me.textbox1.value ou alors juste textbox1
Il vaut mieux toujours préciser le propriétaire de l'objet et sa propriété. Ça documente le code et ça garantit qu'il considère ce que vous précisez quel que soit le contexte. Vous ajoutez TextBox1 comme Item à un dictionnaire, il vous y met ...tout l'objet TexBox dans un variant !
est-ce mieux d'utiliser des select dans tous les sens
Certainement pas. On peux les éviter dans au moins 99,99% des cas ! La méthode Find rend un Range que vous n'êtes pas obligé de sélectionner: vous pouvez l'affecter par un Set à une variable déclarée As Range.

Pour l'optimisation limitez les requêtes Excel: Chargez en une fois vos valeurs de plage en tableau de Variant, travaillez sur le tableau, affectez le tableau en une fois au valeurs de plages.
À +
 

supercrapaud

XLDnaute Occasionnel
Re : Optimmisation générale

Bonjour et merci pour cette reponse tardive!

Pour ce qui est des textbox ou autre cela parait simple. Par contre en ce qui concerne l'explication sur les tableau et variant je suis perdu.

Quand j'utilise la fonction find, je suis bien oblige de selectionner la plage ou je dois chercher les infos, non? Ou alors je dois directement indiquer dim tableau as variant puis inscrire tableau=sheets(x).range("a1:a3") pour ensuite demander a chercher dans tableau la valeur qui m'interesse en passant par (je sais pas quoi d'ailleurs)?

Pour ce qui est d'agir sur plusieurs feuille, vaut-il mieux toutes les selctionner puis ecrire un code commun ou pas? En tout cas merci pour le coup de main.
 

joss56

XLDnaute Accro
Re : Optimmisation générale

Bonjour à tous,

Regarde ce petit fichier. Je ne sais pas si ça répond partiellement à tes interrogations!
Jocelyn
 

Pièces jointes

  • Recherche.xlsm
    20 KB · Affichages: 44
  • Recherche.xlsm
    20 KB · Affichages: 45
  • Recherche.xlsm
    20 KB · Affichages: 47

supercrapaud

XLDnaute Occasionnel
Re : Optimmisation générale

Bonjour et merci encore pour la réponse rapide.

je suis sur mac au boulot donc je devrais regarder cela chez moi mais d'après ce que je comprends, ton formulaire utilise une autre manière d'ajouter des valeurs dans une combobox c'est bien cela ? Il faudrait que je vois comment l'adapter chez moi car les plage que je sélectionne sont en partie utilisée pour faire des recherches dedans. Mais je te remercie pour ces informations.

Qui aurait une réponse sur le fait de faire les mêmes opérations sur plusieurs feuilles ? D'avance merci.
 

Misange

XLDnaute Barbatruc
Re : Optimmisation générale

Hello SuperCrapaud :)

Le VBA est un langage. Et comme tout langage, si il y a des choses obligatoires (les accords en grammaire, l'orthographe), il y a aussi une grande latitude dans la façon de dire les choses. Certains sont bavards (suivez mon regard) d'autre très laconiques. Si les deux se font comprendre c'est parfait il n'y a pas UNE seule bonne façon de faire.
Ceci dit,
1) Tu peux mettre ME.textbox ou textbox, Ce qui compte c'est ce qui est avant : si il y a la moindre ambiguïté possible sur l'origine de ce textbox, ajoute ME, sinon tu peux le faire sauter. Mais mettre ME sans savoir pourquoi tu le fais ... bof.
2) Non et non, les SELECT ne sont pas obligatoires même pour faire une recherche. Ce qui compte ce n'est pas de sélectionner la plage c'est de la définir. L'instruction SET est souvent un peu difficile à comprendre au début. Mais elle est indispensable
SET maplage=range("A1:B200")
je crée un objet range et je lui donne un nom (mais qui n'est pas une plage nommée dans le classeur pour autant) et ensuite j'utilise ce nom : au lieu de sélectionner le range("A1:B200") tu travailles sur maplage que tu n'as pas sélectionnée pour autant. Tu peux y faire tes recherches ou ce que tu veux.

Pour les tableaux en VBA (arrays). C'est une des façons les plus efficaces d'améliorer un code.
J'ai fait un tuto je pense assez complet sur ce sujet avec des exemples
Ce lien n'existe plus (et les 7 pages suivantes !)
En gros : quand tu dois travailler sur une plage de 1000 lignes, la méthode "classique" est de partir de la cellule 1 de la ligne 1, de faire une test par exemple dessus, en fonction du résultat de ce test, faire une opération ou une autre puis de passer à la cellule suivante...
Avec un array : tu prends l'ensemble de la plage, tu déverses son contenu dans un array qui est stocké dans excel en mémoire vive. Tu fais les x milliers de calculs dans cet array, et tu déverses en un seul coup l'array modifié dans la feuille, ce qui va incroyablement plus vite que de le faire ça en lisant et en écrivant cellule par cellule. Sur la première page du tuto il y a un exemple qui te permet de comparer sur ta machine la différence de rapidité, tu verras qu'il n'y a pas photo....

On n'apprend pas d'un coup à parler une langue étrangère sans faute et sans accents. C'est pareil pour VBA. N'essaie pas de le parler parfaitement d'un coup mais essaie de faire des codes compacts (pas de select inutiles) très bien documentés, avec des variables déclarées.
La déclaration de variables n'est pas obligatoire dans excel donc certains s'en dispensent. Sur un petit bout de code écrit sur un bout de bureau pour faire un test ou répondre à une question ici ça peut le faire. MAis dès que tu te lances dans un truc propre, il est indispensable de les déclarer. Ca oblige d'abord à se poser les bonnes questions : qu'est ce que je vais mettre dans cette variable : du texte ? Un nombre avec des virgules, sans virgule ? Est-ce que c'est malin de déclarer as double n qui va représenter les 10 N° de lignes de mon petit tableau ?
En plus ça évite les doublons dans les noms de variables et de se tromper dans leur orthographe (toujours mettre une ou 2 majuscules dans la déclaration et taper le code en minuscules : si après validation de la ligne le nom de la variable reste en minuscule c'est qu'il est mal saisi....).

Autre conseil : indente ton code pour voir sa logique dans les boucles, les test conditionnels, les with/end with
Use et abuse des with et end with

Si tu dois appliquer le même code sur plusieurs feuilles, mets ce bout de code dans une macro séparée (ou une fonction qui reçoit le nom de la feuille en paramètre) que tu appelles, ça évite de recopier 12 fois la même chose en se trompant.

Ta question est très générique, la réponse ne peut que l'être aussi :)
c'est en essayant et en se trompant qu'on finit par apprendre le mieux. Tout le monde en passe par là (et n'a jamais fini d'en passer par là d'ailleurs ...)
 

supercrapaud

XLDnaute Occasionnel
Re : Optimmisation générale

Hello Misange !

ravi de te revoir ici ;-). Merci pour cette réponse complète. Je vais aller voir un peu ton tuto pour améliorer mon fichier de stock (encore et toujours). Et en effet, je tâtonne donc je demande à droite à gauche et j'ai bien trouvé des explications avec des exemples mais là au moins y'a au moins quelqu'un qui m'a expliqué le pourquoi du comment donc c'est bien plus clair comme ça merci !

Je vais recommencer à m'y mettre pour terminer la mise à jour de ce super fichier que tu connais. merci à vous tous. Et si y'en a d'autres qui ont des idées, alors bienvenus.
 

Discussions similaires

Réponses
6
Affichages
143

Statistiques des forums

Discussions
312 492
Messages
2 088 912
Membres
103 983
dernier inscrit
AlbertCouillard