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

  • Initiateur de la discussion Initiateur de la discussion CHti160
  • 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 !

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
 
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+
 
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+
 
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
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour