XL 2016 Formule magique pour convertir des montants

Bigcolby

XLDnaute Nouveau
Bonjour,

J'utilise un fichier excel pour faire mes commentaires d'activité avec en gros un tableau à deux colonnes:

- Colonne A: commentaires avec texte plus montant au format m€

- Colonne B : montant de mon commentaire

Je souhaiterais pouvoir faire une formule qui me convertisse automatiquement les montants dans la colonne A par exemple de € à $, sachant que j'ai déjà paramétré une variable que j'appelle taux quelque part dans mon fichier.

LE problème c'est que le format du commentaire ne sera jamais identique d'une ligne à l'autre et la position des montants à convertir dans les commentaires peuvent varier de place et de nombre.

Help please.. Merci à vous
 

Pièces jointes

  • Test.xlsx
    9.5 KB · Affichages: 28

Rouge

XLDnaute Impliqué
Bonsoir,

Autre proposition, avec une fonction personnalisée
la formule à saisir en H3 et à tirer vers le bas:
VB:
=convertir($A3;taux)

Je n'ai traité que la conversion de "m€" en "m$", s'il faut l'inverse il suffit d'y ajouter une petite adaptation.

Cdlt
 

Pièces jointes

  • Bigcolby_Formule magique pour convertir des montants.xlsm
    15.5 KB · Affichages: 16

Bigcolby

XLDnaute Nouveau
merci pour ces retours. Sylvanu, pas mal cette macro. Je regarderai en détail si ça peut être possible. Car j'ai plusieurs onglets qui vont devoir être convertis et les lignes à convertir ne commencent pas non plus forcément au même numéro entre chaque onglet...
Bonsoir,

Autre proposition, avec une fonction personnalisée
la formule à saisir en H3 et à tirer vers le bas:
VB:
=convertir($A3;taux)

Je n'ai traité que la conversion de "m€" en "m$", s'il faut l'inverse il suffit d'y ajouter une petite adaptation.

Cdlt
@Rouge, j'aime vraiment bien cette idée et c'est ce qui se rapproche le plus de mon besoin.
Mais en gros, j'ai pas compris, tu passes par une macro et avec le code "convertir" ou bien c'est une fonction excel? Car quand j'active ton fichier, il me met en #nom lorsque je tire la formule.
 

Rouge

XLDnaute Impliqué
Bonjour,

C'est une fonction personnalisée, puisque ce que vous demandez n'est pas faisable avec une fonction native d'excel, il faut donc en créer une et pour cela il faut écrire un bout de code en VBA comme une macro.
VB:
Function Convertir(Texte As Variant, Taux As Double) As Variant
    Application.ScreenUpdating = False
    If Texte = "" Then Exit Function
    NbMontant = UBound(Split(Texte, " m€", , 1))
    If NbMontant > 0 Then
        For i = 1 To NbMontant
            p1 = InStr(1, Texte, " m€", 1)
            p2 = InStrRev(Texte, " ", p1 - 1)
            Montant = Mid(Texte, p2 + 1, p1 - (p2 + 1))
            NwMontant = Montant * Taux
            Texte = Replace(Texte, Montant & " m€", NwMontant & " m$")
        Next i
    End If
    Convertir = Texte
End Function
Je l'ai appelée "Convertir" mais j'aurai pu mettre autre chose à condition que ce ne soit pas déjà pris par excel.

Car quand j'active ton fichier, il me met en #nom lorsque je tire la formule.
Il n'y a pas de raison que cela ne marche pas chez vous, parlez-vous du même fichier que j'ai déposé ou bien l'avez-vous essayez sur un autre, et dans ce cas n'avez vous pas uoblié de recopié le code de la fonction "Convertir", car je pense que votre problème vient de là?

Cdlt
 

Pièces jointes

  • Bigcolby.JPG
    Bigcolby.JPG
    65.1 KB · Affichages: 30

Bigcolby

XLDnaute Nouveau
Bonjour,

C'est une fonction personnalisée, puisque ce que vous demandez n'est pas faisable avec une fonction native d'excel, il faut donc en créer une et pour cela il faut écrire un bout de code en VBA comme une macro.
VB:
Function Convertir(Texte As Variant, Taux As Double) As Variant
    Application.ScreenUpdating = False
    If Texte = "" Then Exit Function
    NbMontant = UBound(Split(Texte, " m€", , 1))
    If NbMontant > 0 Then
        For i = 1 To NbMontant
            p1 = InStr(1, Texte, " m€", 1)
            p2 = InStrRev(Texte, " ", p1 - 1)
            Montant = Mid(Texte, p2 + 1, p1 - (p2 + 1))
            NwMontant = Montant * Taux
            Texte = Replace(Texte, Montant & " m€", NwMontant & " m$")
        Next i
    End If
    Convertir = Texte
End Function
Je l'ai appelée "Convertir" mais j'aurai pu mettre autre chose à condition que ce ne soit pas déjà pris par excel.

Car quand j'active ton fichier, il me met en #nom lorsque je tire la formule.
Il n'y a pas de raison que cela ne marche pas chez vous, parlez-vous du même fichier que j'ai déposé ou bien l'avez-vous essayez sur un autre, et dans ce cas n'avez vous pas uoblié de recopié le code de la fonction "Convertir", car je pense que votre problème vient de là?

Cdlt
Merci Rouge pour ces précision. Je parlais bien de votre fichier lorsque je l'activais de mon côté mais il fallait simplement que j'active en fait le fichier.
Maintenant sur le fichier que vous avez envoyé, au lieu du #nom comme au départ, je n'ai pas d'erreur, mais la conversion ne s'effectue pas. (par exemple ci-dessous je suis dans la colonne H5)
1618833190621.png

Faut -il comme pour une macro "lancer" un quelconque code au départ avant de pouvoir utiliser la fonction personnalisée?

Cela m'amène à un autre détail du coup, si j'ai un chiffre en format nombre, 300,25 par exemple, ça me fera la conversion en automatique, mais si j'ai un chiffre en format comme suivant, 300.25 ou autre, ça ne marchera pas?

Merci
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
avec un petit regex dans une fonction perso
testé sur le model de rouge
VB:
Public Function Convertir2(Texte As String, Taux As Double) As Variant
      With CreateObject("VBScript.RegExp"):
        .Global = True: .IgnoreCase = True: .Pattern = "(\d{1,10}) m€"
        Set matchs = .Execute(Texte)
         If matchs.Count > 0 Then Texte = Replace(Texte, matchs(0), (Val(matchs(0)) * Taux) & " m$")
                End With
Convertir2 = Texte
End Function


Sub testX()
MsgBox Convertir2([A4].Text, [B11].Value)
End Sub

formule c'est la meme =convertir2(A5;F1)"
 

Bigcolby

XLDnaute Nouveau
Bonjour Patrick,

Je rencontre le souci suivant qui m'empêche de tester la solution proposée.
La formule ne fonctionne plus une fois que je ferme le fichier.
1618838901563.png


elle ne se calcule tout simplement pas j'ai l'impression.
J'ai copié pourtant le code vba bêtement
1618838991248.png
 

Statistiques des forums

Discussions
312 194
Messages
2 086 069
Membres
103 110
dernier inscrit
Privé