Rechercher une plage identique dans BdD

Bonjour à toutes et tous,

Voici mon souci.

J'ai 2 feuilles, 1 nommée "BdD" et l'autre "Feuil1" d'ou je fais ma recherche.

Dans une plage de cellules j'ai des données qui peuvent êtres numériques ou alphabétiques.

Dans l'exemple joins, ces données sont sur une plage de 7 lignes et 5 colonnes, mais c'est pour vous simplifier mon exemple, car en réalité, dans la base de donnée, c'est + de 5000 lignes sur 22 colonnes.

Mon but est de rechercher si, dans ma base de données j'ai déjà une (ou plusieurs) plage(s) de données identiques à la plage entière de la feuille 1, et que je puisse rapidement la retrouver dans la base de données, soit en donnant le n° de la première ligne de la ou les plage(s) concernée(s)

J'ai essayé un TCD, mais je n'arrive pas au résultat rechercher, également par rechercheV et H, mais le résultat est idem.

Est-ce faisable avec une formule Excel ? (j'en doute)

Ou alors avec un code VBA ? (plus plausible)

Ou tout simplement impossible

Pourriez-vous me dire ce que vous en pensez.

Merci d'avance pour vos conseil et aide.

Cordialement

Dubdub22

10test.xlsm (14.70 Ko)

Bonjour,

Une piste :

Sub Test()

    Dim PlgBase As Range
    Dim PlgRech As Range
    Dim Cel As Range
    Dim CelTrouve As Range
    Dim Tbl()
    Dim I As Long
    Dim J As Long
    Dim K As Integer
    Dim L As Long
    Dim Chaine1 As String
    Dim Chaine2 As String
    Dim Message As String
    Dim Adr As String

    'défini les plages sur toute la feuille à partir de A5
    Set PlgRech = DefPlage(Worksheets("Feuil1"), 5)
    Set PlgBase = DefPlage(Worksheets("BdD"), 5)

    'les deux plages doivent avoir le même nombre de colonnes
    If PlgRech.Rows(1).Cells.Count <> PlgBase.Rows(1).Cells.Count Then
        MsgBox "Les plages n'ont pas le même nombre de colonnes, ceci va mettre fin à la procédure !": Exit Sub
    End If

    'une fois le contrôle effectué, la plage est définie seulement sur la colonne A à partir de A5
    With Worksheets("BdD"): Set PlgBase = .Range(.Cells(5, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    'concatène les valeurs devant être recherchées
    For Each Cel In PlgRech: Chaine1 = Chaine1 & Cel.Value: Next Cel

    'recherche le premier caractère de la plage dans la colonne A de la feuille "BdD"
    Set CelTrouve = PlgBase.Find(PlgRech(1, 1).Value, , xlValues, xlWhole)

    If Not CelTrouve Is Nothing Then

        Adr = CelTrouve.Address

        Do

            J = CelTrouve.Row

            Chaine2 = ""

            'concatène le nombre de caractères identique à la chaîne Chaine1
            For I = 1 To PlgRech.Count

                K = K + 1

                If K > PlgRech.Rows(1).Cells.Count Then: K = 1: J = J + 1

                Chaine2 = Chaine2 & Worksheets("BdD").Cells(J, K).Value

            Next I

            K = 0: J = 0

            'si les deux chaînes son identiques, stocke l'adresse de la cellule se trouvant
            'en haut et à gauche de la plage (donc, la cellule ayant la valeur cherchée)
            If Chaine1 = Chaine2 Then

                L = L + 1: ReDim Preserve Tbl(1 To L)
                Tbl(L) = CelTrouve.Address(0, 0)

            End If

            'continue la recherche
            Set CelTrouve = PlgBase.FindNext(CelTrouve)

        Loop While CelTrouve.Address <> Adr

    End If

    'si le tableau a été initialisé, concatène pour le message
    If Not Not Tbl Then

        For I = 1 To UBound(Tbl): Message = Message & Tbl(I) & vbCrLf: Next I
        MsgBox "La série a été trouvée dans les cellules :" & vbCrLf & Message

    End If

End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range

    On Error GoTo Fin

    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With

    Exit Function

Fin:

    Set DefPlage = Nothing

End Function

Ce code a été fait en fonction de ton classeur exemple, si l'original est construit différemment, il te faudra adapter !

Bonjour Thèse,

Merci pour votre réponse rapide et efficace, cela fonctionne parfaitement après adaptation à mon fichier.

Juste une petite demande, sauriez-vous si j'ai plusieurs fois une plage identique, si le code va me les détectées également, je n'ai pas regardé, trop content de ce que vous avez fait en 1 ou deux heures, alors que je planche sur le sujet depuis plus de quinze jours, sans aucun résultat.

Encore merci

Cordialement

Dubdub22

Bonjour,

Juste une petite demande, sauriez-vous si j'ai plusieurs fois une plage identique, si le code va me les détectées également

Désolé, je ne saisis pas bien le sens de ta demande

"Plusieurs fois un plage identique" mais c'est ce que fait le code puisqu'il trouve deux fois la séquence dans ton fichier exemple !

Ou alors il y a quelque chose qui m'échappe

Bonjour Theze,

Merci pour ta réponse, effectivement je n'ai pour le moment pas trouvé de plages identiques sur mon fichier, alors suite à ta réponse j'ai fait un essai sur le fichier test, et effectivement, cela fonctionne parfaitement, il me met bien deux n° de cellule.

Encore merci de ton aide, rapide et efficace

Cordialement

Dubdub22

Content de t'avoir aidé

Rechercher des sujets similaires à "rechercher plage identique bdd"