IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

identifier des écarts entre deux onglets [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Par défaut Comparaisons de données sans clé unique
    Bonjour,

    Je sollicite votre aide car je suis novice en VBA, et j’ai besoin d’aide sur la macro que j’essaie de réaliser.

    Dans mon fichier, il y a un onglet « client 1 » et un onglet « client 2 », à l’intérieur il y a de nombreuses références qui sont censé être à peu près les mêmes

    Le fonctionnement de ma macro serait le suivant :
    Il faudrait quelle identifie là où il y a des différences entre le client 1 et le client 2, et les faire ressortir sous la même forme que l’onglet « trade unmatched » que j’ai créé pour vous montrer à quoi cela devrait ressembler une fois fini.

    Le champs "state" permettrait de savoir à quel niveau se situe la différence et le surlignage de couleur aussi pour bien mettre en évidence.

    J’avais pensé à faire une boucle mais le problème c’est qu’il n’y a pas de référence unique, pas de clé primaire. Le seul moyen serait de pouvoir identifier les données ou il y a le moins d’écart possible.

    De plus il faudrait que dans le champs « client 1 inconnu », la macro puisse me dire que certaines données du client 1 ne correspondent pas du tout à celle du client 2 et vice versa.

    Je suis conscient de la difficulté de la macro et je suis vraiment perdu.

    Pourriez-vous m’aider ?

    Cordialement.

    Julien
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Par défaut
    Quelqu’un aurait-il une idée ?

    Sinon je pensais à faire une boucle qui compare les cellules de la première ligne client 1 avec toute les autres de client 2.

    La ou il y aura le moins d'erreur,cela voudra dire que la ligne client 1 correspond à la ligne client 2 qui à le moins d'erreur et je pourrais savoir identifier ou son les données qui posent problème.

    Seulement comment peut-on modéliser ça ?

    Cordialement.

    Julien.

  3. #3
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Un petit bout de code à adapter en bouclant tout simplement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub compare()
        Dim i As Long, j As Long, k As Long, l As Long
        Dim dernligne As Long, dernligne2 As Long, ligne As Long
        Dim maxim As Integer
     
     
        dernligne = Sheets("client 1").Range("A" & Rows.Count).End(xlUp).Row
        dernligne2 = Sheets("client 2").Range("A" & Rows.Count).End(xlUp).Row
     
        l = 2
     
    'pour chaque client 1
        For i = 2 To dernligne
     
    'pour chaque client 2
            For k = 2 To dernligne2
                For j = 1 To 9
    'on établit les différences
                    If Sheets("client 1").Cells(i, j) = Sheets("client 2").Cells(k, j) Then
                        Sheets("Tableau de comparaison").Cells(k, j) = "OK"
                    Else
                        Sheets("Tableau de comparaison").Cells(k, j) = "FAUX"
                    End If
                Next j
            Next k
     
    'Calcul des differences
            For k = 2 To dernligne2
                For j = 1 To 9
                    If Sheets("Tableau de comparaison").Cells(k, j) = "OK" Then
                        somme = somme + 1
                    End If
                Next j
                Sheets("Tableau de comparaison").Cells(k, 10) = somme
                somme = 0
            Next k
     
     
    'trouve le plus grand nombre de similitudes
            maxim = Application.WorksheetFunction.Max(Sheets("Tableau de comparaison").Range("J2:J" & dernligne2))
            ligne = Sheets("Tableau de comparaison").Range("J2:J" & dernligne2).Find(maxim).Row
     
    'Copie en feuille5 celui à qui il ressemble
            For k = 1 To 9
                Feuil5.Cells(l, k) = Sheets("client 1").Cells(i, k)
                Feuil5.Cells(l, 11) = "Ressemble a"
                Feuil5.Cells(l, k + 12) = Sheets("client 2").Cells(ligne, k)
            Next k
            l = l + 1
        Next i
     
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Par défaut
    c'est génial.

    merci beaucoup, ça va vraiment beaucoup m'aider.

    Est-ce qu'il est possible également de supprimer le champs "TYPE" de l'onglet client 1 et client 2.

    Dans ce cas la dernière ligne client 1 ne correspondrait pas du tout avec la ligne 6 client 2 et j'aimerais pouvoir l'isoler à part cette ligne client 1.

    Est ce que cela est possible?

    Merci beaucoup.

    Cordialement.

    Julien.

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Pas compris ce que tu voulais, mais tout est possible!

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Ce que tu veux c'est pondérer les champs par ordre d'importance vis à vis de la ressemblance ?

    Il te suffit de faire une regression logistique et établir un score et à partir de là tu pourras faire un ciblage plus précis...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2012
    Messages : 30
    Par défaut
    en gros,

    Si dans la feuille tableau de comparaison, dans la colonne I il y a un 0 comme c'est le cas pour la dernière ligne de la feuille client 1 alors la ligne client 1 et mis dans une autre feuille et elle n'apparait pas la feuil5 avec la ligne qui lui correspond le plus de l'onglet client 2.

    j'ai remis le fichier avec la macro légèrement modifié, j'ai supprimé une colonne dans la feuille client 1 et client 2.

    Dis moi si je ne suis pas clair encore ?

    Cordialement.

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Toujours pas clair...

    Ne comprenant pas ton processus générateur des données, je ne peux que faire des suppositions, mais:

    Je dirais que les variables LOTS et PRICES ainsi que la date du trade sont des variables qui identifient clairement une opération, indépendamment des clients, leurs devises etc...

    Il me parait donc plus raisonnable des les pondérer davantage que les autres..

    Nous avons 9 champs donc tu devrais faire des pondérations sur chacune de ces valeurs dont la somme fait 100% pour une vision plus directe.. et puis après adapter la macro pour que le résultat de la séléction se fasse en fonction de ces pondérations...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/03/2012, 09h45
  2. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01
  3. comment faire des espaces entre deux liens ???
    Par baaps dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/03/2005, 09h53
  4. [TP] Echanger des données entre deux programmes
    Par ILIAS Raphaël dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 22/03/2005, 09h31
  5. Réponses: 7
    Dernier message: 30/12/2004, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo