OVH Cloud OVH Cloud

Déclaration de Fonction

8 réponses
Avatar
Emcy
Bonjours,

comment fait on pour déclarer une fonction qui renvoie un tableau avec une
taille non fixe ?

8 réponses

Avatar
Patricia
Hello,
Je ne sais pas si j'ai bien compris ta question, peut être que c'est ce que
tu cherches.

Dans la barre d'outils sélectionne : Données / Convertir et là tu vas
trouver un tableau où tu peux choisir le type de données d'origine, soit
Délimité ou Largueur fixe.

Bonne soirée.
Patricia


"Emcy" a écrit dans le message de
news:%
Bonjours,

comment fait on pour déclarer une fonction qui renvoie un tableau avec une
taille non fixe ?




Avatar
Emcy
Tu n'a pas compris la question : je la repose autrement
en vba pour faire un fonction, on fait comme ça

Function MaFonction ( MonNombre As Integer ) as String
MaFonction = "Vous avez entrez le chiffre " + Str(MonNombre)
End Function

Et pour l'appeler on fait comme ça :
Sub Appel()
MsgBox (MaFonction(InputBox("Entrez Un Nombre :")))
End Sub

Comment faire pour que cette fonction renvoie une variable Tableau avec n
éléments (sachant que le nombre d'éléments peut varier) : dans ce cas, ma
fonction renvoie une variable texte simple.
Et comment fait on pour appler la fonction (je ne maitrise pas les tableau
avec une taille dynamique)


"Patricia" a écrit dans le message de
news:40f6cbbc$0$29422$
Hello,
Je ne sais pas si j'ai bien compris ta question, peut être que c'est ce
que

tu cherches.

Dans la barre d'outils sélectionne : Données / Convertir et là tu vas
trouver un tableau où tu peux choisir le type de données d'origine, soit
Délimité ou Largueur fixe.

Bonne soirée.
Patricia


"Emcy" a écrit dans le message de
news:%
Bonjours,

comment fait on pour déclarer une fonction qui renvoie un tableau avec
une


taille non fixe ?








Avatar
JpPradier
Bonjour Emcy

Tiré du livre de J Walkenbach un exemple :

Sub test()

MonMois = NumMois(3)

End Sub

Function NumMois()
NumMois = Array("Jan", "Fev", "Mar", "Avr", "Mai", "Jun", "Jui", "Aou", "Sep", "Oct", "Nov",
"Dec")
End Function


j-p
Avatar
Emcy
Bonjour,

Merci de ta réponse mais je voudrais que ça soit un tableau qui ne soit pas
remplis avec Array. De plus, le paramettre que je veux rentrer dans ma
fonction n'est pas le numéro de l'indice du tableau.

"JpPradier" a écrit dans le message
de news:O$
Bonjour Emcy

Tiré du livre de J Walkenbach un exemple :

Sub test()

MonMois = NumMois(3)

End Sub

Function NumMois()
NumMois = Array("Jan", "Fev", "Mar", "Avr", "Mai", "Jun", "Jui",
"Aou", "Sep", "Oct", "Nov",

"Dec")
End Function


j-p



Avatar
JpPradier
Si tu pouvais mettre un petit exemple parce que là, je ne vois pas ou tu veux en venir.

j-p
Avatar
Emcy
Voici un petit exemple qui ne marche pas (si tu arrives à le faire marcher,
ça devrait être bon)

Sub AppelFonction()

Dim MonTableau() As String
Dim j As Integer

MonTableau = MaFonction(InputBox("Entrer Votre Nom :"))

For j = 0 To UBound(MonTableau)
MsgBox MonTableau(j)
Next j

End Sub


Function MaFonction(Reponse As String) As Srting 'Ma Fonction doit être un
tableau de dimension variable de type string

Dim i As Integer
Dim TableauTemp(0) As String

For i = 1 To Len(Reponse)
ReDim Preserve TableauTemp(i - 1)
TableauTemp(i - 1) = Mid(Reponse, i, 1)
Next i

MaFonction = TableauTemp

End Function



"JpPradier" a écrit dans le message
de news:
Si tu pouvais mettre un petit exemple parce que là, je ne vois pas ou tu
veux en venir.


j-p



Avatar
JpPradier
Voilà en virant les 'as string' et en dimensionnant tableautemp sans mettre de valeur, ça
fonctionne.

j-p

Sub AppelFonction()

Dim MonTableau()
Dim j As Integer

MonTableau = MaFonction(InputBox("Entrer Votre Nom :"))

For j = 0 To UBound(MonTableau)
MsgBox MonTableau(j)
Next j

End Sub


Function MaFonction(Reponse As String) 'Ma Fonction doit être un tableau de dimension variable de
type string

Dim i As Integer
Dim TableauTemp()

For i = 1 To Len(Reponse)
ReDim Preserve TableauTemp(i - 1)
TableauTemp(i - 1) = Mid(Reponse, i, 1)
Next i

MaFonction = TableauTemp

End Function
Avatar
Frédéric Sigonneau
Bonjour,

Ce que tu demandes n'est pas possible. Une fonction qui renvoie un tableau doit
obligatoirement être déclarée avec un type de retour Variant. De même que les
tableaux dans lesquels ses résultats sont renvoyés. Ça ne t'empêche nullement de
mettre ce que tu veux dans le tableau retourné, y compris bien sûr des chaines
de caractères. Essaye cette modification de ton code :

'====================== Sub AppelFonction()
Dim MonTableau()
Dim j As Integer

MonTableau = MaFonction(InputBox("Entrer Votre Nom :"))
For j = 0 To UBound(MonTableau)
MsgBox MonTableau(j)
Next j

End Sub

Function MaFonction(Reponse As String)
'Ma Fonction doit être un tableau de dimension variable de type string
Dim i As Integer
Dim TableauTemp()

ReDim TableauTemp(Len(Reponse) - 1)
For i = 0 To Len(Reponse) - 1
TableauTemp(i) = Mid(Reponse, i + 1, 1)
Next i

MaFonction = TableauTemp

End Function
'======================
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Voici un petit exemple qui ne marche pas (si tu arrives à le faire marcher,
ça devrait être bon)

Sub AppelFonction()

Dim MonTableau() As String
Dim j As Integer

MonTableau = MaFonction(InputBox("Entrer Votre Nom :"))

For j = 0 To UBound(MonTableau)
MsgBox MonTableau(j)
Next j

End Sub


Function MaFonction(Reponse As String) As Srting 'Ma Fonction doit être un
tableau de dimension variable de type string

Dim i As Integer
Dim TableauTemp(0) As String

For i = 1 To Len(Reponse)
ReDim Preserve TableauTemp(i - 1)
TableauTemp(i - 1) = Mid(Reponse, i, 1)
Next i

MaFonction = TableauTemp

End Function



"JpPradier" a écrit dans le message
de news:

Si tu pouvais mettre un petit exemple parce que là, je ne vois pas ou tu


veux en venir.

j-p