XL 2019 RechercheV fonction personnalisé

  • Initiateur de la discussion Initiateur de la discussion Fipat
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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)

@+
 
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

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

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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
18
Affichages
1 K
Retour