Mélange de colonnes

troujean Messages postés 13 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 décembre 2005 - 9 déc. 2005 à 00:11
troujean Messages postés 13 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 décembre 2005 - 9 déc. 2005 à 13:32
bonjour la commu



j'ai un petit problème en vba.



en fait je dispose d'une matrice, et j'aimerai bien deplacer une
colonne pour la mettre à un autre endroit. le problème c'est que le
mélange doit être aléatoire, et que une seule colonne doit être
déplacée à la fois.





voici ce que je fais :

je genère 2 nombres au hasard représentant le numéro d'une colonne.



<ol>
<li>je coupe la colonne representant le 1e nbr, et je la colle à côté du tableau.</li>
<li>je supprime la colonne vide suite au coupage de colonne du point 1.</li>
<li>j'insère une nouvelle colonne dans la colonne correspondante au 2e nbr généré</li>
<li>je vais rechercher la colonne que j'ai collé en 1, et je la colle dans la nouvelle colonne qui vient d'être créée en 3.</li>
</ol>


voià voilà, comme vous le voyer, c'est pas très beau tout ça...



surtout que ces opérations sont contenues dans une boucle qui va se
repeter au moins 1000 fois, donc ça prend un temps fou, et je dois
absolument faire tourner mon programme plus vite.



le seul truc efficace pour le moment pour gagner du temps est Application.ScreenUpdating
= True et false qui marche très bien pour mon programme, mais je
cherche à l'optimiser encore bien plus.



j'espère que vous saurez encore m'aider comme vous l'avez fait jusqu'ici.





bien à vous,



jean

2 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
9 déc. 2005 à 11:09
salut

ce qu'il nous faudrait savoir pour optimiser, c'est le but de l'operation
car pour savoir comment faire autrement, il faut qu'on sache ce que tu veux faire au final.

sinon pourquoi ne pas placer tes valeurs dans un tableau sous VBA ?
tu pourrai gerer ta matrice directement en tant que variables VBA et non de cellules excel, et eventuellement récrire le contenu de ta matrice VBA dans tes celules excel quand tu en as besoin.

enfin tout ca, comme je disais, ca depend de ce que tu veux faire.

sinon juste un truc, tu peux couper pendant l'operation le calcul automatique sous excel, ca peut faire gagner du temps, et tu recalcul quand tu en as besoin (calcul a la demande). dans ton cas, ca fait un recalcul, au lieu de 4 (1 quand tu deplace ta colonne, 2 quand tu supprime la colonne vide et que les autres se deplacent donc, 3 quand tu recrée une colonne, et 4 quand tu remet les valeurs dedans) rien que ca, ca peut jouer pas mal !
mais la encore, ca va surtout te faire gagner du temps si tu as d'autres cellules de ton classeur qui font reference a ta mtrice, mais ca je suppose que ca doit etre le cas.
0
troujean Messages postés 13 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 décembre 2005
9 déc. 2005 à 13:32
merci pour la réponse, je crois que ça marcherait très bien, le problème c'est que je ne sais pas comment faire.





en fait j'avais pensé essayer de mettre en mémoire certains tableaux,
et les rappeler quand j'en ai besoin, mais je ne sais pas comment
faire, le seule moyen que j'ai trouvé est de coller le tableau quelque
part et de le rechercher en le copiant quand j'en ai besoin.



saurais tu m'expliquer plus en détail la procédure à suivre concernant les variables VBA plutôt qu'en tant que cellules.



avec cette méthode (variable VBA), y a t il moyen de mélanger les colonnes?









pour ce qui est du but du progr, en gros, je suis censé mélanger les
colonnes une par une. après un deplacement de colonne, je regarde la
nouvelle disposition du tableau, et je regarde si le contenu de
celui-ci a l'air rangé.



je dispose d'une matrice avec des 0 ou des 1 ds les celulles, et
j'aimerai que tous les 1 soient regroupés, pour ça je compte
déplacement de colonne après déplacements de colonne, avec des
compteurs la position des 1, et ensuite je compare la solution avec un
autre tableau enregistré. si la solution est meilleure, je remplace
letableau enregistré par le nouveau, etc.



il y a assez bien d'opération dans la boucle et ça prend trop de temps, j'aimerai donc réduire le nombre d'opération.





voilà, merci bien de l'aide





mp si vous voulez que je vous envoie mon progr, ce sera plus simple





à bientôt
0
Rejoignez-nous