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 :

similarité des lignes entre deux feuilles excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut similarité des lignes entre deux feuilles excel
    bonjour,

    j'ai deux feuilles a rapprocher avec les données nom, montant,date,
    je veux un code qui peux faire une recherche entre les lignes et trouver le nom le plus similaire

    en attachement j'ai un petit exemple de données et comment je veux comme résultat
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Points : 2 553
    Points
    2 553
    Par défaut
    Tu cherches à faire copier le travail complètement naze d'un de tes collègues ? Sans le comprendre toi même par simple flemme ?

    Si tu avais jeté ne serais-ce qu'un œil à ce classeur tu aurais pu voir que le test ne se basait sur AUCUN CRITERE et que c'était du grand n'importe quoi

    Bien à toi,
    E

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour EngueEngue

    désolé si je ne m'y connais pas en VBA

    je ne suis pas collègue avec cette personne c'est un travail que j'ai trouvé et que je veux utilisé le même principe pour mes rapprochements

    je ne veux copié aucun travail parce que je vais le modifier et ajouté d'autre condition au code pour avoir un résultat meilleur

    si vous avez trouvé une solution vous auriez pu m'aider non me faire la morale je ne croyais pas que c'est principe de ce forum

    cordialement

  4. #4
    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
    Points : 2 553
    Points
    2 553
    Par défaut
    Voilà le principe du code:

    Pour chaque ligne de PAGE 1
    Pour chaque ligne2 de PAGE 2
    Pour chaque colonne de PAGE 1
    Pour chaque colonne2 de PAGE 2
    si la page1.cellule(ligne,colonne) est numerique alors calculer la distance de Mahalanobis avec page2.cellule(ligne2,colonne2)
    Si c'est du texte alors calculer le nombre de caractères égaux.
    Mettre les résultats dans une matrice.


    Puis regarder ton ENORME MATRICE et la scorer.

    Bon codage

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    je vois que c'est trop simple pour vous sauf que je ne connais rien au code

    si vous pourriez avoir la noblesse de m'aider plus que ça je serais reconnaissant

    cordialement

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    ici c'est un forum de développeurs - si, si, c'est même écrit en gros en haut à gauche ! - qui plus est
    dans la section Macros & VBA

    Pour rappel, le forum est là pour aider à résoudre des points précis et particuliers,
    pas à fournir des applications toutes faites.

    Donc il faut commencer par présenter ce que tu as fait et expliquer les points que tu souhaites aborder ou corriger.

    Si tu ne développes pas, ce n'est pas le bon site, tout du moins la bonne section …

    Cordialement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Option Explicit
     
    Sub test()
        Dim a, i As Long, ii As Long, temp, e, s, w, n As Long, AL As Object, x
        Set AL = CreateObject("System.Collections.ArrayList")
        CreateSheets "Matched", "Pending"
        a = Sheets("10").UsedRange.Value
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1: n = 1
            For i = 2 To UBound(a, 1)
                If a(i, 15) <> "" Then
                    If Not .exists(a(i, 15)) Then
                        Set .Item(a(i, 15)) = _
                        CreateObject("Scripting.Dictionary")
                        .Item(a(i, 15)).CompareMode = 1
                    End If
                    If Not .Item(a(i, 15)).exists(a(i, 4)) Then
                        ReDim w(1 To 2)
                        Set w(1) = _
                        CreateObject("System.Collections.ArrayList")
                        Set w(2) = _
                        CreateObject("System.Collections.ArrayList")
                        .Item(a(i, 15))(a(i, 4)) = w
                    End If
                    w = .Item(a(i, 15))(a(i, 4))
                    w(1).Add a(i, 13): w(2).Add i
                    .Item(a(i, 15))(a(i, 4)) = w
                End If
            Next
            AL.Add Application.Index(a, 1, 0)
            For Each e In .keys
                If .Item(e).Count > 1 Then
                    For i = .Item(e).items()(0)(1).Count - 1 To 0 Step -1
                        temp = .Item(e).items()(0)(1)(i) * -1
                        If .Item(e).items()(1)(1).Contains(temp) Then
                            AL.Add Application.Index(a, .Item(e).items()(0)(2)(i), 0)
                            x = .Item(e).items()(1)(1).IndexOf(temp, 0)
                            AL.Add Application.Index(a, .Item(e).items()(i)(2)(x), 0)
                            .Item(e).items()(0)(1).removeAt i
                            .Item(e).items()(0)(2).removeAt i
                            .Item(e).items()(1)(1).Remove temp
                            .Item(e).items()(1)(2).removeAt x
                        End If
                    Next
                End If
            Next
            For Each e In .keys
                For Each s In .Item(e).keys
                    If .Item(e)(s)(1).Count > 0 Then
                        For i = 0 To .Item(e)(s)(1).Count - 1
                            n = n + 1
                            For ii = 1 To UBound(a, 2)
                                a(n, ii) = a(.Item(e)(s)(2)(i), ii)
                            Next
                        Next
                    End If
                Next
            Next
        End With
        With Sheets("pending").Cells(1).Resize(n, UBound(a, 2))
            .Parent.UsedRange.ClearContents
            .Value = a
            .Columns.AutoFit
        End With
        With Sheets("matched").Cells(1).Resize(AL.Count, UBound(a, 2))
            .Parent.UsedRange.ClearContents
            .Value = Application.Index(AL.ToArray, 0, 0)
            .Columns.AutoFit
        End With
    End Sub
     
    Private Sub CreateSheets(ByVal matched As String, ByVal pending As String)
        On Error Resume Next
        If Len(Worksheets(matched).Name) = 0 Then
            Sheets.Add(after:=Sheets("10")).Name = matched
        End If
        If Len(Worksheets(pending).Name) = 0 Then
            Sheets.Add(after:=Sheets("10")).Name = pending
        End If
        On Error GoTo 0
       End Sub
    au début je regroupé les données des deux feuilles dans la même feuille et j’essayai de nettoyer un peux pour que les données deviennent identiques

    model en attachement

    je voudrais changer la partie de la recherche des doublons dans la même feuille par le principe de similarité entre deux feuilles
    Fichiers attachés Fichiers attachés
    • Type de fichier : xlsx 10.xlsx (10,8 Ko, 118 affichages)

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Voilà qui est intéressant ‼

    Reviens EngueEngue, cela devrait te plaire !

    L'utilisation d'un objet Dictionary me semble tout à fait adaptée …
    … mais si tu pouvais approfondir ton principe de similarité entre deux feuilles …

    Pourquoi vouloir changer de méthode ou de principe ?
    Que doit être comparé ? Ligne à ligne, colonne par colonne ?
    Le résultat attendu ?
    Sans vision claire du besoin, pas de solution à l'horizon …

    J'ai une méchante astuce en réserve que je n'ai jamais pu appliquer sur un forum, mais là je doute …

    Bon alors EngueEngue ?

  9. #9
    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
    Points : 2 553
    Points
    2 553
    Par défaut
    Alors tout d'abord le code me paraît intéressant, deuxièmement pour approfondir tes tests de similitudes il me faut comprendre ce que je compare et ce qui doit être comparé

    alors

    1- Mets nous un exemple de deux feuilles à comparer et quelques lignes qui se ressemblent..

    2- Quels facteurs privilégier

    3- Faut il comparer ligne à ligne ou ligne à toutes les lignes de la base 2.

    4- Comment représenter ta similitude.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    alors le premier code cherche les doubles dans la même feuille pour une seul colonne (texte)
    pour la similarité c'est entre chaque ligne de la feuille EV avec les lignes de la feuilles BQ

    le premier fichier "similarity test" et la base de données
    le fichier "10" est le fichier du code que j'utilisé

    alors

    si deux lignes sont similaires :
    condition 1: soit une ligne du type BQ et l'autre EV
    condition 2: la somme des deux montants égale a zéro
    condition 3: copié les données du type BQ

    mon résultat donne deux valeurs identique alors je supprime les doublons de la feuille match pour mon résultat final

    Citation Envoyé par EngueEngue Voir le message
    Alors tout d'abord le code me paraît intéressant, deuxièmement pour approfondir tes tests de similitudes il me faut comprendre ce que je compare et ce qui doit être comparé

    alors

    1- Mets nous un exemple de deux feuilles à comparer et quelques lignes qui se ressemblent..

    2- Quels facteurs privilégier

    3- Faut il comparer ligne à ligne ou ligne à toutes les lignes de la base 2.

    4- Comment représenter ta similitude.
    1- sur le fichier similarity test" y'a les deux feuilles a comparer EV et BQ
    2-le facteur priviligé est les données de la colonne texte"noms "
    3-chaque ligne de la fauille EV avec toute les lignes de la feuille BQ
    4-regroupé les lignes similaires une apres l'autre
    puis passer au autre condition

Discussions similaires

  1. [XL-2010] Transférer des données entre deux feuilles et les placer à des lignes spécifiques
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2013, 14h25
  2. Update entre deux feuilles excel
    Par foxer98 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/07/2007, 12h25
  3. Réponses: 6
    Dernier message: 27/04/2007, 22h50
  4. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  5. Ecrire des données dans deux feuilles excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 28/02/2007, 08h28

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