XL 2016 Récupérer résultat sous-programme

Phillip

XLDnaute Occasionnel
Bonjour,

Je sais que les variables sont détruites à la fin d'un sub mais ça paraît incroyable qu'on ne puisse pas récupérer le résultat quelque part autre que sur une feuille (ou suis-je ignorant ?)...

J'ai crée un programme qui manipule des mots...Dans ce programme, j'ai crée un sous-programme "Voyelles" qui calcule la valeur des voyelles d'un nom...Je voudrais récupérer ce résultat (PointsV) dans le programme principal pour utilisation ultérieure...

VB:
Sub Voyelles()
Static PointsV

nom = Cells(2, 3).Value
nbcarnom = Len(nom)
PointsV = 0
For compteur = 1 To nbcarnom
lettreselect = Mid(nom, compteur, 1)
Lpoints = 0
Select Case lettreselect
    Case Is = "a"
    Lpoints = 1
    Case Is = "e"
    Lpoints = 5
    Case Is = "i"
    Lpoints = 9
    Case Is = "o"
    Lpoints = 6
    Case Is = "u"
    Lpoints = 3
    Case Is = "y"
    Lpoints = 7
End Select
PointsV = PointsV + Lpoints
Next compteur
End Sub

D'autre part, je voudrais "appeller ce programme pour le nom et le prénom...Mon code spécifie nom ou prénom en dur, je ne sais plus comment passer nom ou prénom en paramètre...

Merci

Cordialement

Phillip
 

chris

XLDnaute Barbatruc
Bonjour

Remplace Sub par Function et prévoit un argument pour l’appeler depuis un sub en lui passant un l'argument (comme une fonction Excel)

La fonction renverra le résultat avec
Voyelles=résultat

Tu peux aussi mettre ta déclaration de variable en dehors de toute sub ou fonction pour garder sa valeur mais il faut gérer correctement
 

Phillip

XLDnaute Occasionnel
J'ai réctifié sub par function, et je passe le paramètre "nom" lorsque j'appelle Voyelles...Mais PointsV vide lorsque ça s'éxecute (correctement d'ailleurs). Je ne sais pas où récupérer mon résultat !

VB:
Call Voyelles(nom)


.........reste du programme qui doit récupérer la valeur de PointsV......


End Sub

Function Voyelles(injection)
Dim PointsV

'nom = Cells(2, 3).Value
nbcarnom = Len(injection)
PointsV = 0
For compteur = 1 To nbcarnom
lettreselect = Mid(injection, compteur, 1)
Lpoints = 0
Select Case lettreselect
    Case Is = "a"
    Lpoints = 1
    Case Is = "e"
    Lpoints = 5
    Case Is = "i"
    Lpoints = 9
    Case Is = "o"
    Lpoints = 6
    Case Is = "u"
    Lpoints = 3
    Case Is = "y"
    Lpoints = 7
End Select
PointsV = PointsV + Lpoints
Next compteur

End Function
 

Phillip

XLDnaute Occasionnel
Re...

Désolé je ne comprends pas ce Voyelles= résultat....
J'appelle la function Voyelles en lui disant que le résutat doit aller dans Vpoints, et je lui passe "nom" en paramètre...

Je ne comprends pas ce que je dois mettre à la fin de ma fonction...Désolé..
Merci

Cordialement

VB:
sub principale()
Vpoints = Voyelles(nom)
End Sub

Function Voyelles(injection)
Dim PointsV

'nom = Cells(2, 3).Value
nbcarnom = Len(injection)
PointsV = 0
For compteur = 1 To nbcarnom
lettreselect = Mid(injection, compteur, 1)
Lpoints = 0
Select Case lettreselect
    Case Is = "a"
    Lpoints = 1
    Case Is = "e"
    Lpoints = 5
    Case Is = "i"
    Lpoints = 9
    Case Is = "o"
    Lpoints = 6
    Case Is = "u"
    Lpoints = 3
    Case Is = "y"
    Lpoints = 7
End Select
PointsV = PointsV + Lpoints
Next compteur
????? Voyelles = resultat
End Function
 

job75

XLDnaute Barbatruc
Bonsoir Philip, chris,

Voyez le fichier joint et cette fonction VBA :
VB:
Public d As Object 'mémorise la variable

Function ConversionVoyelles(t$)
Dim i%
If d Is Nothing Then
    Set d = CreateObject("Scripting.Dictionary")
    d("a") = 1: d("e") = 5: d("i") = 9: d("o") = 6: d("u") = 3: d("y") = 7
End If
t = LCase(t) 'minuscules
For i = 1 To Len(t)
    ConversionVoyelles = ConversionVoyelles + d(Mid(t, i, 1))
Next
End Function

Sub Test()
Dim x$
x = InputBox("Entrez le texte à convertir :", "Conversion voyelles")
If x <> "" Then MsgBox ConversionVoyelles(x), , "Résultat"
End Sub
Le Dictionary est mémorisé, c'est plus rapide s'il y a un grand nombre de conversions.

A+
 

Pièces jointes

  • Conversion voyelles(1).xlsm
    18.3 KB · Affichages: 7

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 172
dernier inscrit
Aurelyan