Comparaison entre les données de 2 feuilles

Bonsoir Forum

Je vous sollicite pour m'aider à résoudre un petit problème

En fait, j'ai un fichier qui contient 2 sources d'informations différentes avec des codes clés communes (colonne A), donc ma mission est de comparer le montant qui existe dans la colonne D de chaque feuille en se basant sur les codes clés et d'apparaitre les écarts dans un onglet intitulé analyse (voir fichier ci-joint)

J'utilise actuellement des formules recherchev mais ne sont pas très efficaces surtout que j'ai des milliers de lignes dans chaque feuille et pas forcément la même liste des codes clé n peut trouver des codes clé dans un onglet mais pas dans l'autre et vice versa, en plus que je peux trouver le même code clé sur 2 lignes différentes et dans ce cas je dois prendre la somme des lignes pour le même code clé (ce que la recherchev n'arrive pas à le traiter) ...

Pouvez m'aider à trouver une solution efficace et dynamique (le nombre de lignes de chaque onglet et variable) qui me permet de faire cette analyse rapidement ?

D'avance, merci pour votre aide

Bonsoir,

je pense que tu devrais plutôt essayer avec :

=SOMME.SI('Source 1'!A:A;A2;'Source 1'!D:D)

@ tirer vers le bas

@ adapter pour l'onglet "Source 2"

@ + +

Bonsoir R@chid et merci pour votre retour rapide

à priori votre solution fonctionne correctement mais est-il possible de l'automatiser via une petite macro ?

En fait, le fichier peut être utilisé par plusieurs utilisateurs donc la macro peut sécuriser et automatiser la tâche pour tout le monde

Merci d'avance

Pour complément d'informations, la solution avec cette formule ne résout pas le problème puisque je dois récupérer manuellement la liste de tous les codes clé à partir des deux feuilles

Bonsoir Morino, R@chid, le forum

Vois ma dernière réponse dans le fil ci-dessous.

Il suffit de l'adapter à ton cas.

Dans cette macro, il faut simplement rajouter les colonnes F et G pour effectuer les calculs souhaités.

https://forum.excel-pratique.com/excel/dictionnaire-avec-item-tableau-t69478.html

C'est très simple.

klin89

Bonjour,

Une proposition à étudier.

Cdlt.

Bonjour Jean-Eric,

Merci pour votre solution, elle a l'air de bien fonctionner, je vais la vérifier avec des données réelles

je vous souhaite très bonne journée

Merci encore

Re,

Jean-Eric, pouvez vous svp m'indiquer comment je peux modifier le nom du 'bouton' qui exécute la macro

Lorsque j'ai voulu crée un nouveau bouton, je ne trouve pas la macro pour l'affecter !!!

Merci d'avance pour votre retour

Bonjour,

Ce n'est pas un bouton (contrôle de formulaire), mais un CommandButton (contrôle ActiveX).

Menu Développeur / Mode création

Sélectionner le contrôle puis clic-droit et propriétés.

Tu as alors accès à un certain nombre d'options à ta disposition.

Une fois tes modifications effectuées, clic une nouvelle fois sur Mode création, pour le quitter.

Cdlt.

Merci bien Jean-Eric et désolé de vous embêter

je suis nul en VBA

Je viens de remarquer que lorsque les 2 feuilles sources sont vides, je reçois un message d'erreur==> si ça vous dérange pas, est-il possible d'avoir un petit message pour indiquer qu'il n'y pas de données dans les feuilles au lieu de ce message de bug de la macro ?

Si c'est compliqué, je laisse tomber, c'est déjà très bien comme ça

Merci

Bonjour,

Peux-tu préciser ce que tu entends par les 2 feuilles sources vides? Quel est ton process?

Travailles-tu comme dans mon exemple avec des tableaux (dynamiques)?

Cdlt.

Bonjour,

une autre façon de faire

bonne journée

Bonsoir le forum

A tester :

Option Explicit

Sub test()
Dim a, i As Long, w()
    a = Sheets("Source 1").Range("a1").CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 2 To UBound(a, 1)
            If Not .exists(a(i, 1)) Then
                .Item(a(i, 1)) = VBA.Array(a(i, 1), Empty, Empty, a(i, 4), Empty)
            Else
                w = .Item(a(i, 1)): w(3) = w(3) + a(i, 4)
                .Item(a(i, 1)) = w
            End If
        Next
        a = Sheets("Source 2").Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If Not .exists(a(i, 1)) Then
                .Item(a(i, 1)) = VBA.Array(a(i, 1), Empty, Empty, Empty, a(i, 4))
            Else
                w = .Item(a(i, 1)): w(4) = w(4) + a(i, 4)
                .Item(a(i, 1)) = w
            End If
        Next
        a = .items: i = .Count
    End With
    Application.ScreenUpdating = False
    On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Synthese").Delete
    On Error GoTo 0
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Synthese"
    With Sheets("Synthese").Cells(1)
        .Resize(1, 7).Value = Array("Clé", "Libellé 1", "Libellé 2", "Source 1", "Source 2", "Ecart", "OK/KO")
        .Offset(1).Resize(i, 5).Value = Application.Index(a, 0, 0)
        With .CurrentRegion
            .Columns(.Columns.Count - 1).Offset(1).Resize(i) = "=rc[-2]-rc[-1]"
            .Columns(.Columns.Count).Offset(1).Resize(i) = "=IF(RC[-1]=0,""OK"",""KO"")"
            .Columns(.Columns.Count).HorizontalAlignment = xlCenter
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 38
                .HorizontalAlignment = xlCenter
            End With
            .Columns.ColumnWidth = Array(6, 10, 10, 12, 12, 12, 8)
        End With
        .Parent.Activate
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Rechercher des sujets similaires à "comparaison entre donnees feuilles"