problème d'exécution de fonctions

don julio

XLDnaute Nouveau
Bonjour a tous

Je fais appel a vous pour un problème a mon avis tout bête mais que je n'arrive pas a résoudre.

J'ai créé une "function" qui marche très bien avec un debug print mais qui ne marche pas sur excel...( cette function équivaut a une rechercheV mais renvoi l'ensemble des résultats)

Exemple en PJ

Pouvez vous m'aider

Merci

Don julio
 

Pièces jointes

  • exemple_recherche_tous-6.xlsm
    37.3 KB · Affichages: 68
  • exemple_recherche_tous-6.xlsm
    37.3 KB · Affichages: 81
  • exemple_recherche_tous-6.xlsm
    37.3 KB · Affichages: 80

Modeste geedee

XLDnaute Barbatruc
Re : problème d'exécution de fonctions

Bonsour®
pourquoi faire simple quand on peut faire compliqué ?
dans le cas présent l'utilisation de formule suffit !
=SIERREUR(INDEX(donnée!B:B;EQUIV(ref!A2;donnée!A:A;0));"Ø")

Excel est d'abord un "chiffrier" avant d'être un outil de programmation et de maquettage.
Une connaissance maitrisée des fonctions de feuille de calcul est un préalable raisonnable avant utilisation de VBA...
:rolleyes: sinon autant programmer directement en VB, .net, Delphi ou autres outils de programmation.
 

Pièces jointes

  • exemple_recherche_tous-6.xlsm
    43.9 KB · Affichages: 42
  • exemple_recherche_tous-6.xlsm
    43.9 KB · Affichages: 41
  • exemple_recherche_tous-6.xlsm
    43.9 KB · Affichages: 42

Dranreb

XLDnaute Barbatruc
Re : problème d'exécution de fonctions

Bonjour.
À vrai dire je n'ai pas trouvé pourquoi CurrentRegion ne rendait pas ce qu'on attendais.
Alors j'ai procédé autrement, et j'en ai profité pour améliorer deux points :
1) - Pour que la fonction soit réévaluée si la table à 2 colonnes change sans qu'elle soit aussi réévaluée par ailleurs même quand ce n'est pas nécessaire, la passer en argument :
Code:
=RechTous(A2;donnée!$A:$B;"-")
2) - Limiter le nombre d'accès aux plages pour améliorer la rapidité d'exécution :
VB:
Function RechTous(ByVal V As Variant, ByVal Plage As Range, ByVal Séparateur As String) As String
Dim TabEnt() As Variant, TabSor() As String, Le As Long, Ls As Long
TabEnt = Intersect(Plage, Plage.Worksheet.UsedRange).Value
If TypeName(V) = "Range" Then V = V.Value
For Le = 1 To UBound(TabEnt)
   If TabEnt(Le, 1) = V Then ReDim Preserve TabSor(0 To Ls): TabSor(Ls) = TabEnt(Le, 2): Ls = Ls + 1
   Next Le
If Ls > 0 Then RechTous = Join(TabSor, Séparateur) Else RechTous = ""
End Function

Edit: Salut Job75
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : problème d'exécution de fonctions

Bonjour à tous,

@ Modeste geedee : notre ami veut la liste de tous les résultats pour chaque recherche.

@ don Julio : pourquoi tant de variables :confused: Voyez ceci qui ne pose aucun problème :

Code:
Function RechTous$(v, separateur)
Dim a, i&
With Sheets("donnée")
  a = .Range("A1:B" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
For i = 1 To UBound(a)
  If a(i, 1) = v Then RechTous = RechTous & separateur & a(i, 2)
Next
RechTous = Mid(RechTous, 2)
End Function
Fichier joint.

Edit : ah salut Dranreb, je ne t'avais pas vu.

A+
 

Pièces jointes

  • exemple_recherche_tous(1).xlsm
    38.1 KB · Affichages: 32
Dernière édition:

job75

XLDnaute Barbatruc
Re : problème d'exécution de fonctions

Re,

Je découvre moi aussi que CurrentRegion ne fonctionne pas correctement dans une fonction personnalisée.

Voir le fichier joint avec cette petite fonction :

Code:
Function CR() As String
CR = [A1].CurrentRegion.Address
End Function
A+
 

Pièces jointes

  • CurrentRegion(1).xls
    31.5 KB · Affichages: 25

Discussions similaires

Statistiques des forums

Discussions
312 160
Messages
2 085 841
Membres
103 002
dernier inscrit
LERUS