Récuperer le resultat d'une fonction dans la procedure qui a appelé cette foncti

C

CHti160

Guest
bonsoir le "FORUM"
j'explique j'ai un eprocedure qui veut recuperer le nombre d'elements d'une colonne qui sont equivalent a la valeur d'un combobox
RechercheNombreAdherant (NbSec) '<----appel de la fonction
UserForm2.LblTSec.Caption = NbSec
End Sub
Public Function RechercheNombreAdherant(NbSec)'la fonction
Dim cel As Range
Dim maplage As Range
Dim Lgn As Byte
Dim TSec As Byte
Dim TotalSec As Byte
Dim ValSec As String
TotalSec = 0
ValSec = UserForm2.ComboBox1.Text
With Worksheets("Listing")
Lgn = .Range("B65536").End(xlUp).Row
Set maplage = .Range("B9:B" & Lgn)
End With
For Each cel In maplage
If Right(cel.Text, 2) = Right(ValSec, 2) Then

NbSec = NbSec + 1'<---- Ici je calcul le nombre que je veux inscrire dans mon label là hautUserForm2.LblTSec.Caption = NbSec

End If
Next
'Là je ne sais pas comment renvoyer le résultat ,soit la valeur de NbSec que faire que modifier??????????
End Function
Merci d'avance
A+++
Jean Marie
 
Y

Yeahou

Guest
Bonjour Chti160, le forum

Public Function RechercheNombreAdherant(NbSec as Long) as Long
Dim cel As Range
Dim maplage As Range
Dim Lgn As Byte
Dim TSec As Byte
Dim TotalSec As Byte
Dim ValSec As String
TotalSec = 0
ValSec = UserForm2.ComboBox1.Text
With Worksheets("Listing")
Lgn = .Range("B65536").End(xlUp).Row
Set maplage = .Range("B9:B" & Lgn)
End With
For Each cel In maplage
If Right(cel.Text, 2) = Right(ValSec, 2) Then

NbSec = NbSec + 1'<---- Ici je calcul le nombre que je veux inscrire dans mon label là hautUserForm2.LblTSec.Caption = NbSec

End If
Next
RechercheNombreAdherant=NbSec
End Function

et pour ton userform

UserForm2.LblTSec.Caption = RechercheNombreAdherant(0)
tel que tu l'as défini, NbSec sera incrémenté à partir le la valeur passée en argument. Si tu pars toujours de zéro, il n'y a pas besoin de prévoir un argument.

Cordialement, A+
 
Y

Yeahou

Guest
Re bonjour

ton code sera plus rapide avec

ValSec = right(UserForm2.ComboBox1.Text,2)

If Right(cel.Text, 2) = ValSec Then

ValSec étant constant, tu gagneras une opération par cellule examinée. Sur une fonction, cela peut être important au final.

Si tu es sur de ne jamais dépasser 32767 en valeur pour NbSec, tu peux écrire
Public Function RechercheNombreAdherant(NbSec as Integer) as Integer
tu gagneras en espace mémoire.

Pour une fonction sans argument (ils sont inutiles si tu n'as pas besoin de passer une valeur d'ini pour NbSec)
Public Function RechercheNombreAdherant as Integer
Dim NbSec as Long
et pour l'appel
UserForm2.LblTSec.Caption = RechercheNombreAdherant

Cordialement, A+
 
J

Jean-Marie

Guest
Bonjour Jean-Marie, Yeahou

Il y aussi la transposition en VBA de la fonction NB.SI d'Excel ce qui te supprime ta boucle.

NbSec = WorksheetFunction.CountIf(Range("A6:A17"), "*" + Right(ValSec, 2))

@+Jean-Marie
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16