Microsoft 365 rechercheV entre deux tableau vba excel

iliess

XLDnaute Occasionnel
bonjour
je souhaite faire une recherchev entre deux tableau (Arr et Brr) en vba et j'obtient l'erreur suivante Erreur 2042 dans cette ligne Arr(i, 4) = Application.VLookup(Arr(i, 3), Brr, 3, False)
VB:
Sub rechervArr()
Dim Arr As Variant, Brr As Variant
Dim chn$, p1 As Byte
Dim i As Long
Arr = Range("A2:B5")
Brr = Range("g2:j8")
ReDim Preserve Arr(1 To 4, 1 To 4)
For i = LBound(Arr) To UBound(Arr)
    chn = Arr(i, 2)
    p1 = InStr(chn, "-")
    Arr(i, 3) = Left(chn, p1 - 1)
    Arr(i, 4) = Application.VLookup(Arr(i, 3), Brr, 3, False)
Next i
End Sub
svp qu'elle est la solution
 

Pièces jointes

  • recherchev entre deux tableau vba excel.xlsm
    14.9 KB · Affichages: 4
  • Vlookup vba excel.png
    Vlookup vba excel.png
    51.2 KB · Affichages: 21
Solution
Bonsoir,

La solution : Fonction Match (Position dans une matrice) dans une variable tableau 2 D
Avec gestion Erreur si aucune correspondance.
VB:
If Not IsError(Application.Match(p1, Application.Index(Brr, , 1), 0)) Then Arr(i, 4) = Brr(Application.Match(p1, Application.Index(Brr, , 1), 0), 3)
VB:
Option Explicit
Sub rechervArr()
Dim Arr As Variant, Brr As Variant
Dim chn$, p1 As Double
Dim i As Long
Arr = Range("A2:B5")
Brr = Range("g2:j8")
ReDim Preserve Arr(1 To 4, 1 To 4)
For i = LBound(Arr) To UBound(Arr)
    chn = Arr(i, 2)
    p1 = Split(Replace(chn, "_", "-"), "-")(0)
    Arr(i, 3) = p1
    ' Application.Match(p1, Application.Index(Brr, , 1), 0)
    ' Recherche dans colonne 1 du tableau Brr()
    ' Trouve le Numéro de ligne...

laurent950

XLDnaute Barbatruc
Bonsoir,

La solution : Fonction Match (Position dans une matrice) dans une variable tableau 2 D
Avec gestion Erreur si aucune correspondance.
VB:
If Not IsError(Application.Match(p1, Application.Index(Brr, , 1), 0)) Then Arr(i, 4) = Brr(Application.Match(p1, Application.Index(Brr, , 1), 0), 3)
VB:
Option Explicit
Sub rechervArr()
Dim Arr As Variant, Brr As Variant
Dim chn$, p1 As Double
Dim i As Long
Arr = Range("A2:B5")
Brr = Range("g2:j8")
ReDim Preserve Arr(1 To 4, 1 To 4)
For i = LBound(Arr) To UBound(Arr)
    chn = Arr(i, 2)
    p1 = Split(Replace(chn, "_", "-"), "-")(0)
    Arr(i, 3) = p1
    ' Application.Match(p1, Application.Index(Brr, , 1), 0)
    ' Recherche dans colonne 1 du tableau Brr()
    ' Trouve le Numéro de ligne
    ' Puis
    ' Brr(Trouve le Numéro de ligne du tableau Brr pour la valeur P1, Puis choix de la colonne de la ligne ici la colonne 3 du tableau Brr)
    Arr(i, 4) = Brr(Application.Match(p1, Application.Index(Brr, , 1), 0), 3)
Next i
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour iliess, laurent950, le forum,

Il n'est pas nécessaire de passer par Application.Match, Application.VLookup (RECHERCHEV) va très bien.

Simplement comme en colonne G ce sont des nombres il faut convertir Arr(i, 3) en nombre :
VB:
Sub rechervArr()
Dim Arr As Variant, Brr As Variant
Dim chn$, p1 As Byte
Dim i As Long
Arr = Range("A2:B5")
Brr = Range("g2:j8")
ReDim Preserve Arr(1 To 4, 1 To 4)
For i = LBound(Arr) To UBound(Arr)
    chn = Arr(i, 2)
    p1 = InStr(chn, "-")
    Arr(i, 3) = Left(chn, p1 - 1)
    If IsNumeric(Arr(i, 3)) Then Arr(i, 3) = CDbl(Arr(i, 3)) 'convertit en nombre
    Arr(i, 4) = Application.VLookup(Arr(i, 3), Brr, 3, False)
Next i
[A2:D5] = Arr 'affiche les résultats en colonnes C et D
End Sub
A+
 

Pièces jointes

  • recherchev entre deux tableau vba excel.xlsm
    15.9 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour iliens, laurent950, le forum,

La solution de Laurent beugue s'il n'y a pas de correspondance.

Voyez le fichier joint avec 25140 en B2 au lieu de 25143.

Pas de problème avec ma solution post #6.

A+
 

Pièces jointes

  • recherchev entre deux tableau vba excel.xlsm
    16.9 KB · Affichages: 1

Discussions similaires

Réponses
12
Affichages
437
Réponses
4
Affichages
426

Statistiques des forums

Discussions
314 709
Messages
2 112 103
Membres
111 417
dernier inscrit
LYTH