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 ...)