Comparaison de bdd sous Excel - VB/VBA/VBS - Programmation
Marsh Posté le 25-04-2016 à 12:06:49
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.
Marsh Posté le 25-04-2016 à 14:13:05
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 :
|
Marsh Posté le 02-05-2016 à 20:55:39
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..
Marsh Posté le 06-05-2016 à 18:09:41
Ce sujet a été déplacé de la catégorie Systèmes & Réseaux Pro vers la categorie Programmation par Je@nb
Marsh Posté le 08-05-2016 à 10:37:36
lfs a écrit : |
+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 Pour une entreprise, ce critère est également important.
Marsh Posté le 09-05-2016 à 09:49:57
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 !
Marsh Posté le 25-04-2016 à 10:34:45
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