Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
    51.2 KB · Affichages: 19
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...

job75

XLDnaute Barbatruc
Bonsoir iliess,

Le bug a lieu sur Arr(i, 3) = Left(chn, p1 - 1)

Parce que pour i = 4 p1 vaut zéro.

Et ceci parce qu'il n'y a pas de tiret "-" en B5, ce sont tous des tirets bas "_".

A+
 

iliess

XLDnaute Occasionnel
bonsoir job75
merci pour votre réponse
si
i = 1
p = 6
Arr(1,3)=25143
donc si je rechrchev 25143 dans le tableau je trouve Arr(1,4)=963852
mais le code affiche Erreur 2042 comme indiqué dans la capture d'ecrand
 

laurent950

XLDnaute Accro
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
253
Réponses
11
Affichages
304
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…