COMPARATEUR EXCEL EN MASSE, AMÉLIORATIONS

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 9 mai 2008 à 00:51
GMY Messages postés 6 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 24 juin 2013 - 24 juin 2013 à 09:38
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/46599-comparateur-excel-en-masse-ameliorations

GMY Messages postés 6 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 24 juin 2013
24 juin 2013 à 09:38
Bonjour,

Vous pouvez utiliser la classe "FileSearch" qui est ici : http://silkyroad.developpez.com/vba/classefilesearch/

Il faudra adapter le code pour intégrer cette nouvelle classe.

En espérant que cela sera utile.

GMY
cs_toline Messages postés 1 Date d'inscription vendredi 21 juin 2013 Statut Membre Dernière intervention 21 juin 2013
21 juin 2013 à 16:59
Bonjour à tous,

J'aurais aimé testé cette macro mais malheureusement un message d'erreur apparaît "Erreur d'exécution 445 - Cet objet ne gère pas cette action".

Il semble que l'application FileSearch ne fonctionne pas sous Excel 2010. Comment contourner ce problème?

Merci par avance!
sghchafaa Messages postés 104 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 16 juillet 2010
2 juil. 2008 à 12:08
Sélèm alikom;
c'est pour la premiere fois que je m'interesse a une discussion d'un code proposer,et sa fait vraiment le grand plaisir de trouver des gens pareille,vous former((GMY;;mortalino;;mabrouklepoux;;.....))un vrai bon equipe de travail collaboratif.
mais,tant qu'un debuteur de ZéRO en programmation,j'en ai besoin de plus d'explication,car je prepare un PFE(projet fin d'etude) qui se deroule dans la creation d'un programme qui mermet de comparer deux fichier informatiser(image;texte,..)et de fournir un pourcentage de rassemblage,se qui permet a un enseignant par exemple; de donner la note pour un eleve,si la cohérense des deux fichier(source de l'enseignant) et celle de l'eleve sont cohérente de 50%,l'eleve prendra ne note de 10/20 etc....
pour ceux qui sont interesser,je suis pret a les envoyer le cahier de charge du prog,la probleme se citu au nivo de l'algorithme ou l'idée generale,je ne sais pas d'ou commencer.
merci pour votre attention aussi bien que votre passion.
Sélèm alikom
MickelVB Messages postés 1 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 6 juin 2008
6 juin 2008 à 23:34
Super, juste une petite remarque, si le nom du fichier source le même que celui du fichier cible,tu as un message d'erreur lors de l'ouverture du fichier cible. Il faut s'assurer que les noms des fichiers dans les dossiers cibles et sources soient différents.
manubok Messages postés 1 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 28 mai 2008
28 mai 2008 à 12:04
Simplicité, rapidité !

J'avais une cinquantaine de fichiers à comparer avec 8 onglets dans chaque.
Il m'a fallu que qq minutes pour l'ensemble.

Bravo.
GMY Messages postés 6 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 24 juin 2013
12 mai 2008 à 01:01
Je remercie Mortalino pour ses conseils.

Je suis contient qu'il y a des optimisations possibles.

Je suis parti d'un code brut qui fait le travail (c'est génial de trouver du code comme celui-là et de l'améliorer) et pour mon besoin immédiat, je me suis limité à la performance de la boucle de parcours des cellules.

A propos des différents points :
1-J'ai découvert cela en modifiant ce programme, franchement embêtant, je pratique régulièrement ce genre de raccourci pour rendre plus lisible mon code. J'abandonnerai, à contre cœur, ce truc dans mes prochains développements.

2-Renfield a très bien défendu mon point de vue, je l'en remercie.

3-Je me doutait que la boucle sur les collections était plus rapide que la boucle sur les items. Mais, j'ai quelques problème avec la manipulation du "for each"

Pour le paramètre "ind" inutilisé, il m'avait même induit en erreurs. J'aurai du le supprimer.

Enfin, s'il y en a qui ont des idées et un peu de temps, ils peuvent apporter leurs améliorations.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 mai 2008 à 15:10
Pour comparer des fichiers Excel, l'autre solution est de passer par Odbc et Windiff, mais c'est vrai qu'il y a des limitations (type de donnée unique par colonne Excel) :
XL2Csv : Convertir un fichier Excel en fichiers Csv (ou en 1 fichier txt)
www.vbfrance.com/code.aspx?ID=44827
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 mai 2008 à 15:31
Effectivement Renfield,

je ne l'avais pas vu comme ça ;)
C'est vrai que récemment j'ai du faire un Ctrl H d'une chaine de caractères déjà comprise dans une autre.. bonjour les dégâts :$

Bonne remarque !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 mai 2008 à 07:27
pour ta remarque 2, mortalino, je ne te suis pas (ok avec les autres)

si le rouge ne lui conviens plus, il est simple de modifier sa couleur, en faisant ainsi.
si il plante du vbRed partout... (et si tu suppose, en plus, qu'il a de "vrai" vbRed dans son code, un Ctrl+H ne va que fiche le bazar).
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
9 mai 2008 à 00:51
Salut,

j'ai juste regardé comme ça, pas testé.

Toi qui veux optimiser, voici qques pistes :

1/ Dim i, j, k As Integer
Attention, seul k est de type Integer, i et j sont Variant (donc plus lourd en octets)
Voici la bonne syntaxe :
Dim i As Integer, j As Integer, k As Integer

Ensuite au début, j'ai vu :
2/ Const CouleurCellModifiee = vbRed
vbRed étant déjà une constante VB, cela ne sert à rien de créer ta propre constante, ayant la même valeur qu'une autre. Quand t'en as besoin dans ton dev, utilise tout simplement vbRed au lieu de CouleurCellModifiee.

3/ Les boucles.
Il est plus rapide de faire une boucle sur les collections plutôt que par leurs items

Dim sSheet As Sheet

For Each sSheet in ActiveWorkBook.Sheets
MsgBox sSheet.Name
Next sSheet

là ce sera plus rapide que

Dim i As Integer

With ActiveWorkBook
For i = 1 to .Sheets.Count
Msgbox .Sheets(i).Name
Next i
End With

Aller pour finir (ça c'est ma spécialité grâce à MZTools) :
* dans Sub CompareTwo(indexS, IndexC) --> la variable 'j' n'est pas utilisée
* dans Sub FindMaxRangeSource(ind) --> le paramètre 'ind' n'est pas utilisée
* dans Sub FindMaxRangeSource(ind) --> le paramètre 'ind' n'est pas utilisée

Voilà, en espérant d'avoir filé une astuce d'optimisation ;)
++
Rejoignez-nous