Bonjour,
Pour commencer je vais me présenter rapidement.
Je m'appelle Olivier, je suis informaticien junior et j'ai été recruté récemment pour une mission dans un groupe très connu de la grande distribution.
Pour présenter rapidement le contexte :
Mon travail consiste a analyser les différents référentiels utilisateurs afin d'étudier les anomalies des bases de données et d'en améliorer la qualité. ( compte mal renseigner / doublons ... )
Pour traiter cette demande, vu mon manque de connaissance/d'accès aux bases de données de l'entreprise, il a été décidé que je travaillerais a l'aide d'Excel (export bdd au format CSV).
Dans le cas des doublons, ce qui va nous intéresser dans ce poste, j'ai donc mit en place un fichier excel avec une concaténation de trois critères (Login/Matricule/date de naissance) par utilisateur au sein d'une même cellule, et ce pour les deux référentiels.
Ensuite j'applique une macro trouvé sur internet ( je ne pratique pas le VBA) qui permet de comparer la première colonne du premier onglet avec la première colonne du second onglet, et d'y appliquer une mise en forme qui me permet ensuite de filtrer, et de ressortir les différences d'une base de donnée a une autre.
Le problème rencontré est le suivant, lorsque je doit comparer les deux référentiels de base, contenant plus de 200 000 lignes chacun, la macro fait planter excel, celui ci se retrouve en mode " ne répond pas "
Sur des plus petits fichiers au bout d'une 30aines de minutes le logiciel revient a la normal et la demande est traitées, mais pour les plus gros, même après 24h de traitement sur mon PC personnel ( nettement plus puissant que ceux du boulot ) Excel ne répond toujours pas.
Voici la macro en question :
Code: Tout sélectionner
Sub Compare()
Dim Lig1 As Long, Derlig1 As Long, Derlig2 As Long, Cp As Variant
Dim Lig2 As Long
Derlig1 = Sheets("Feuil1" ).Range("A265535" ).End(xlUp).Row
Derlig2 = Sheets("feuil2" ).Range("A265535" ).End(xlUp).Row
With Sheets("Feuil2" )
For Lig1 = 2 To Derlig1
Cp = Sheets("feuil1" ).Cells(Lig1, "A" )
For Lig2 = 2 To Derlig2
If Cp = .Cells(Lig2, "A" ) Then
.Cells(Lig2, "A" ).Interior.ColorIndex = 9 'couleur valeurs similaires
End If
Next Lig2
Next Lig1
End With
End Sub
Je m'en remet donc a vous afin d'obtenir de l'aide sur une amélioration potentiel de la macro afin de la rendre plus légère, ou qu'elle travail différemment pour améliorer la durée de traitement ( ou au moins pouvoir traiter le fichiers sans plantage même si c'est long )
Si vous avez d'autre piste, plutôt qu'une macro Excel, pour le traitement de ce genre d'informations je suis également preneur de toutes informations pertinente.
Merci de votre aide
Pavé César !
Cordialement