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

  1. #1
    Membre habitué
    Code vba qui permet de comparer un tableau par rapport à un autre tableau
    Bonjour à tous,

    J'aimerais savoir si quelqu'un pouvait m'aider?
    Je souhaites créer un code qui compare les données salarié du mois en cours avec le mois précèdent et sortir 1 liste
    avec les nouveaux salariés.

    Merci et bonne journée.

  2. #2
    Membre habitué
    Code vba qui permet de comparer un tableau par rapport à un autre tableau
    J'ai trouvé ceci mais la comparaison, ce fait que sur le nom et j'aimerais faire sur le prénom aussi.

    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
    Sub comparaison()
     
    Dim w1 As Worksheet, w2 As Worksheet, w3 As Worksheet
    Dim I As Long
     
    Windows("Classeur1.xls").Activate 'Nom du classeur
     
    Set w1 = Sheets("mois_actuel") 'Feuille qui contient les effectifs
    Set w2 = Sheets("mois_precedent") 'Feuille qui contient l'historique des formations
    Set w3 = Sheets("traitement") 'Feuille qui doit faire apparaitre les personnes qui n'ont pas de formation
     
    'Suppression des données dans la feuille traitement
    w3.Cells.ClearContents
     
    For I = 2 To w1.Range("a65536").End(xlUp).Row ' faire toute la colonne A
     
    If Application.WorksheetFunction.CountIf(w2.Range("a:a"), w1.Range("a" & I)) = 0 Then  'comparer si w2 et different de W1
     
    w1.Range("a" & I & ":c" & I).Copy Destination:=w3.Range("a65536").End(xlUp).Offset(1, 0) 'copier nouvelle entité de la w1 Different en w2 sur w3
     
    End If
     
    Next
     
    MsgBox "Comparaison terminé"
     
    End Sub

  3. #3
    Membre expert
    Bonjour,

    Si ce n'est pas trop tard, essayez ceci (utilisation de SOMMEPROD en VBA):
    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
     Sub comparaison()
        Dim w1 As Worksheet, w2 As Worksheet, w3 As Worksheet
        Dim I As Long
        Dim Cell_A_w1 As String, Cell_B_w1 As String, Plage_A_w2 As String, Plage_B_w2 As String
        Windows("Classeur1.xls").Activate 'Nom du classeur
        Set w1 = Sheets("mois_actuel") 'Feuille qui contient les effectifs
        Set w2 = Sheets("mois_precedent") 'Feuille qui contient l'historique des formations
        Set w3 = Sheets("traitement") 'Feuille qui doit faire apparaitre les personnes qui n'ont pas de formation
        'Suppression des données dans la feuille traitement
        w3.Cells.ClearContents
        DerLig_w1 = w1.Range("A" & Rows.Count).End(xlUp).Row
        DerLig_w2 = w2.Range("A" & Rows.Count).End(xlUp).Row
        Plage_A_w2 = "mois_precedent!A2:A" & DerLig_w2
        Plage_B_w2 = "mois_precedent!B2:B" & DerLig_w2
        For I = 2 To DerLig_w1 ' faire toute la colonne A
            Cell_A_w1 = "mois_actuel!A" & I
            Cell_B_w1 = "mois_actuel!B" & I
            If Application.Evaluate("=SUMPRODUCT((mois_precedent!A2:A50 =" & Cell_A_w1 & ") * (mois_precedent!B2:B50 = " & Cell_B_w1 & "))") = 0 Then   'comparer si w2 et different de W1
                w1.Range("a" & I & ":c" & I).Copy Destination:=w3.Range("a65536").End(xlUp).Offset(1, 0) 'copier nouvelle entité de la w1 Different en w2 sur w3Next
            End If
        Next I
        w3.Select
        MsgBox "Comparaison terminé"
        Set w1 = Nothing
        Set w2 = Nothing
        Set w3 = Nothing
    End Sub


    Cdlt

  4. #4
    Rédacteur

    Bonjour,
    Sur le même sujet, un billet titré Exporter les données comparées (« Matchées »)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  5. #5
    Membre habitué
    Code vba qui permet de comparer un tableau par rapport à un autre tableau
    Bonjour et merci pour les réponses. En ce qui concerne de trouver les nouveaux salariées c'est bon. Par contre je n'arrive pas à trouver si le salarié change de nom (par exemple aprés mariage). Comment retrouver le salarié?

  6. #6
    Membre expert
    Bonjour,

    Envoyé par Marc31
    Par contre je n'arrive pas à trouver si le salarié change de nom (par exemple aprés mariage). Comment retrouver le salarié?
    Là, faut pas rêver, si dans 2 listes vous avez la même personne qui porte un nom différent, le meilleur logiciel et le meilleur programmeur au monde ne pourront faire un lien entre les deux s'il n'y a pas identifiant commun appliqué à cette personne.
    Vous devez donc créer un N° d'identifiant attribué à chaque personne dans les 2 listes et faire les recherches non plus sur le noms et prénoms mais sur ce N°, évidemment la personne ayant changé de nom conservera le même N° .

    Cdlt

  7. #7
    Membre confirmé
    Hello,

    Peut-être ajouter un id unique et immuables, dans ta table, num de registre national ?

  8. #8
    Membre expert
    Bonjour,
    Citation Envoyé par Marc31 Voir le message
    Bonjour et merci pour les réponses. En ce qui concerne de trouver les nouveaux salariées c'est bon. Par contre je n'arrive pas à trouver si le salarié change de nom (par exemple aprés mariage). Comment retrouver le salarié?
    En France, il faut utiliser le NNI (numéro national d'identification) = numéro de sécurité sociale.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur