XL 2010 Transformer Sub en Function

cp4

XLDnaute Barbatruc
Bonjour,

Je voudrais transformer une sub en fonction.
En fait, je voudrais utiliser le résultat renvoyé par la msgbox dans une variable booléenne et l'utiliser dans une autre procédure.
D'où, mon besoin d'une fonction.
VB:
Sub VerifClient()
    Dim tb(), client As String, NewClient As String, C As Range, n As Long
    client = "client à trouver"
    NewClient = Trim(UCase(SANSACCENT(client)))
    For Each C In ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange
        ReDim Preserve tb(n)
        tb(n) = Trim(SANSACCENT(UCase(C.Value)))
        n = n + 1
    Next
    MsgBox Not IsError(Application.Match(NewClient, tb, 0))
End Sub
En espérant, que mes explications sont claires.

Avec mes remerciements anticipés.
 
Solution
C
Re,

@cp4 désolé, mais je ne comprends pas ou est la difficulté 🤔

VB:
Sub TestFonction()
  Dim sNomClt As String
  sNomClt = Range("B2")
  If VerifClient(sNomClt) Then
    MsgBox "Le client n'existe pas"
    'créer client
  Else
    MsgBox "Le client existe déjà"
  End If
End Sub

' Retourne VRAI si la valeur n'est pas trouvée
Function VerifClient(Client As String)
  Dim tb() As Variant
  tb = ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange.Value
  VerifClient = IsError(Application.Match(Client, tb, 0))
End Function

A+
C

Compte Supprimé 979

Guest
Bonjour cp4

Rien de plus simple quand on connait 😜
Je n'ai pas testé, il y aura peut-être une correction à faire

VB:
Sub Test()
MsgBox VerifClient(NOMCLIENT")
End Sub

Function VerifClient(Client as String)
    Dim tb(), NewClient As String, C As Range, n As Long
    NewClient = Trim(UCase(SANSACCENT(client)))
    For Each C In ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange
        ReDim Preserve tb(n)
        tb(n) = Trim(SANSACCENT(UCase(C.Value)))
        n = n + 1
    Next
    VerifClient = Application.Match(NewClient, tb, 0)
End Function

A+
 

cp4

XLDnaute Barbatruc
Bonjour cp4

Rien de plus simple quand on connait 😜
Je n'ai pas testé, il y aura peut-être une correction à faire

VB:
Sub Test()
MsgBox VerifClient(NOMCLIENT")
End Sub

Function VerifClient(Client as String)
    Dim tb(), NewClient As String, C As Range, n As Long
    NewClient = Trim(UCase(SANSACCENT(client)))
    For Each C In ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange
        ReDim Preserve tb(n)
        tb(n) = Trim(SANSACCENT(UCase(C.Value)))
        n = n + 1
    Next
    VerifClient = Application.Match(NewClient, tb, 0)
End Function

A+
Bonjour BrunoM45 ;),

En effet, c'est très simple quand on connait.
En fait, j'essaie de simplifier mon code pour qu'il soit plus lisible et compréhensible.
D'où, ma demande de transformer une Sub en Fonction.
Dans ce cas précis, je voudrais utiliser Le "vrai" ou faux de la ligne ci-dessous
VB:
MsgBox Not IsError(Application.Match(NewClient, tb, 0))
Au lieu de MsgBox mettre le résultat dans une variable, qui sera réutilisée dans la procédure appelante.
Code:
Sub testfonction()
    client = Range("b2").Value
    Verif_Client (client)
    
    If Resultat Then 'resultat vrai'
    'créer client
    Else
    'message que le client existe
    End If
End Sub
Voici mon objectif. En espérant que j'ai bien expliqué la bébête.

Merci beaucoup.

bon appétit.
 
C

Compte Supprimé 979

Guest
Re,

@cp4 désolé, mais je ne comprends pas ou est la difficulté 🤔

VB:
Sub TestFonction()
  Dim sNomClt As String
  sNomClt = Range("B2")
  If VerifClient(sNomClt) Then
    MsgBox "Le client n'existe pas"
    'créer client
  Else
    MsgBox "Le client existe déjà"
  End If
End Sub

' Retourne VRAI si la valeur n'est pas trouvée
Function VerifClient(Client As String)
  Dim tb() As Variant
  tb = ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange.Value
  VerifClient = IsError(Application.Match(Client, tb, 0))
End Function

A+
 

cp4

XLDnaute Barbatruc
Re,

@cp4 désolé, mais je ne comprends pas ou est la difficulté 🤔

VB:
Sub TestFonction()
  Dim sNomClt As String
  sNomClt = Range("B2")
  If VerifClient(sNomClt) Then
    MsgBox "Le client n'existe pas"
    'créer client
  Else
    MsgBox "Le client existe déjà"
  End If
End Sub

' Retourne VRAI si la valeur n'est pas trouvée
Function VerifClient(Client As String)
  Dim tb() As Variant
  tb = ActiveSheet.ListObjects("tclient").ListColumns("nom prenom").DataBodyRange.Value
  VerifClient = IsError(Application.Match(Client, tb, 0))
End Function

A+
Re,
Merci beaucoup. Je n'ai exposé le problème dans sa globalité.
Tu as sûrement constaté que j'utilise les fonctions Trim, Ucase et une fonction SansAccent en passant par un tableau intermédiaire pour ne pas toucher aux données de la feuille.

Tu ne trouves aucune difficulté parce que tu es plus compétent que moi. y a pas photo entre un licencié et bachelier.

Je te remercie pour aide. Je pense m'en sortir avec ta dernière proposition.

Bon après-midi.
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino