Sierreur VBA Excel

bonjour

mon code fonctionne très bien sauf dans cette ligne et que la valeur a chercher n'excite pas.

ShTva.Range("B" & LShTva).Value = WorksheetFunction.VLookup(Brr(i, 1), tableau, 8, False)

j'ai essayé d'jouter la fonction si erreur avant la formule mais toujours ca marche pas

ShTva.Range("B" & LShTva).Value = IFERROR(WorksheetFunction.VLookup(Brr(i, 1), tableau, 8, False),"")

Svp aidez moi de trouver la bonne écriture

merci

Bonsoir,

un essai non essayé, avec EVALUATE :
ShTva.Range("B" & LShTva).Value = EVALUATE("=IFERROR(WorksheetFunction.VLookup(Brr(i, 1), tableau, 8, False),"")")
ou en extrayant les données VBA :
ShTva.Range("B" & LShTva).Value = EVALUATE("=IFERROR("&WorksheetFunction.VLookup(Brr(i, 1), tableau, 8, False)&","""")")

Sans conviction...

@ bientôt

LouReeD

bonsoir,

  Dim x     As Variant     '!!!!!!
     x = Application.VLookup(Brr(i, 1), tableau, 8, False)
     If IsError(x) Then
          ShTva.Range("B" & LShTva).Value = "vous avez fait un erreur"
     Else
          ShTva.Range("B" & LShTva).Value = x

bonsoir

merci pour vos réponses

Mr LoureeD sa marche pas pour les deux lignes

Mr BsAlv ca marche et est ce que je peux réduire ce code

dans mon code j'ai 3 lignes avec Vlookup et si j'utilise votre code je me trouve avec 18 lignes

merci beaucoup pour votre aides

18 ? Vous répétez ce Vlookup plusieurs fois ? Alors on peut créer une fonction !

Bonjour à tous,

si le but est de ramener les valeurs plusieurs colonnes d'une même ligne de données, autant tester sa validité une seule fois, les recherchev() se feront sans erreur ensuite.

If Application.CountIf(Columns(1), "item1") > 0 Then
    'tes recherchev()
    '...
End If

eric

bonjour,

est-ce que ceci est une triche ?

 On Error Resume Next

     x = "erreur": x = WorksheetFunction.VLookup(brr(i, 1), tableau, 8, False)
     ShTva.Range("B" & LShTva).Value = x

     x = "erreur": x = WorksheetFunction.VLookup(brr(i, 2), tableau, 8, False)
     ShTva.Range("B" & LShTva + 1).Value = x

     x = "erreur": x = WorksheetFunction.VLookup(brr(i, 3), tableau, 8, False)
     ShTva.Range("B" & LShTva + 2).Value = x

     On Error GoTo 0

bonsoir les amis

voici un fichier démo qui englobe tous les solutions proposer

merci pour votre aides

bonjour, si vous avez déjà trouvé la ligne, il ne faut plus que prendre le1ier, 3ieme et 7ieme element.

Sub test2()
     Dim Arr, Col1, Brr

     With Range("A3:G7")
          Arr = .Value     'toute la plage
          Col1 = .Columns(1).Value     'juste colonne 1
     End With
     Brr = Range("J3:N7").Value

     For j = LBound(Brr) To UBound(Brr)
          r = Application.Match(Brr(j, 1), Col1, 0)     'recherche ID dans la premiere colonne de Table Facture
          If IsNumeric(r) Then     'trouvé
               Range("B13").Offset(j).Resize(, 4).Value = Array(Brr(j, 1), Arr(r, 1), Arr(r, 3), Arr(r, 7))     'les 4 données
          Else
               Range("B13").Offset(j).Resize(, 4).Value = Array(Brr(j, 1), "-", "--", "---")     'des errerurs
          End If
     Next
End Sub

Bonjour,

ne me dit pas que tu as testé ma proposition.
Déjà, le test il ne faut le faire qu'une fois, c'est là l'intérêt puisque tu voulais réduire le nombre de lignes.
Ca serait plutôt :

            If Application.CountIf(Columns(1), "item1") > 0 Then
                Range("B13").Value = WorksheetFunction.VLookup(Brr(j, 1), Range("A3:G7"), 1, False)
                Range("C13").Value = WorksheetFunction.VLookup(Brr(j, 1), Range("A3:G7"), 3, False)
                Range("D13").Value = WorksheetFunction.VLookup(Brr(j, 1), Range("A3:G7"), 7, False)
            End If

et si tu recherches "item1" tu n'es pas prêt de le trouver.
Si tu ne fournis pas de fichier c'est que tu comptes faire l'effort d'adapter.

De plus à ne pas décrire exactement le pb à défaut de fichier, tu te prives de solutions beaucoup plus efficaces qu'on voit maintenant.
Bref...

eric

Je remercie tous ceux qui m'ont aidé à résoudre ce problème, que ce soit à travers des codes ou des suggestions et des astuces.

Apres des recherche j'ai trouver cette solution sur le web elle est utile pour moi et pour d'autre lecteur qui ont le meme problème

https://excel-malin.com/ =recherche sur une plage (Table_matrice As Range = lentement) et traitement que c'est un erreur.

Il faut faire cela 3 fois par ligne.

RECHERCHEV = Application.VLookup(Valeur_Cherchee, Table_matrice, No_index_col, Valeur_proche)

ma manière = méthode "Vlookup" et "Match" sont pareil, ce qui produit un chiffre ou un valeur "erreur" qui j'utilise 3 fois simultanément et sur un array au lieu d'une plage

r = Application.Match(Brr(j, 1), Col1, 0) 'recherche ID dans la premiere colonne de Table Facture If IsNumeric(r) Then 'trouvé

La question était d'eviter ces "18" lignes, donc moi, je n'ai que 8 lignes dans ce boucle et vous ?

si on doit faire ce truc plusieurs fois, il fait eviter au maximum la manipulation de la feuille (lire et écrire), chez moi, une écriture (3 éléments simultanés) par ligne, chez vous 3 lectures et 3 écritures par ligne,

conclusion : 2 méthodes, mais c'est comme des pommes et des oranges.

Mr SsAlv

vous avez raisons et votre solutions est la meilleur c'est pour ca j'ai mis utile pour votre message

merci beaucoup

Rechercher des sujets similaires à "sierreur vba"