Rechercher text dans cellule dans tableau

Y compris Power BI, Power Query et toute autre question en lien avec Excel
P
PigeonDargile
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 mai 2019
Version d'Excel : 2010 FR
Version de Calc : Xlsx

Message par PigeonDargile » 24 mai 2019, 10:56

Bonjour,
Je solicite votre aide car je n ai pas de connaissance en VBA et je pense que mon problème en nécessite. Jai tout essayé, recherchev, trouve, erreurtext, nb.si ....

Tout est normalement expliqué dans l excel joint.

Jai 2 tableau A et B , je cherche a trouver des similitudes entre les lignes du tableau B et A. C est assez compliqué d expliquer comme ca, tout est dans l'excel.

Je vous remercie d'avance pour votre aide.
Excel recherche text dans tableau.xlsx
(11.98 Kio) Téléchargé 9 fois
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'300
Appréciations reçues : 262
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 24 mai 2019, 12:41

bonjour,

une proposition
Option Explicit
Sub aargh()
    Dim dict As Object
    Dim plageb As Range, re As Range
    Dim dlb&, dla&, i&, j&, i1&, i2& 'long
    Dim norme$, s$, fa$, pb$, a$ 'string
    Dim k, it 'variant

    Set dict = CreateObject("scripting.dictionary")
    With Sheets("sheet1")
        dlb = .Cells(Rows.Count, 1).End(xlUp).Row
        Set plageb = .Range("B9:C" & dlb) 'plage des normes produits B
        dla = .Cells(Rows.Count, 5).End(xlUp).Row
        For i = 9 To dla ' pour chaque produit A
        
        ' on compte les normes du produit A trouvées dans les produits B
        
            For j = 6 To 11  'pour chaque norme, de la colonne 6(F) à la colonne 11 (K)
                norme = Trim(.Cells(i, j))
                If norme = "" Then Exit For
                Set re = plageb.Find(norme, lookat:=xlPart) 'on recherche les produits qui ont cette norme
                If Not re Is Nothing Then 's'il y a au moins un produit
                    fa = re.Address
                    Do
                        pb = .Cells(re.Row, 1)
                        dict(pb) = dict(pb) + 1 ' on ajoute 1 au compteur du produit b trouvé
                        Set re = plageb.FindNext(re)
                    Loop Until re.Address = fa
                End If
            Next j
            k = dict.keys
            it = dict.items
            
            ' on trie les produits B sur base du nombre de normes trouvées (du nombre le plus grand au plus petit)
            
            For i1 = LBound(k) To UBound(k) - 1
                For i2 = i1 + 1 To UBound(k)
                    If it(i1) < it(i2) Then a = it(i1): it(i1) = it(i2): it(i2) = a: a = k(i1): k(i1) = k(i2): k(i2) = a
                Next i2
            Next i1
            
            ' on affiche le résultat pour le produit A
            s = ""
            For i1 = LBound(k) To UBound(k)
                s = s & k(i1) & "(" & it(i1) & "),"
            Next i1
            If s <> "" Then s = Left(s, Len(s) - 1)
            .Cells(i, "L") = s
            
            'on réinitialise les compteurs de normes par produit
            dict.RemoveAll
        Next i
    End With
End Sub
Modifié en dernier par h2so4 le 24 mai 2019, 17:14, modifié 1 fois.
1 membre du forum aime ce message.
P
PigeonDargile
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 mai 2019
Version d'Excel : 2010 FR
Version de Calc : Xlsx

Message par PigeonDargile » 24 mai 2019, 14:39

Super merci beaucoup , il semble que ca fonctionne
P
PigeonDargile
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 mai 2019
Version d'Excel : 2010 FR
Version de Calc : Xlsx

Message par PigeonDargile » 24 mai 2019, 14:54

Une petite question, si je dois augmenter le nombre de norme du produit A (plus que 6) 25 en réalité, qu'elle ligne dois-je modifier?
Jai essayé quelque manip, sans succés
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 8'300
Appréciations reçues : 262
Inscrit le : 16 juin 2013
Version d'Excel : 2013 UK Windows 10

Message par h2so4 » 24 mai 2019, 16:27

bonjour,

remplace cette instruction
 For j = 6 To 11  'de la colonne 6(F) à la colonne 11 (K)
par celle-ci
 For j = 6 To 30
P
PigeonDargile
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 23 mai 2019
Version d'Excel : 2010 FR
Version de Calc : Xlsx

Message par PigeonDargile » 24 mai 2019, 17:28

C est ce que j avais fait, mais j obtient l erreur : "Erreur d'exécution '13': incompatibilité de type
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message