Comparer des données entre deux feuilles

Bonjour,

J'ai besoin d'aide ...

J'ai une onglet recapitulatif de paie. J'ai des références en colonne A... le début et la fin ne sont pas fixes (dans la macro que j'ai faite, j'ai identiifé la première ligne et la dernière ligne).

Ce que je veux est vérifier que toutes ces références sont bien présente sur l'onglet Bases en A7 et tout ce qui est en dessous ou en G7 et tout ce qui est en dessous ou en M7 et tout ce qui est en dessous.

Si ce n'est pas le cas, je veux que les références soient listées par exemple sur l''onglet Bases à partir de la cellule N23

J'ai cherché dictionnaire, collection, variable tableau mais cela me dépasse, je ne sais pas faire.

So help please

Bonjour,

Voici une proposition:

Le code:

Sub verif_existence_reference()
Dim Feuil_recap As Worksheet, Feuil_base As Worksheet
Dim reference As String
Dim References As New Collection
Dim Cel_sortie As Range
Dim ligFin As Integer, ligDep_check As Integer, lig As Integer
Dim tableau As Variant, col_a_checker As Variant, col As Variant

'initialisations
Set Feuil_recap = Sheets("Recapitulatif de Paie")
Set Feuil_base = Sheets("Bases")
col_a_checker = Array("A", "G", "M")
Set Cel_sortie = Feuil_base.Range("N20")
ligFin = 73 '.Range("A" & Rows.Count).End(xlUp).Row
ligDep_check = 7
tableau = Feuil_recap.Range("A2", "A" & ligFin).Value

'enregistrement des références de la feuille recap
For lig = 1 To UBound(tableau, 1)
    reference = tableau(lig, 1)
    If Not reference = "" Then
        On Error Resume Next 'pour éviter les problèmes si la référence a déjà été ajoutée
        References.Add Item:=reference, Key:=reference
        On Error GoTo 0
    End If
Next lig

'vérification de la présence des références dans la feuille Bases
With Feuil_base
    'vérification pour chacun des colonnes
    For Each col In col_a_checker
        ligFin = .Range(col & Rows.Count).End(xlUp).Row

        tableau = .Range(col & ligDep_check, col & ligFin).Value

        For lig = 1 To UBound(tableau, 1)
            'tente d'enlever la référence de la collection qui les stocke
            On Error Resume Next
            References.Remove CStr(tableau(lig, 1))
            On Error GoTo 0
        Next lig
    Next col

    'réinitialisation de la cellule de sortie
    If Not Cel_sortie = "" Then
        ligFin = .Cells(Rows.Count, Cel_sortie.Column).End(xlUp).Row
        .Range(Cel_sortie, Cells(ligFin, Cel_sortie.Column)).Value = ""
    End If

    'si on a des références qui n'ont pas été trouvées (donc enlevées de la collection)
    If References.Count > 0 Then
        ReDim tableau(1 To References.Count, 1 To 1)

        'on enregistre les références dans un tableau pour sortir le résultat sur la cellule de sortie
        For lig = 1 To References.Count
            tableau(lig, 1) = References(lig)
        Next lig

        Cel_sortie.Resize(References.Count, 1).Value = tableau
        Feuil_base.Activate
        Cel_sortie.Select
        MsgBox "Vérification effectuée, une ou plusieurs références n'apparaissent pas dans la feuille Bases", vbInformation, "Référence(s) absente(s)"
    Else
        MsgBox "Vérification effectuée, toutes les références apparaissent dans la feuille Bases", vbInformation, "Tout est OK"
    End If
End With
End Sub

Bonjour

Merci pour tout ce travail mais j'ai des soucis.

Le programme a fonctionné une première fois puis il bloque sur la ligne

.Range(Cel_sortie, Cells(ligFin, Cel_sortie.Column)).Value = ""

Ensuite j'ai voulu utiliser mes références début de ligne et fin de ligne en modifiant les chiffres que tu as mis 73 et 7.

Mais cela ne fonctionne pas. Je fais donc de nouveau appel à ton savoir.

Et pendant que j'y suis, sur le début du code, il y a un remplacement des apostrophes. C'est long, est ce que tu as un moyen d'optimiser le code pour raccourcir la durée?

Merci pour ton aide

Bonsoir,

En effet j'ai oublié de mettre un point à .Cells(ligFin, Cel_sortie.Column

il n'y a pas de variable ligDep pour la feuille recap, je l'ai créé et réglé à 4, ligFin est passé à 95

Pour accélérer le remplacement, j'ai précisé un peu sur quelle zone effectuer la recherche et le remplacement, à la base ça prenait toutes les cellules de la feuille... J'ai plutôt dis de regarder dans la zone où se trouve la cellule en référence A + ligDep

Le fichier:

Bonsoir et merci pour ton aide,

J'ai quand même un souci avec les lignes de début et fin de traitement.

En fait, les rubriques A04 B08 et I04 ne me dérangent pas ... plus globalement ce qui est avant la ligne Salaire Brut ne m'intéresse pas à checker.

et de même, les rubriques F07 F12 ... ne me dérangent pas non plus ... plus globalement ce qui est après la ligne de Net Imposable, je l'ignore.

Ces deux lignes Salaire Brut et Net imposable ne sont jamais sur les mêmes lignes (tout dépend de l'importance de l'entreprise)

. C'est pourquoi j'avais fait un début de macro qui recherchait ces références de début et fin de traitement.... et je pense que le fonctionnement était bon. J'ai remis ce bout de code dans la macro que tu m'as renvoyée.

Si tu sais l'intégrer ... je n'ose pas toucher ne sachant pas si c'est ligdep ligdep_check lif fin...

Bonjour,

Oui pas de soucis c'est faisable:

Bon et bien cela semble bien répondre à mes attentes.

Un grand merci et bravo

Rechercher des sujets similaires à "comparer donnees entre deux feuilles"