Microsoft 365 rechercheV entre deux tableau vba excel

  • Initiateur de la discussion Initiateur de la discussion iliess
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
492
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
247
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
498
  • Question Question
Microsoft 365 Code VBA
Réponses
7
Affichages
635
Retour