Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1491 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comparaison de bdd sous Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comparaison de bdd sous Excel

n°2280897
LeReclus
Posté le 25-04-2016 à 10:34:45  profilanswer
 

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

mood
Publicité
Posté le 25-04-2016 à 10:34:45  profilanswer
 

n°2280898
exmachina
Posté le 25-04-2016 à 12:06:49  profilanswer
 

Bonjour,
 
le script trouvé à l'air de faire tout le boulot, alors qu'excel dispose de fonction prévu pour
mise en forme conditionelle, formule match, isna, ...
 
après si tu cherche à travailler efficacement, laisse les donnée en csv et bosse avec des vrai programme maison en  python, c, perl... qui te résoudrons ton pb en quelque minute.

n°2280899
LeReclus
Posté le 25-04-2016 à 14:13:05  profilanswer
 

Merci pour ta réponse.
 
Le problème est que je n'ai pas les connaissances pour créer / trouver ce genre de programme maison.
 
D'autre part les fonctions intégré a excel pour la mise en forme automatique en fonction de certain critère de comparaison sont trop lourdes pour un fichiers de plus de 200 000 lignes, et plantes tout le système.
 
Par contre j'ai trouvé de l'aide sur un autre forum dédié a Excel ou l'on ma proposé une macro qui est plus optimisé a mon besoin, et qui permet un traitement nettement plus rapide. (il faut par contre effectuer un trie sur les données avant traitement )
 
Je vous colle la macro ici au cas ou cela interesse quelqu'un =)
 

Code :
  1. Sub Compare()
  2.         Dim c1 As Long, Derlig1 As Long, Derlig2 As Long, Cp As Variant
  3.         Dim c2 As Long,fin1,fin2,k1,k2
  4.         Set ws1 = Sheets("feuil1" )
  5.         Set ws2 = Sheets("feuil2" )
  6.         Application.ScreenUpdating = False
  7.         Derlig1 = ws1.Range("A265535" ).End(xlUp).Row
  8.         Derlig2 = ws2.Range("A265535" ).End(xlUp).Row
  9.         ws1.Range("A1:A" & Derlig1).Sort key1:=ws1.Range("A1" ), order1:=xlAscending, Header:=xlYes
  10.         ws2.Range("A1:A" & Derlig2).Sort key1:=ws2.Range("A1" ), order1:=xlAscending, Header:=xlYes
  11.      
  12.         c1 = 2
  13.         c2 = 2
  14.         While Not (fin1 Or fin2)
  15.             k1 = ws1.Cells(c1, 1)
  16.             k2 = ws2.Cells(c2, 1)
  17.             If k1 = k2 Then
  18.                 ws1.Cells(c1, "A" ).Interior.ColorIndex = 9    'couleur valeurs similaires
  19.                ws2.Cells(c2, "A" ).Interior.ColorIndex = 9    'couleur valeurs similaires
  20.                c1 = c1 + 1: c2 = c2 + 1
  21.             ElseIf k1 < k2 Then
  22.                 c1 = c1 + 1
  23.                 If c1 > Derlig1 Then fin1 = True
  24.             Else
  25.                 c2 = c2 + 1
  26.                 If c2 > Derlig2 Then fin2 = True
  27.             End If
  28.         Wend
  29.         Application.ScreenUpdating = True
  30.     End Sub


 

n°2280900
lfs
Posté le 02-05-2016 à 20:55:39  profilanswer
 

LeReclus a écrit : a écrit :

 
je suis informaticien junior  
vu mon manque de connaissance/d'accès aux bases de données
macro trouvé sur internet ( je ne pratique pas le VBA)
plus de 200 000 lignes chacun, la macro fait planter excel,
Si vous avez d'autre piste, plutôt qu'une macro Excel,




 
 
Bonjour,
Vu les infos ci-dessus, pourquoi ne pas en profiter pour apprendre quelques notions de SQL et résoudre ces problèmes en quelques requêtes ? C'est infiniment plus pertinent à connaitre pour un développeur que VBA, et trouver des doublons sur 200 000 lignes, ça se fait très rapidement..

Message cité 1 fois
Message édité par lfs le 02-05-2016 à 20:57:32
n°2280901
Je@nb
Kindly give dime
Posté le 06-05-2016 à 18:09:41  profilanswer
 

Ce sujet a été déplacé de la catégorie Systèmes & Réseaux Pro vers la categorie Programmation par Je@nb

n°2280945
rufo
Pas me confondre avec Lycos!
Posté le 08-05-2016 à 10:37:36  profilanswer
 

lfs a écrit :


 
 
Bonjour,
Vu les infos ci-dessus, pourquoi ne pas en profiter pour apprendre quelques notions de SQL et résoudre ces problèmes en quelques requêtes ? C'est infiniment plus pertinent à connaitre pour un développeur que VBA, et trouver des doublons sur 200 000 lignes, ça se fait très rapidement..


+1 pour une solution basée sur une autre architecture.
 
Tu pourrais déjà commencer par t'installer Mysql (ou Postgres) en local sur le PC sur lequel il bosse. Si t'as pas les droits admin, il existe des versions portables. Tous les traitements ne pourront se faire avec du SQL pure. Un autre langage te sera nécessaire : PHP, Python, Perl...
Si tu choisis PHP, tu pourras t'installer un environnement complet WAMP (Apache, Mysql, PHP). Il existe aussi des WampServer en version portable ;)
 
Désolé de te le dire, mais un programmeur, même junior, qui ne sait faire que du VBA, c'est pas un programmeur :/ Excel n'est clairement pas adapté pour ce type de tâche. Un SGBD + un langage de dév sera une bien meilleure solution technique et surtout, plus maintenable dans le temps :o Pour une entreprise, ce critère est également important.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2280976
Marc L
Posté le 09-05-2016 à 09:49:57  profilanswer
 

 
            Bonjour,
 
            VBA étant un langage interprété, forcément c'est plus long qu'un SGBD ou une requête SQL (a way to go !) …
 
            « Ne réponds pas » ne veut pas dire qu'Excel est planté mais juste accaparé par un code en cours d'exécution !
 
            Le code du post initial est le cas d'école de ce qui ne faut pas faire ou ne pas oublier en VBA ‼
            Voir ce post pour le B-A-BA à ne pas oublier en VBA pour un processus long surtout dans le cas de boucles …
 
            La première question à se poser avant d'écrire la moindre ligne de code VBA est
            « qu'est-ce qui pourrait déjà être réalisé manuellement via Excel ? »
            Car quasiment tout ce que l'on fait manuellement dans Excel peut-être automatisé en VBA,
            l'Enregistreur de macros fournissant sur un plateau une base de code (à nettoyer) aidant l'apprenti codeur à découvrir le VBA …
            Et les fonctions internes à Excel étant déjà compilées peuvent s'avérer parfois plus rapides qu'un code "bouclant" !
            (filtres, filtres avancés)  
 
            Ici vu le volume à traiter et le besoin, variables tableau et l'objet Dictionary (documenté dans l'aide VBA et sur MSDN) réduiraient
            énormément le temps de calcul …
 
            Exemple de variable tableau dans le sujet Copier une colonne sous conditions d'une autre colonne
 
            ________________________________________________________________________________________________________
            Copier / Coller n'est pas coder !

 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comparaison de bdd sous Excel

 

Sujets relatifs
Aide VBA comparaison de deux fichiers Excel[VBA] comparaison de 2 fichiers excel
[VBA-Macros][Excel]Comparaison de deux datescomparaison et copie de cellules excel avec macro
Optimiser une macro de comparaison de feuilles ExcelComparaison de deux colonnes dans 2 classeurs Excel
Une sorte de comparaison d'un fichier excel et une table access.[EXCEL] Comparaison bornée
Comparaison de données sous ExcelComparaison de lignes sous Excel
Plus de sujets relatifs à : Comparaison de bdd sous Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR