Amélioration de mon code VBA

Bonjour,

je vais vous exposer ma situation. J'ai un code VBA qui me permet d'analyser deux plages de cellules et de recopier les mots identiques avec ses occurrences entre ces 2 plages. Exemple: Si le mot "Dans" est présent dans la première plage de cellule 5 fois et 1 fois dans la seconde, alors mon code va les recopier dans une plage de cellule. Le problème est que pour les mots aves des tirets, espace... ces derniers ne sont pas pris en compte. J'aimerai que mon code soit amélioré afin que si le mot composé existe séparément il soit recopié avec ses occurrences. Exemple: "Aissa-Slimani" est présent dans la première plage de cellule, mais dans le seconde il n'existe pas comme tel, mais "Aissa" et "Slimani" existe séparément. Dans ce cas précis je voudrais que "Aissa-Slimani" soit recopié avec son occurrence et l'occurrence de la deuxième plage de cellule. Voici mon code VBA:

Sub trouver_noms_identiques() ThisWorkbook.Worksheets("").Activate Dim rng1 As Range, rng2 As Range, c As Range Dim i As Long, j As Long, k As Long Dim n As Long Set rng1 = Range("A2:B5212") Set rng2 = Range("D2:E218983") k = 2 For i = 1 To rng1.Rows.Count For j = 1 To rng2.Rows.Count If rng1.Cells(i, 1).Value = rng2.Cells(j, 1).Value Then Range("H" & k).Value = rng1.Cells(i, 1).Value Range("I" & k).Value = rng1.Cells(i, 2).Value Range("J" & k).Value = rng2.Cells(j, 2).Value k = k + 1 Exit For End If Next j Next i End Sub.

bonjour,

merci à l'avenir de mettre ton code entre balise code (bouton </>)

une proposition

Sub trouver_noms_identiques()

    'ThisWorkbook.Worksheets("").Activate
    Dim rng1, rng2
    Dim i As Long, j As Long, k As Long, n As Long, dl1&, dl2&
    dl1 = Cells(Rows.Count, 1).End(xlUp).Row
    rng1 = Range("A2").Resize(dl1 - 1, 2)
    dl2 = Cells(Rows.Count, 4).End(xlUp).Row
    rng2 = Range("D2").Resize(dl2 - 1, 2)
    k = 2
    For i = LBound(rng1) To UBound(rng1)
        nom = LCase(Replace(rng1(i, 1), "-", " "))
        noms = Split(nom)
        For n = LBound(noms) To UBound(noms)
            For j = LBound(rng2) To UBound(rng2)
                If InStr(" " & noms(n) & " ", " " & LCase(rng2(j, 1)) & " ") > 0 Then
                    Range("H" & k).Value = rng1(i, 1)
                    Range("I" & k).Value = rng1(i, 2)
                    Range("J" & k).Value = rng2(j, 2)
                    k = k + 1
                    'n = UBound(noms) 'on s'arrête dès que l'on a trouvé une partie du mot
                    Exit For
                End If
            Next j
        Next n
    Next i
End Sub
Rechercher des sujets similaires à "amelioration mon code vba"