fonction personalisé en VBA avec formule CTXT

gonz19

XLDnaute Occasionnel
bonjour a tous,

Je viens solliciter votre aide .
J'ai créer une fonction personnalisée : =soustotalspe("A";"C")
La colonne C est la colonne dont je veux la somme, la colonne A est la colonne qui comporte les titres;
la fonction fait la somme de l'emplacement de la cellule ou ce trouve la fonction jusqu'à la première valeur de la colonne A.


Code:
Public Function soustotalspe(reference As Variant, colonne As Variant)
Dim AD, R1 As Double, ADB As Variant

Application.Volatile
soustotalspe = ""
AD = Application.ThisCell.Row

soustotalspe = 0
R1 = Range(reference & AD).End(xlUp).Row
i = 0

For i = R1 + 1 To AD - 1
soustotalspe = soustotalspe + Cells(i, colonne).Value
Next i

End Function

Je voudrais ajouter un détail à ma fonction personnalisée. Je souhaiterais que le résultat sois sous forme de texte (non pris en charge dans une formule somme).
Cela reviendrai a écrire la formule =CTXT(soustotalspe("A";"C")) qui fonctionne
Je trouve dommage d'écrire quelque chose de si long en ayant créer une fonction personnalisé.

J'ai bien essayé de rajouter un .fixed dans la fonction mais je n'arrive pas a l'intégrer.

merci de votre aide
 

Pièces jointes

  • Capture.PNG
    Capture.PNG
    8.2 KB · Affichages: 57
  • Capture.PNG
    Capture.PNG
    8.2 KB · Affichages: 60

Bebere

XLDnaute Barbatruc
Re : fonction personalisé en VBA avec formule CTXT

bonjour Gonz,Lone-wolf
bienvenue
déclarer la fonction as string
Public Function soustotalspe(reference As Variant, colonne As Variant) As String
Dim AD, R1 As Double, ADB As Variant

Application.Volatile
soustotalspe = ""
AD = Application.ThisCell.Row

soustotalspe = 0
R1 = Range(reference & AD).End(xlUp).Row
i = 0

For i = R1 + 1 To AD - 1
soustotalspe = CDbl(soustotalspe) + Cells(i, colonne).Value
Next i
End Function
 

CPk

XLDnaute Impliqué
Re : fonction personalisé en VBA avec formule CTXT

Bonjour à toutes et à tous.
Gonz19, avez-vous essayé d'indiquer une valeur de retour string pour la fonction ? je ne suis pas sur de son résultat mais c'est à experimenté

Public Function soustotalspe(reference As Variant, colonne As Variant) as string
 
Dernière modification par un modérateur:

Dranreb

XLDnaute Barbatruc
Re : fonction personalisé en VBA avec formule CTXT

Bonjour.
Pourquoi ne rajouteriez vous pas tout simplement As String derrière votre instruction Function ?

Edit: Désolé, ça m'est venu d'un coup en songeant à pleins d'autres détails qui ne me semblaient pas optimums dans cette fonction, et j'ai envoyé aussitôt sans vérifier si quelqu'un avait eu la même idée.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : fonction personalisé en VBA avec formule CTXT

Et puis ça marcherait pas de faire :
VB:
SousTotalSpe = WorksheetFunction.Sum(Range(Cells(R1 + 1, colonne), Cells(AD - 1, colonne)))
histoire de réduire le nombre d'accès aux cellules ?

Bonjour Lone-wolf.
 

Dranreb

XLDnaute Barbatruc
Re : fonction personalisé en VBA avec formule CTXT

As Variant fonctionne aussi.
Ah non ! En toute bonne logique ça renverra du Variant/Double et non du Variant/String comme bizarrement exigé !
Maintenant il se peut qu'Excel convertisse en nombre de toute façon. Et dans ce cas, oui, c'est mieux.
 
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 Formule
Réponses
3
Affichages
235
  • Résolu(e)
Microsoft 365 Formule
Réponses
3
Affichages
301
Réponses
20
Affichages
658

Membres actuellement en ligne

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki