Re: Formattage VBA sur report Excel |
Titre du sujet : Re: Formattage VBA sur report Excel par myDearFriend! le 30/11/2007 21:11:03 Re Megaolive, Comme promis, me revoici J'ai brièvement analysé ton code et ta façon de procéder. Je vais te faire quelques remarques que je souhaite [I]constructives[/I], et qu'il convient de prendre NON PAS [I]à la lettre[/I] (je n'ai évidemment pas le monopole du savoir et de la vérité), mais tout simplement comme conseils ou suggestions. A toi d'en retenir ce que tu penses être intéressant... [LIST][*]Tout d'abord, un bon point : l'utilisation d'[I]Option Explicit [/I](pour forcer la déclaration des variables) est une excellente chose. [*]Par contre, la déclaration systématique de tes variables en tête de module n'est pas conseillée. Il convient de le faire plutôt en tête de chaque procédure (Sub / End sub). Pourquoi ? Les déclarations en tête de module sont réservées aux variables dont la valeur doit être conservée et être réutilisée par plusieurs procédures (en ajoutant le mot clé [I]Public [/I]comme tu l'as fait, tu permets même de les réutiliser dans d'autres modules). On s'aperçoit que ce n'était pas ton intention de faire, car par exemple, tu déclares une fois [I]FormatSheet[/I] en tête de module, mais tu lui réaffectes sa valeur dans chaque procédure [I]Sub copy???format()[/I] par la ligne [I]Set FormatSheet = Worksheets("FORMAT")[/I]. D'une manière générale, puisque leur valeur est conservée par Excel, les variables déclarées en tête de module sont plus consommatrices de ressources que celles internes aux procédures, c'est pourquoi il convient de les utiliser avec parcimonie... Les variables déclarées à l'intérieur des procédures libèrent la mémoire qui leur est allouée dès que l'instruction [I]End Sub[/I] est rencontrée. [*]Ensuite, j'ai vu que tu utilisais souvent la sélection des cellules (par l'instruction [I]Select[/I]) avant leur traitement. Sache qu'en VBA, c'est le plus souvent inutile. C'est même source d'erreur parfois, pas franchement agréable pour l'oeil de l'utilisateur et c'est aussi un facteur de lenteur pour application car ça ralentie considérablement les traitements. Certaines instructions vont créer d'office des sélections, c'est le cas par exemple de la méthode [I]Paste[/I], mais ça tu n'y peux rien. Par contre, si tu peux l'éviter, alors il faut le faire. [*]Et pour finir, un autre bon point : la présentation de ton code est assez claire et bien structurée. Et les commentaires sont bien pratiques [/LIST] Voilà c'est, j'espère, l'analyse que tu attendais... Pour finir, voici le code issu de ma propre conception des choses. J'ai notamment pris le parti de parcourrir le tableau "à l'envers". Cette façon de faire me semble plus adaptée et en particulier pour permettre l'insertion de lignes dans le tableau sans être gêné dans les boucles... Si tu dois un jour procéder à des suppressions de lignes en boucle, je te conseille de retenir également ce même principe. Voici le code que j'ai utilisé dans ton exemple ci-joint modifié :
Option Explicit
Cordialement, |
Forums