Aide sur l'utilisation des fonctions en VBA

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

nougitch

XLDnaute Occasionnel
Bonjour,

Je souhaite utiliser une fonction que j'ai créé.

Ma fonction est la suivante :

Code:
Function getDividends(sRIC As String, dInception As Date, dSettlementDate As Date, sSheet As String)

    Dim lDividendsMaxRow    As Long:    lDividendsMaxRow = 0
    Dim i                   As Long:    i = 2
    Dim bPresentRIC         As Boolean: bPresentRIC = False
    Dim iCountDividends     As Integer: iCountDividends = 0
    Dim j                   As Integer: j = 1

    ActiveWorkbook.Sheets("Dividends").Activate

    lDividendsMaxRow = Cells(65536, 1).End(xlUp).Row

    sError = ""

    For i = 2 To lDividendsMaxRow
        If Cells(i, 1) = sRIC Then
            bPresentRIC = True
            If Cells(i, 2) > dInception And Cells(i, 2) < dSettlementDate Then
                iCountDividends = iCountDividends + 1
            End If
        End If
    Next i

    ReDim vDividends(iCountDividends, 2)

    For i = 2 To lDividendsMaxRow
        If Cells(i, 1) = sRIC Then
            If Cells(i, 2) > dInception And Cells(i, 2) < dSettlementDate Then
                vDividends(j, 1) = Cells(i, 2)
                vDividends(j, 2) = Cells(i, 6)
                j = j + 1
            End If
        End If
    Next i

    If bPresentRIC = False Then
        sError = "Error: the RIC '" & sRIC & "' is not referenced in 'Dividends' sheet!"
        MsgBox sError
    End If

    ActiveWorkbook.Sheets(sSheet).Activate

End Function

Le truc c'est que dans ma macro, je ne sais pas comment appeler cette fonction pour qu'elle me renvoie le tableau "vDividends".

J'aimerais par exemple que le tableau créé dans la fonction soit collé dans une cellule :

Code:
Range("N6") = getDividends(Range("SSFRIC"), Range("SSFInception"), Range("SSFSettlementDate"), ActiveWorkbook.ActiveSheet.Name)

Mais si je fais ça, cela ne me renvoies pas le tableau 🙁

Merci par avance pour votre aide !
Cdt,
 
Dernière édition:
Re : Aide sur l'utilisation des fonctions en VBA

Bonjour Catrice,

Merci pour ton aide !

Je ne vois pas comment passser mes paramètres de la Sub vers la Function pour ensuite récupérer le tableau o pour reprendre ton exemple, de la Sub, vers l'Array puisqu'au final, ce que je veux récupérer c'est un autre tableau.

Mon fichier est malheureusement bien trop gros, même en supprimant le superflu, pour pouvoir le poster.

Merci encore.
 
Re : Aide sur l'utilisation des fonctions en VBA

Re,

Tu veux recuperer le tableau dans la feuille de calcul pour l'utiliser ?
Ci-joint un exemple.
Avec la fonction INDEX, j'adresse un element de la matrice.
Dans mon exemple elle n'a qu'une dimension, mais on peut indexer sur les 2 dmensions.

Normalement une fonction ne peut pas faire ceci :
ActiveWorkbook.Sheets(sSheet).Activate
Activate est une méthode, les méthode ne fonctionnent pas dans les function.
Les fonctions ne font que renvoyer des résultats.

Dans ta fonction, il doit y avoir qq part vers la fin une ligne du genre :
getDividends = blablabla

Et dans la feuille de calcul, c'est =getDividends(arguments eventuels) qui renverra le resultat.

Regarde à nouveau mon exemple :
Function Test()
Test = Array(10, 20, "Test", 40, 50, "fin")
End Function

=Test() dans la feuille de calcul renvoit la matrice si je la saisie en matricielle.
La premiere donnée si je la saisie dans une seule cellule.
LEs differentes valeurs si je l'utilise avec INDEX par exemple.
 

Pièces jointes

Dernière édition:
- 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

Discussions similaires

Réponses
15
Affichages
793
Réponses
5
Affichages
916
Réponses
4
Affichages
737
Réponses
2
Affichages
528
Retour