En novembre dernier j’ai fait appel 3 ou 4 fois à votre expertise pour me faire avancer sur quelques fonctions et je vous renouvelle mes remerciements.
Pour rappel voici mon projet de départ :
Lien supprimé
Depuis j’avance doucement, je bricole, jonglant avec mes vielles connaissances en Visual basic et l’aide disponible sur excel.
J’arrive enfin à un résultat, la macro fonctionne, je voudrais y ajouter encore quelques options, mais avant ça j’aimerais optimiser la boucle principale. En effet le temps de traitement pour croiser deux fichiers de plus de 5000 lignes prend plus de 10 minutes sur un ordi moyen.
Voila le noyau de recherche pour l’option la plus simple :
WB1 et WB2 sont les noms des deux classeurs à comparer
SH1 et SH2 sont les noms des deux feuilles
Lc1 et Lc2 nombre de lignes total de chaque tableau
Ct1 et Ct2 nombre de colonnes total de chaque tableau
Nc1 et Nc2 Numéro de colonne des deux tableaux à comparer
Lt1 et Lt2 Numéro de ligne contenant les titres de colonne
LtB() Correspond aux numéros de colonnes à transférer du 2em tableau au 1er
J’ai ajouté « Vs2 = Lc2 » en fin de boucle Vs1 pour raccourcir le temps de recherche lorsque une valeur est trouvée, mais dans une autre option j’intègre autant de ligne que de résultats correspondants. Ce qui rend la recherche très longue.
Est-ce que si je copie les valeurs des deux colonnes à comparer dans des variables avant de comparer cela fait gagner du temps ?
Peut ont raccourcir le traitement en faisant un tri des deux colonnes avant ?
Vais-je gagner en rapidité, si au lieu de copier les valeurs dans le tableau à l’intérieur de la boucle, je mets en variable les numéros de lignes, pour compléter le tableau à la fin ?
Comment puis-je intégrer un genre de chronomètre dans ma boucle pour faire des tests et connaître le solution la plus rapide ?
Même si tout ne vous semble pas clair, pouvez vous m’aiguiller ?
Si vous avez besoin de voir ma macro entière pour comprendre je veux bien vous l’envoyer en privé mais je dois avouer que c’est un gros « torchon » de débutant.
Merci aux courageux
A bientôt certainement.
Message édité par: sniker, à: 06/03/2006 13:06
Pour rappel voici mon projet de départ :
Lien supprimé
Depuis j’avance doucement, je bricole, jonglant avec mes vielles connaissances en Visual basic et l’aide disponible sur excel.
J’arrive enfin à un résultat, la macro fonctionne, je voudrais y ajouter encore quelques options, mais avant ça j’aimerais optimiser la boucle principale. En effet le temps de traitement pour croiser deux fichiers de plus de 5000 lignes prend plus de 10 minutes sur un ordi moyen.
Voila le noyau de recherche pour l’option la plus simple :
WB1 et WB2 sont les noms des deux classeurs à comparer
SH1 et SH2 sont les noms des deux feuilles
Lc1 et Lc2 nombre de lignes total de chaque tableau
Ct1 et Ct2 nombre de colonnes total de chaque tableau
Nc1 et Nc2 Numéro de colonne des deux tableaux à comparer
Lt1 et Lt2 Numéro de ligne contenant les titres de colonne
LtB() Correspond aux numéros de colonnes à transférer du 2em tableau au 1er
Code:
' Integration des lignes dans le tableau A pour l option1 '
'----------------------------------------------------------'
If Option1.Value = True And Option2criteres.Value = False Then
' Recopie les titres du 2em tableau dans le premier'
For i = 0 To j - 1
celval = Workbooks(WB2).Worksheets(SH2).Cells(Lt2, LtB(i) + 1).Value
Workbooks(WB1).Worksheets(SH1).Cells(Lt1, Ct1 + i + 1).Value = celval
Next i
For Vs1 = Lt1 + 1 To Lc1
valeur = Workbooks(WB1).Worksheets(SH1).Cells(Vs1, Nc1).Value
For Vs2 = Lt2 + 1 To Lc2
If valeur = Workbooks(WB2).Worksheets(SH2).Cells(Vs2, Nc2).Value Then
For i = 0 To j - 1
celval = Workbooks(WB2).Worksheets(SH2).Cells(Vs2, LtB(i) + 1).Value
Workbooks(WB1).Worksheets(SH1).Cells(Vs1, Ct1 + i + 1).Value = celval
Next i
Vs2 = Lc2
End If
Next Vs2
Next Vs1
End If
J’ai ajouté « Vs2 = Lc2 » en fin de boucle Vs1 pour raccourcir le temps de recherche lorsque une valeur est trouvée, mais dans une autre option j’intègre autant de ligne que de résultats correspondants. Ce qui rend la recherche très longue.
Est-ce que si je copie les valeurs des deux colonnes à comparer dans des variables avant de comparer cela fait gagner du temps ?
Peut ont raccourcir le traitement en faisant un tri des deux colonnes avant ?
Vais-je gagner en rapidité, si au lieu de copier les valeurs dans le tableau à l’intérieur de la boucle, je mets en variable les numéros de lignes, pour compléter le tableau à la fin ?
Comment puis-je intégrer un genre de chronomètre dans ma boucle pour faire des tests et connaître le solution la plus rapide ?
Même si tout ne vous semble pas clair, pouvez vous m’aiguiller ?
Si vous avez besoin de voir ma macro entière pour comprendre je veux bien vous l’envoyer en privé mais je dois avouer que c’est un gros « torchon » de débutant.
Merci aux courageux
A bientôt certainement.
Message édité par: sniker, à: 06/03/2006 13:06