Run-time error '13' Type mismatch avec fonction vlookup VBA

Bonjour à tous,

Je suis complètement bloqué par une erreur qui semble toute bête et pourtant impossible à résoudre.

J'utilise cette fonction:

'-------------------------------------

Col_index_num = 2

Col_TAB_Data_Plus =9

Function Vlookup_Data_PlusToConnection1()

For i = 2 To Last_line_Backlog

Dim R As Variant

R = Application.VLookup(TAB_Data_Plus(i, 1), TAB_Connection1, Col_index_num, False)

If IsError(R) Then

TAB_Data_Plus(i, Col_TAB_Data_Plus) = ""

Else

TAB_Data_Plus(i, Col_TAB_Data_Plus) = R

End If

Next

End Function

'-----------------------------------------------

J'ai un tableau VBA TAB_Connection1 qui contient deux colonnes. La première avec la référence et la deuxième avec les données à rechercher. Je voudrais que les données de la deuxième colonnes apparaissent dans la neuvième colonne du tableau TAB_Data_Plus. Raison pour laquelle Col_TAB_Data_Plus = 9. La première colonne du TAB_Data_Plus contient la référence.

Les deux tableaux sont affichés dans le fichier excel joint.

La ou ca se complique c'est lorsque que je lance le programme, l'erreur Run-time error '13' Type mismatch apparaît. Alors j'ai tout essayé. Changer la déclaration de la variable R, vérifier et revérifier. Et rien ne fonctionne la même erreur apparaît à chaque fois.

J'ai fini par essayé de changer les données stockées dans le TAB_Connection1 et la ca fonctionne parfaitement (avec des dates, textes, ....). J'ai donc conclu que c'était les données traitées qui étaient le problèmes. Mais étant donné que la variable R est en Variant, ca ne devrait pas poser de problème justement. C'est là que je suis perdu.

Ce qui me parait encore plus étrange, c'est que la première référence recherchée n'apparait pas dans le TAB_Connection1. La fonction ne traite donc aucune information et devrait continuer au moins jusqu'à la première référence trouvée. Or il bloque à i =2.

Est que quelqu'un peut m'éclairer?

Merci pour vos réponses.

25book1.xlsx (219.62 Ko)

Bonjour,

Une Function est une fonction et ne s'utilise pas à la place d'une Sub or il semble que tu veuilles utiliser ça comme une Sub mais comme ton fichier ne comporte aucun code VBA rien ne permet de deviner comment ( ni ou ? ) tu vas utiliser cette Fonction ni ce que tu veux faire.

Pourquoi

Col_index_num = 2

Col_TAB_Data_Plus =9

... sont il définis en dehors de ton code ?

ce n'est pas le For i = qui pose problème c'est le

To Last_line_Backlog qui suit juste après !

C'est quoi Last_line_Backlog tu le sort d'où ? C'est défini comment ?

A+

Cette fonction est utilisée dans une procédure sub.

J'utilise cette même fonction mais utilisant d'autres tableaux dans mon code. Donc je sais qu'elle fonctionne, que toutes mes variables sont bien déclarées.

Col_index_num et Col_TAB_Data_Plus sont deux variables qui me permettent de sélectionner les colonnes à utiliser dans mon Vlookup. Ici puiser l'info dans la colonne 2 et la mettre dans la colonne 9.

Last_Line_Backlog est une autre variable (déclarée comme il faut) qui est égale au nombre de ligne de mon tableau TAB_Data_Plus pour que le Vlookup parcours toutes les lignes.

Enfin, toutes les variables Col_index_num, Col_TAB_Data_Plus et Last_Line_Backlog sont déclarée en single puisqu'elles sont égales à des chiffres.

Mes tableaux sont déclarés en variant puisqu'ils stockent des données de différents types.

J'ai un peu avancé de mon côté et ai trouvé une solution b pas sexy du tout mais ca fonctionne. J'affiche le tableau TAB_Connection1 dans un objet woorksheet puis j'exécute la fonction en changeant l'array. Comme ceci ca fonctionne.

Il est certains maintenant que le problème provient du TAB_Connection1 pourtant je ne vois aucune anomalie dans ce tableau après l'avoir affiché sur une sheet.

'------------------------------------------------------

Function Vlookup_Data_PlusToConnection1()

For i = 2 To Last_line_Backlog

Dim R As Variant

'R = Application.VLookup(TAB_Data_Plus(i, 1), TAB_Connection1, Col_index_num, False)

R = Application.VLookup(TAB_Data_Plus(i, 1), Sheets("Sheet1").Range("P12:Q6234"), Col_index_num, False)

If IsError(R) Then

TAB_Data_Plus(i, Col_TAB_Data_Plus) = ""

Else

TAB_Data_Plus(i, Col_TAB_Data_Plus) = R

End If

Next

End Function

'------------------------------------------------------

Rechercher des sujets similaires à "run time error type mismatch fonction vlookup vba"