[VBA] Fonctions Excel dans une fonction VBA.
wlikotae
-
wlikotae -
wlikotae -
Bonjour,
Je cherche à faire une fonction de type RechercheV ou H, sauf qu'au lieu de chercher dans une colonne ou une ligne, il cherche dans un tableau (je l'ai donc appelé RechercheT ).
Il m'en est sorti la fonction suivante :
(DECALER(Index(Tableau, EQUIV(Valeur, C_L, 0), no_index_L-1), no_index_C, 0, 1, 1))
Valeur : la valeur cherchée
C_L : le tableau dans lequel sera recherché 'valeur', qui est un vecteur ligne ou colonne obligatoirement (à cause de Equiv() ).
Tableau : Tableau comprenant la valeur cherchée ainsi que le résultat de la fonction.
no_index_L, no_index_C : la position du résultat cherché par rapport 'valeur' dans 'tableau.
mais j'aimerais faire une fonction en VBA, plus facile à écrire et peut-être plus rapide à calculer.
Voici ce que j'ai fait :
Function RECHERCHET(Tableau As Range, C_L As Range, Valeur_cherchée As String, Ligne As Integer, Colonne As Integer) As String
Dim Aux As Integer
Aux = Ligne
Ligne = Aux - 1
Dim L_Val As Integer
L_Val = Application.WorksheetFunction.Equiv(Valeur_cherchée, C_L, 0)
Dim Cell_final As Range
Set Cell_final = Application.WorksheetFunction.Index(Tableau, L_Val, Ligne)
Dim Aux_Cell As Range
Set Aux_Cell = Cell_final
Set Cell_final = Aux_Cell.Offset(0, Colonne)
RECHERCHET = Aux_Cell.Value
End Function
Quand je l'utilises, primo il veut absolument que C_L soit un nombre, ce qui est absolument incompréhensible, mais complètement. Secondo, je crois qu'il n'utiliserait pas la fonction Equiv s'il dépassait l'étape précédante.
Auriez vous une solution à me proposer pour ça ? Je ne connais pas bien le langage VBA, j'y vais à tatillon et prend donc beaucoup de temps.
Merci :) .
Je cherche à faire une fonction de type RechercheV ou H, sauf qu'au lieu de chercher dans une colonne ou une ligne, il cherche dans un tableau (je l'ai donc appelé RechercheT ).
Il m'en est sorti la fonction suivante :
(DECALER(Index(Tableau, EQUIV(Valeur, C_L, 0), no_index_L-1), no_index_C, 0, 1, 1))
Valeur : la valeur cherchée
C_L : le tableau dans lequel sera recherché 'valeur', qui est un vecteur ligne ou colonne obligatoirement (à cause de Equiv() ).
Tableau : Tableau comprenant la valeur cherchée ainsi que le résultat de la fonction.
no_index_L, no_index_C : la position du résultat cherché par rapport 'valeur' dans 'tableau.
mais j'aimerais faire une fonction en VBA, plus facile à écrire et peut-être plus rapide à calculer.
Voici ce que j'ai fait :
Function RECHERCHET(Tableau As Range, C_L As Range, Valeur_cherchée As String, Ligne As Integer, Colonne As Integer) As String
Dim Aux As Integer
Aux = Ligne
Ligne = Aux - 1
Dim L_Val As Integer
L_Val = Application.WorksheetFunction.Equiv(Valeur_cherchée, C_L, 0)
Dim Cell_final As Range
Set Cell_final = Application.WorksheetFunction.Index(Tableau, L_Val, Ligne)
Dim Aux_Cell As Range
Set Aux_Cell = Cell_final
Set Cell_final = Aux_Cell.Offset(0, Colonne)
RECHERCHET = Aux_Cell.Value
End Function
Quand je l'utilises, primo il veut absolument que C_L soit un nombre, ce qui est absolument incompréhensible, mais complètement. Secondo, je crois qu'il n'utiliserait pas la fonction Equiv s'il dépassait l'étape précédante.
Auriez vous une solution à me proposer pour ça ? Je ne connais pas bien le langage VBA, j'y vais à tatillon et prend donc beaucoup de temps.
Merci :) .
A voir également:
- [VBA] Fonctions Excel dans une fonction VBA.
- Fonction si et - Guide
- Excel compter cellule couleur sans vba - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Fonction moyenne excel - Guide