Créer une fonction qui retourne plusieurs données

Bonjour à tous,

Voilà j'ai un petit soucis avec la création d'une fonction... ça doit certainement être idiot mais le fait que j'ai débuté depuis peu m'empêche encore de trouver la solution immédiatement

Voilà j'aimerais créer une fonction (histoire de simplifier le code) pour ouvrir un tableur excel rechercher une valeur sur une première feuille et une autre sur une seconde et retourner les deux, fermer le tableur excel et réactiver le document Word qui était ouvert avant. La fonction est le suivant :

Public Function wrdLine(Index As String, i As Long, Sheet As String, j As Long)
     address = ThisWorkbook.Path
    Dim indT
    Dim valT
    Dim compT1
    Dim compT2

    Set wb = Workbooks.Open(address + "\Outils\BDD_DT.xlsx")
    wb.Worksheets(Index).Activate

    indT = Cells(i, 1)

    wb.Worksheets(Sheet).Activate
    valT = Cells(i, 2)
    compT1 = Cells(i, 3)
    compT2 = Cells(i, 4)

    wb.Close savechanges:=False

    wrdDoc.Activate
End Function

J'ai mis ce code dans un module pour être plus précis.

Ensuite je fais appel à la fonction à l'aide de :

wrdLine ("Index", 2, "Compo", 2)
         wrdApp.Selection.TypeText Text:=indT
         wrdApp.Selection.TypeText Text:=valT

Mais lors de la compilation il me retour une erreur de syntaxe sur

wrdLine ("Index", 2, "Compo", 2)

Que fais-je de mal?

Hello tout le monde,

Sans en être sûr, peut-être comme ça...

wrdLine ("Index", 2; "Compo", 2)

Marche pas vraiment mieux... Par contre je ne savais pas qu'on pouvait mettre un ";" à la place d'une ","...

Cela change quoi ?

Bonjour

Sans ton fichier pour tester

Une idée : enlèves les parenthèses

wrdLine  "Index", 2, "Compo", 2

Oui j'en étais arrivé à la même conclusion... Merci.

De plus il fallait que je vire : "wrdDoc.Activate" de la fonction

Cela compile correctement mais je n'arrive toujours pas à retourner les valeurs indT et valT de la fonction.

Retourner une seule valeur est simple mais je ne trouve pas comment en retourner plusieurs

Bonjour

Retourne un tableau

Mais sans ton fichier je te laisse le soin de le faire

Bonjour,

C'est quand même bien bizare ton truc :

D'abord tu crées 4 variables

Dim indT

Dim valT

Dim compT1

Dim compT2

... mais tu n'en utilises que 2 ?

Ensuite, une fonction (BLABLA par exemple)

commence au minimum comme ça

Fonction BLABLA()

Dim Var

et se termine comme ça :

BLABLA = Var

End Function

Tu as du zapper une étape.

Dans le doute je t'ai fait un modèle de fonction pour 2 variables et la macro qui va avec pour la tester

Function TABLO_2()
Dim Arr(2)
Arr(1) = 11
Arr(2) = 12
TABLO_2 = Arr
End Function

Sub test2()
MsgBox TABLO_2(1)
MsgBox TABLO_2(2)
End Sub

Et un modèle de fonction pour 4variables et la macro qui va avec pour la tester

Function TABLO4()
Dim Arr(4)
Arr(1) = 11
Arr(2) = 12
Arr(3) = 13
Arr(4) = 14
TABLO4 = Arr
End Function

Sub test4()
Dim Var()
Var = TABLO4
MsgBox Var(1)
MsgBox Var(2)
MsgBox Var(3)
MsgBox Var(4)
End Sub

A+

Non je réalise à quel point je me suis fortement mal exprimé et je tiens à m'excuser au près de ceux qui ont tenté de m'aider à partir du peu d'infos que j'ai donné. J'ai su avec de la réflection et beaucoup de recherche résoudre mon problème :

1/au lieu de construire une function, il était plus judicieux de construire une procédure. (sub au lieu de function)

2/ensuite pour avoir accès aux variables de ma nouvelle procédure, à partir de ma procédure mère il fallait déclarer mes variables en public et non en dim à l'extérieur de ma procédure.

Ma procédure =

Public indT
Public valT
Public compT1
Public compT2

Public Sub wrdLine(Index As String, i As Integer, Sheet As String, j As Integer)

    address = ThisWorkbook.Path

    Set wb = Workbooks.Open(address + "\Outils\BDD_DT.xlsx")
    wb.Worksheets(Index).Activate

    indT = Cells(i, 1)

    wb.Worksheets(Sheet).Activate
    valT = Cells(j, 2)
    compT1 = Cells(j, 3)
    compT2 = Cells(j, 4)

    wb.Close savechanges:=False

End Sub

et l'appel à ma procédure :

wrdLine "Index", 2, "Compo", 2
            wrdApp.Selection.TypeText Text:=indT
            wrdApp.Selection.TypeText Text:=valT

Merci encore à ceux qui se sont casés là tête et encore désolé

Rechercher des sujets similaires à "creer fonction qui retourne donnees"