SYSTÈME D'APPARIEMENT SOUS EXCEL

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 17 août 2005 à 22:06
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 17 août 2005 à 22:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33281-systeme-d-appariement-sous-excel

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 août 2005 à 22:06
Oh ! là ! bonne mère !

Salut, je viens de regarder ta source, et qlq remarques directes... Tu sembles ignorer l'utilisation de la fonction "Dim", cela serait un grand secours dans les modules, et les feraient fondre, comme neige au soleil... Renseigne toi, donc les déclaration de tableau...

(A noter, je suis tombé sur une erreur dans le Module6, qui ne permet pas de voir exactement comment fonctionne le tableau...)

Si je dis juste un mot sur Dim adapté au module 6...

Extrait : Tu code ceci :

If nblut = 3 Then
Worksheets("insc").Select
Cells(J, colcat).Select

If ActiveCell.Value = poids2 Then
Cells(J, colnom).Select
x_1 = ActiveCell.Value
Cells(J + 1, colnom).Select
x_2 = ActiveCell.Value
Cells(J + 2, colnom).Select
x_3 = ActiveCell.Value
Cells(J, colnom + 1).Select
x_1_1 = ActiveCell.Value
Cells(J + 1, colnom + 1).Select

...etc...

Les variables x_1_1 ; x_3 ; etc... pourraient être trés avantageusement déclarées dans un tableau avec DIM, par :

Dim X(indice1, indice2) as Double

en remplacant indice1 et indice2 par le nb maximum "d'indice" que tu utilises...

ENSUITE, l'utilsation de :

Cells(J, colnom).Select
x_1 = ActiveCell.Value

n'est pas optimable, car tu demandes à excel d'aller sur la case (J, colnom) et de la sélectionner, puis de retourner la valeur de la case fraîchement sélectionnée... Oui, bien ça fonctionne ! MAIS... en fait, tu demandes à Excel de faire comme si c'était un utilisateur... IL est plus rapide d'accéder directement en mémoire au contenu des cellules... Pour ce faire, il suffit de faire :

x_1 = Cells(J, colnom).Value

Tu gagnes du temps, et de plus tu ne verra plus le tableau se défiler devant les yeux...

ET tu vois qu'associé à DIM en remplacement des x_1, etc... Tu pourras mettre le tout dans une boucle FOR TO NEXT...

LA forme global donnera un truc comme ceci :

Dim X(i1,i2)
FOR t= machin to machin_truc
for t2= machin2 to machin_truc2
X(t,t2) = Cells( J+t , colnom + t2).Value
next t2
next t

enfin... c'est qu'un exemple (surement pas fonctionnel), à transformer et à adapter à ton cas...


ET tout ceci te donneras une grande vitesse d'exécution...

Enfin, j'arrête là mes remarques... j'espère juste d'avoir donné quelques pistes pour améliorer les choses...

Amicalement,
Us.
Rejoignez-nous