Se connecter avec
S'enregistrer | Connectez-vous

Fonction Texte en VBA

Dernière réponse : dans Programmation

Bonjour à tous,
Je ne suis pas habitué des forums mais étant dos au mur je vous lance mon SOS.
Je ne connais pas trop le VBA et je suis en train d'essayer de créer une fonction pour Excel. Cette fonction est très simple elle doit convertir en texte un nombre que l'on rentre.
Sous Excel j'utilisa la fonction texte de cette façon : =TEXTE(B1;"# ##0,##_) ;(# ##0,##);""-""_)")
ou B1 est le nombre à convertir. Il est vital que je garde le format donné dans cette formule.
Suite à pas mal de recherche sur internet j'ai essayer de construire ma formule VBA mais impossible de trouver quelque chose qui marche. Voici ce que j'ai essayer (entre autre mais je ne vous met que les plus réussite, ou en tout cas celles qui me plaisent le mieux) :

Function Conversion(Nbrfrancais)
Conversion = Application.WorksheetFunction.Texte(Nbrfrancais, "# ##0,##_) ,(# ##0,##),""-""_)")
End Function
________

Function Conversion(Nbrfrancais)
Conversion.Formula = "=TEXT(Nbrfrancais,""# ##0,##_) ;(# ##0,##);""""-""""_)"")"
End Function

Est ce que quelqu'un pourrait m'aider? Je ne peux pas utiliser le FORMAT de VBA car il est moins permissif que le format personnalisé de la fonction TEXTE. Je pense que le plus simple est d'intégrer la fonction TEXT d'excel mais il y a quelque chose qui doit m'échapper...
Par avance un gros gros merci pour votre aide...

Marcellin


Autres pages sur : fonction texte vba

Lassé par la pub ? Créez un compte

Meilleure solution

Sans trop rien comprendre à ton format de texte je t'ai mis la fonction dans un évènement de la feuille :

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3. If Target.Address = "$B$1" Then
  4.  
  5. feuil1.cells(2, 3) = WorksheetFunction.Text(feuil1.cells(2, 2), "# ##0,##_) ,(# ##0,##),""-""_)")
  6.  
  7. End If
  8.  
  9. End Sub


En fait ce code ne s'exécute que lorsque la case B1 est modifiée (j'ai pas essayé mais j'ose espérer qu'il est possible de mettre une ligne/colonne/table). Il est à mettre directement dans la feuille 1 sous l'éditeur VBA.

Pourtant dans l'aide VBA c'est bien expliqué. Il y a 2 problèmes à ta méthode :

1) la méthode c'est .text et pas .texte

2) cette méthode attend 2 arguments :

Syntaxe

expression.Text(Arg1, Arg2)

Arg1, Obligatoire, Valeur numérique, formule dont le résultat est une valeur numérique, ou référence à une cellule contenant une valeur numérique.

Arg2 Obligatoire Chaîne Format de nombre sous forme de texte défini dans la zone Catégorie de l'onglet Nombre de la boîte de dialogue Format de cellule.

Donc théoriquement ton arg1 c'est la case B1 et arg2 c'est ton format dans lequel tu veux mettre ta valeur numérique.

Bonjour sphynxounet et merci de ta réponse

1) cela ne pose t'il pas de problème que la fonction appelée soit anglais et le format demandé français?

2) Je suis d'accord avec moi mais Arg2 se décompose lui même en plusieurs arguments (si positif, si négatif, si nul...)

N'y a t'il pas des caractères que je dois mettre autrement dans mon format?

Expert Programmation

[mode super-pinailleur = ON]

Eh, mon ptit Sphynxounet :hello:  , ta variable feuil1 n'est pas très utile car tu te trouves déjà dans un événement de la feuille. Quoique... Mais dans ce cas pour être portable, tu devrais utiliser Me :
  1. Me.Cells(2, 3) = WorksheetFunction.Text(Me.cells(2, 2), "# ##0,##_) ,(# ##0,##),""-""_)" )


Lassé par la pub ? Créez un compte