VLookup dans VBA : un coup ça marche, l'autre ça plante !!!

FloreR

XLDnaute Nouveau
Bonjour à tous,

Une nouvelle fois, je sollicite le clan des excel-downloaders pour me sortir d'un mauvais pas de VBA...

J'ai écrit le code suivant, qui me permet de rentre dans une cellule la valeur que me rendrait une fonction recherchev dans la feuille de calcul.

cas est une chaîne de caractères déclarée plus haut
j est un curseur qui décrit un certain nombre de lignes (commence à 12).

If Cells(8, 3) = "oui" Then
If IsError(Application.WorksheetFunction.VLookup(cas, Worksheets("BdDMinéraux").Range("E4:H613"), 4, False)) Then
Sheets("Feuille de résultats").Cells(j, 5) = ""
Else
Sheets("Feuille de résultats").Cells(j, 5) = Application.WorksheetFunction.VLookup(cas, Worksheets("BdD Minéraux").Range("E4:H613"), 4, False)
End If
Else
Sheets("Feuille de résultats").Cells(j, 5) = "/"
End If


Lorsque je fais tourner mon code pas à pas, la première fois que je rentre dans la boucle, il me rend en cellule (12,5) la bonne valeur.
Au tour suivant, quand j = 13, il me retourne une erreur d'exécution 1004 : impossible de lire la propriété VLookup de la classe worksheetFunction.
Cela n'est pas lié à ma chaîne de caractères "cas", car j'ai fait plusieurs tests avec différentes valeurs de "cas", et quelle que soit la valeur rentrée, ça marche au premier coup, et ensuite, ça plante.

Avez-vous une idée du problème ????
Moi, je sèche complètement !!!

Merci d'avance,
Flore
 

Bebere

XLDnaute Barbatruc
Re : VLookup dans VBA : un coup ça marche, l'autre ça plante !!!

bonjour Florer
à essayer
Dim f As Variant

If Cells(8, 3) = "oui" Then
f = Application.WorksheetFunction.VLookup(cas, Worksheets("BdDMinéraux").Range("E4:H613"), 4, False)
If IsError(f) Then
Sheets("Feuille de résultats").Cells(j, 5) = ""
Else
Sheets("Feuille de résultats").Cells(j, 5) = f
End If
Else
Sheets("Feuille de résultats").Cells(j, 5) = "/"
End If

à bientôt
 

FloreR

XLDnaute Nouveau
Re : VLookup dans VBA : un coup ça marche, l'autre ça plante !!!

Bonjour Bebere,

Merci pour ta réponse, que je viens seulement de tester...
Point positif : j'ai gagné une incrémentation ! Ce n'est plus à partir du second "tour" dans la boucle que ça plante, mais seulement au troisième ! ;-)

Je sèche toujours...
Une autre idée ?

Quoi qu'il en soit, merci beaucoup de maider !
FloreR
 

flyonets44

XLDnaute Occasionnel
Re : VLookup dans VBA : un coup ça marche, l'autre ça plante !!!

Bonjour
selon ce que j'ai lu sur d'autres forums, il est préférable d'utiliser application.vlookup
en lieu et place de Application.WorksheetFunction.VLookup
par ailleurs il faut faire le test if iserror(f) pour chaque utilisation de vlookup
tu peux aussi essayer avec match voir le code ci-dessous
Sub Cherchval()
Application.ScreenUpdating = False
'Recherche d'une valeur dans une feuille différente 12.09.08
Dim Res As Variant
Dim LookupRng As Range
Dim myCell As Range
'la feuille où est effectuée la recherche
With Feuil2
Set LookupRng = .Range("C:C")
End With
'la valeur recherchée
Set myCell = Feuil4.Range("C5")
Res = Application.Match(myCell.Value, LookupRng, 0)
If IsError(Res) Then
MsgBox "Not found!"
Err.Clear
Else
'ecriture d'un flag en colonne H en fonction de la valeur de H
With LookupRng.Parent.Cells(Res, "H")
If IsNumeric(.Value) Then
.Value = .Value - 1
Else
'MsgBox "Not numeric!"
.Value = "ok"
End If
End With
End If
Set myCell = Nothing: Set LookupRng = Nothing
End Sub
Cordialement
Flyonets
 

Discussions similaires

Réponses
0
Affichages
153

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit