Comparer 2 colonnes de base de données différentes

Bonjour à tous,

Je suis en train de développer un outil qui devrait permettre de comparer différentes base de données du personnel.
Chaque collaborateur est identifiable par un numéro unique (U Nr.).

Dans mon outil, j'ai ma base de données "actuelle". Celle qui fait référence.

Chaque mois, je reçois des RH, un nouveau tableur où se trouve la liste actualisée des collaborateurs.
Je souhaite pouvoir comparer les deux colonnes (en A) des deux onglets, afin de déterminer les "nouveaux arrivés", et les départs (retraites par ex.).

Y a-t-il moyen d'automatiser la procédure ?

1) Je souhaite comparer les U Nr. des deux bases
2) Je souhaite identifier les nouveaux collaborateurs (nouveaux U Nr.)
3) Je souhaite identifier les collaborateurs ne figurant plus sur ma base "actuelle"

Le fichier joint vous permettra (je l'espère) de vous représenter un peu mieux mon besoin.

D'avance merci.
Cordialement

Willau

Bonjour

Une comparaison par PowerQuery

Il serait possible d'utiliser un ficher externe pour la RH afin de ne pas avoir à réintégrer dans le classeur à chaque extraction

Bonjour 78chris
Merci pour ta contribution.

J'ai essayé de trouver les manipulations ou codes que tu as implémentés dans le fichier, hélas sans succès.

Pourrais-tu développer ?
Quant à l'idée de faire référence à un fichier extérieur, je pense que ce soit une altérnative intéressante, tout en sachant que j'aurais deux fichiers "souches" à synchrnoniser.

Cordialement.

Willau

RE

Données, Afficher les requêtes : clic droit sur une des requêtes Modifier

Cela ouvre PowerQuery où tu peux voir les requêtes à gauche et leurs étapes à droite

Bonjour 78chris

Merci pour ton message.

J'ai accédé au requêtes du classeur.
Je me rends compte que j'ai encore bien des choses à découvrir sur Excel.

Je vais pour l'heure chercher une autre voie pour résoudre mon problème.
Ce que tu proposes est magnifique, mais encore trop "haute école" pour mon niveau.

Cordialement

Willau

PS : je vais quand même m'intéresser à ces requêtes prochainement.

RE

Sachant qu'on n’utilise que les options des menus et clic droit, ce n'est pas si compliqué, bien moins en tout cas que d'apprendre à programmer en VBA, et surtout cet outil offre la logique base de données bien plus rapide et efficace que des boucles.

On fait souvent en quelques clics ce qui demande nombre de lignes de VBA...

J'en suis persuadé !!
Mais il faut l'apprendre. Et ce n'est pas intuitif (pas pour le moment tout du moins).

Merci encore !!!

Salut Willau,
Salut 78Chris,

comme je ne suis pas très formule et encore moins PowerQuery, j'ose avancer une solution VBA...

- un double-clic en 'BD' [A1:A3] compare les deux feuilles : résultats en 'DB' [A:A]
* les petits nouveaux en VERT ;
* les disparus en ROUGE
- un autre double-clic en [A1:A3] efface les ROUGES et remet tout le monde en NOIR.

Des commentaires sont présents sur le code dans le fichier.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk As Worksheet, iRow%, iRowA%, iRow1%
'
Cancel = True
Set sWk = Worksheets("DB_HR")
Application.ScreenUpdating = False
On Error Resume Next
'
If Not Intersect(Target, [A1:A3]) Is Nothing Then
    If [A2].Font.Bold = False Then
        With sWk
            iRow1 = Range("A" & Rows.Count).End(xlUp).Row
            iRowA = WorksheetFunction.Max(Range("A" & Rows.Count).End(xlUp).Row, .Range("A" & Rows.Count).End(xlUp).Row)
            For x = 4 To iRowA
                iRow = 0
                If x <= iRow1 And Cells(x, 1) <> "" Then _
                    iRow = .Columns(1).Find(what:=Cells(x, 1), lookat:=xlWhole, LookIn:=xlValues).Row: _
                    If iRow = 0 Then Cells(x, 1).Font.ColorIndex = 3
                If iRow > 0 Then .Cells(iRow, 1).Font.Italic = True
                If .Cells(x, 1) <> "" And .Cells(x, 1).Font.Italic = False Then _
                    iRow = Range("A4:A" & iRow1).Find(what:=.Cells(x, 1), lookat:=xlWhole, LookIn:=xlValues).Row: _
                    If iRow = 0 Then _
                        Cells(Range("A" & Rows.Count).End(xlUp).Row + 1, 1) = .Cells(x, 1): _
                        Cells(Range("A" & Rows.Count).End(xlUp).Row, 1).Font.ColorIndex = 10
            Next
            .Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row).Font.Italic = False
        End With
        With Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row)
            .NumberFormat = STANDARD
            .HorizontalAlignment = xlHAlignLeft
            .Borders.LineStyle = xlLineStyleNone
            .BorderAround LineStyle:=xlContinuous
            .Interior.ColorIndex = 19
            .Sort key1:=Range("A4"), order1:=xlAscending, Orientation:=xlRows, Header:=xlNo
        End With
    Else
        For x = Range("A" & Rows.Count).End(xlUp).Row To 4 Step -1
            If Cells(x, 1).Font.ColorIndex = 3 Then Rows(x).Delete shift:=xlUp
        Next
        With Range("A4:A" & Range("A" & Rows.Count).End(xlUp).Row)
            .Font.ColorIndex = 1
            .BorderAround LineStyle:=xlContinuous
        End With
    End If
    [A2].Font.Bold = IIf([A2].Font.Bold = True, False, True)
End If
On Error GoTo 0
Application.ScreenUpdating = True
'
End Sub
11willau.xlsm (18.53 Ko)


A+

Rechercher des sujets similaires à "comparer colonnes base donnees differentes"