XL 2019 RechercheV fonction personnalisé

Fipat

XLDnaute Occasionnel
Bonjour,

Je cherche à créer une fonction qui pourrait traduire cette recherche.
VB:
=RECHERCHEV(H5;Base!A3:B50;2;0)+RECHERCHEV(I5;Base!A3:B50;2;0)+RECHERCHEV(J5;Base!A3:B50;2;0)+RECHERCHEV(K5;Base!A3:B50;2;0)+RECHERCHEV(L5;Base!A3:B50;2;0)
En sachant que je peux avoir des cellules vides sur certaines colonnes et cela ne marche pas avec cette méthode.
Merci pour votre aide.
 
Solution
UN PETIT exemple de recherche multi critere multi colonne
utilisation de formule en vba dans une fonction

cet exemple récupére la valeur en colonne D si les valeurs de l'array correspondent en colonne A et C et F
le codage de la formule est dynamique

l'array peut être plus long
VB:
'recherche multicritere Fonction dynamique avec Evaluate d'une formule avec (INDEX et EQUIV ) EN VBA
Sub test()
   'on récupere la donnée en colonne D  de la ligne ou il y a "2018" en colonne "A" et "toto en colonne"C"  et "titi" en colonne"F"
    colrécup = "D1:D10"
    plage = Array("A1:A10", "C1:C10", "F1:F10")
    criteres = Array(2018, "toto", "titi")
    MsgBox findvaleur(colrécup, plage, criteres)
End Sub


Function...

zebanx

XLDnaute Accro
Bonjour à tous

Pas de fichier fourni donc une réponse très approximative
SIERREUR(RECHERCHEV((H5;Base!A3:B50;2;0);0)+SIERREUR(RECHERCHEV((I5;Base!A3:B50;2;0);;0))+SIERREUR(RECHERCHEV((J5;Base!A3:B50;2;0);0)+SIERREUR(RECHERCHEV((K5;Base!A3:B50;2;0);0)+SIERREUR(RECHERCHEV((L5;Base!A3:B50;2;0);0)

@+
 

Fipat

XLDnaute Occasionnel
Bonjour,

Oui excusez-moi c'est sur que c'est mieux avec un fichier exemple.
Dans ce fichier des recherches en formule mais je veux le faire avec une fonction qui serait dans un module.
De plus si des cellules vides mon addition de recherche ne fonctionne pas.
Merci pour votre aide.
 

Pièces jointes

  • exemple (2).xlsm
    14.4 KB · Affichages: 13

WTF

XLDnaute Impliqué
Bonjour,
Tu peux faire une somme si :

=SOMME.SI(Base!$A$3:$A$40;A2;Base!$B$3:$B$40)+SOMME.SI(Base!$A$3:$A$40;B2;Base!$B$3:$B$40)+SOMME.SI(Base!$A$3:$A$40;C2;Base!$B$3:$B$40)+SOMME.SI(Base!$A$3:$A$40;D2;Base!$B$3:$B$40)+SOMME.SI(Base!$A$3:$A$40;E2;Base!$B$3:$B$40)
 

Pièces jointes

  • exemple (2).xlsm
    15.8 KB · Affichages: 8

Fipat

XLDnaute Occasionnel
Voilà ce que j'ai réussi à faire comme fonction, mais ma recherche s'arrête seulement à une recherche et je ne sais pas l'additionner comme une formule.
VB:
Function RechercheVPerso(ValeurCherchee As Range, MaSource As Range, NumColonne As Integer) As Variant
Dim NbLignes As Integer
Dim a As Integer
NbLignes = MaSource.Rows.Count 
For a = 1 To NbLignes
If MaSource(a, 1).Value = ValeurCherchee.Value Then 
RechercheVPerso = MaSource(a, NumColonne).Value 
End If
Next a
End Function
 

eriiic

XLDnaute Barbatruc
Bonjour,

tu devrais rester par formule et tester les propositions.
Ta fonction personnalisée à toutes les chances d'être plus lente, surtout écrite comme ça.
Et vba n'utilise qu'un seul thread, une feuille les utilises tous et calcule en parallèle 4, 8 formules, voire plus aujourd'hui.
 

patricktoulon

XLDnaute Barbatruc
UN PETIT exemple de recherche multi critere multi colonne
utilisation de formule en vba dans une fonction

cet exemple récupére la valeur en colonne D si les valeurs de l'array correspondent en colonne A et C et F
le codage de la formule est dynamique

l'array peut être plus long
VB:
'recherche multicritere Fonction dynamique avec Evaluate d'une formule avec (INDEX et EQUIV ) EN VBA
Sub test()
   'on récupere la donnée en colonne D  de la ligne ou il y a "2018" en colonne "A" et "toto en colonne"C"  et "titi" en colonne"F"
    colrécup = "D1:D10"
    plage = Array("A1:A10", "C1:C10", "F1:F10")
    criteres = Array(2018, "toto", "titi")
    MsgBox findvaleur(colrécup, plage, criteres)
End Sub


Function findvaleur(colrécup, plage, criteres)
    Dim I&, F$, Formula$
    For I = LBound(criteres) To UBound(criteres)
        If Not IsNumeric(criteres(I)) Then criteres(I) = Chr(34) & criteres(I) & Chr(34)
        F = F & "(" & plage(I) & "=" & criteres(I) & ")" & IIf(I < UBound(plage), "*", "")
    Next
    Formula = "INDEX(" & colrécup & ",MATCH(1," & F & ",0))"

    Debug.Print "Formule des Arguments de recherche : " & F
    Debug.Print "Formule complete a évaluer : """ & Formula & """"

    If IsError(Evaluate(Formula)) Then findvaleur = "nofound!!" Else findvaleur = Evaluate(Formula)
End Function
 

Statistiques des forums

Discussions
311 726
Messages
2 081 955
Membres
101 852
dernier inscrit
dthi16088