Comparaison de colonne VBA

Bonjour,

je commence dans Excel et mes idées dépassent de loin mes capacités.

Dans l'Excel qui suit, j'ai un tableau avec des données et j'aimerais savoir si les données de la colonne "Colonne à comparer" sont présentes dans une de ces colonnes. Si oui, j'aimerais que le(s) nom(s) apparaissent dans la colonne "Présence de la donnée".

Donc au final, pour "1" dans la colonne "Présence de la donnée", je devrais avoir : "1, 5, 9".

J'ai essayé avec la fonction RECHERCHEV, puis en concaténant le résulta mais ça ne marche pas comme je veux.

Merci d'avoir lu mon post,

Merci par avance pour votre aide.

image

Bonjour Dimitri_B,

Un exemple en VBA, il y a surement moyen de faire mieux surtout s'il y a beaucoup de données et que les lignes et colonnes ne sont pas toujours définies ... j'ai uniquement fait des boucles sur un tableau à taille définit

Peut être en passant par des TCD ou en imbriquant des SI et des NB sinon.

Hello,

Une autre approche (si ce n'est pas des numériques à chercher enlever le Cint dans la rechercheV) :

Sub Presence()
    Dim bytSearchCol As Byte, bytFirstCol As Byte, bytCol As Byte
    Dim strNameCol$, strValueToSearch$
    Dim intCompareRow%, intHeaderSearchRow%
    bytSearchCol = 10 ' 10 colonnes de recherche
    bytFirstCol = 6 'Premiere colonne de recherche
    intCompareRow% = 4 'Premiere ligne du tableau des valeur à chercher
    intHeaderSearchRow% = 3 'Ligne des en-tetes du tableau de recherche
    Do Until Range("C" & intCompareRow%) = Empty
        Range("D" & intCompareRow%) = Empty
        strValueToSearch$ = Range("C" & intCompareRow%).Value
        For bytCol = bytFirstCol To (bytSearchCol + bytSearchCol)
            On Error Resume Next
            MonResultat = Application.WorksheetFunction.VLookup(CInt(strValueToSearch$), Columns(bytCol), 1, False)
            On Error GoTo 0
            Range("D" & intCompareRow%) = _
                IIf(MonResultat <> Empty, Range("D" & intCompareRow%) & Cells(intHeaderSearchRow%, bytCol) & ",", Range("D" & intCompareRow%))
            MonResultat = Empty
        Next bytCol
        Range("D" & intCompareRow%) = Left(Range("D" & intCompareRow%), Len(Range("D" & intCompareRow%)) - 1)
        intCompareRow% = intCompareRow% + 1
    Loop
End Sub

Merci koko,

sympas les commentaires. Dans ton code je suppose que les "Next y", "Next x", "Next i" ça fait des +1 aux variables ?

faut vraiment que je m'intéresse aux boucles ça m'évitera d'être plus flexible :)

C'est exactement ça ;)

Merci Rag,

elle marche aussi cependant ta formule semble aussi chercher dans les titres des colonnes j'ai donc les colonnes où y'a le numéro de colonne (cf l'image qui suit).

Je suis curieux de savoir à quoi servent les "%" dans tes noms de variables.

image

Les pourcentages c'est le raccourci d'integer.

Tu as besoin que je corrige ma rechercheV ?

Bonjour,
Une proposition Power Query.
Cdlt.

picture1

bonjour,

une autre methode VBA avec des résultat uniques et ascendants

Sub Methode_Matrices()
     Dim A, B, C, iCol
     A = Range("F4:O10").Value     'vos valeurs
     B = Range("C4:C10").Value     'vos valeurs à chercher
     ReDim C(1 To UBound(B), 1 To 1)     'preparer matrice des résultat

     For iCol = 1 To UBound(A, 2)     'boucle des colonnes
          s = "|" & Join(Application.Transpose(Application.Index(A, 0, iCol)), "|,|") & "|"     'fusionner les valeurs d'une colonne avec une Pipe "|" avant et après chaque element
          For i = 1 To UBound(B)     'boucle les valeurs à chercher
               If InStr(1, s, "|" & B(i, 1) & "|", vbTextCompare) > 0 Then     'ce valeur est dans cette colonne
                    C(i, 1) = C(i, 1) & IIf(Len(C(i, 1)), ",", "'") & iCol     'ajouter numéro de colonne dans la matrice des résultat avec un préfix ' pour le premier (=créer un string) et un virgule pour le reste
               End If
          Next
     Next
     Range("B4:B10").Value = C     'coller la matrice des résultats
End Sub

ok bah merci à tous pour vos explications / code. Bon WE

Rechercher des sujets similaires à "comparaison colonne vba"