Remplacements matricielle par du VBA

Bonjour à tous.

Voici mon problème.

J'ai un fichier excel avec un certain nombre de référence dans 2 colonnes.

Je souhaiterais comparer ces 2 colonnes et renvoyer dans une (ou plusieurs) autre(s) colonne(s) les valeurs des cellules de la 2eme colonnes qui ont une chaine commune d'au moins 11 caractères avec une des cellules de la première colonne.

Il faudrait vraiment que quel que soit l'emplacement de la chaine de 11 caractères minimum dans les valeurs des cellules Col A et B les correspondances de la Col B soient renvoyées.

Et il y a des cas où il peut y avoir plusieurs valeurs répondant aux critères dans la colonne 2, Il faudrait que les différentes réponses se mettent sur la même ligne dans la colonne suivante.

Je joint un fichier exemple que j'ai préparé afin de donner une idée du résultat final espéré.

J'avais déjà fait un premier post pour lequel on m'a déjà orienté sur une formule matricielle de ce type :

"{=SIERREUR(INDEX($B$1:$B$22;PETITE.VALEUR(SI(SIERREUR(CHERCHE($A2;$B$1:$B$22)>0;0);LIGNE($B$1:$B$22));COLONNES($A:A)));"")}"

Mais dans mon fichier exemple, je n'arrive pas à l'utiliser et mon fichier à traiter comportant 5644 lignes en colonne A et 6297 lignes en colonne B et c'est un peu lourd pour une formule classique, on m'a donc conseillé de plutot passer en VBA.

Merci d'avance du coup de main.

Cdt.

bonjour,

solution via une macro. d'après ton exemple, on ne compare que les 11 premiers caractères de la colonne A, c'est ce que fait la macro.

Sub aaargh()
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        Set plage = .Cells(1, 2).Resize(dl)
        For i = 2 To dl
            sv = Left(.Cells(i, 1), 11)
            Set re = plage.Find(sv, lookat:=xlPart)
            If Not re Is Nothing Then
                fa = re.Address
                col = 2
                Do
                    col = col + 1
                    .Cells(i, col) = re.Value
                    Set re = plage.FindNext(re)
                Loop Until re.Address = fa
            End If
        Next i
    End With
End Sub

lancer la macro via alt-f8

Ok, je viens d'essayer sur mon fichier global et je dois dire que ça m'a l'air impeccable.

Effectivement la comparaison se fait par rapport au 11 premiers caractères de la colonne A, je n'avais pas pensé à le préciser dans ma demande mais tu l'as bien remarqué.

Merci infiniment du coup de main .

Rechercher des sujets similaires à "remplacements matricielle vba"