Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Conversion en devise

marie58

XLDnaute Nouveau
Bonjour,
J'ai un tableau de reporting que je remplis en monnaie étrangère. Je dois présenter ce tableau en EUR. J'aimerai pouvoir cliquer sur un bouton et qu'une macro s'exécute afin d'avoir ce même tableau en EUR. Ce tableau me sert de base pour des graphiques et des tableaux d'indicateurs. C'est pour cette raison que j'aimerai que ce soit le même document.
Malheureusement je n'ai pas suffisamment de connaissance en vba pour faire cette manipulation. J'espère que quelqu'un pourra m'aider.
Merci d'avance
 

Pièces jointes

  • REPORTING.xlsx
    38.9 KB · Affichages: 27

laurent950

XLDnaute Accro
Bonsoir @cp4 , @sylvanu

Votre code est bien @cp4
J'ai changé les plages en fixe et plage variable.

ici :
If Not c.HasFormula = True And c.Value <> Empty Then
si la cellule contient une formule cela n'a aucune action sur cette cellule
si les cellules sont vide alors rien a faire
Il y a des erreurs de formules dans ce tableau donc pour évité de modifié les cellules et les bug
sur ces cellules j'ai utilisé cela

On Error Resume Next

VB:
Option Explicit
Dim t As Double
Sub Euro()
    t = Timer
    If ActiveSheet.Range("E1") = "EURO" Then Exit Sub
    EuroRon "EURO"
End Sub
Sub Ron()
    t = Timer
    If ActiveSheet.Range("E1") = "RON" Then Exit Sub
    EuroRon "RON"
End Sub
Private Sub EuroRon(ByRef Monnaie As String)
Dim f As Worksheet
    Set f = Worksheets(ActiveSheet.Name)
Dim Devise As Double
    Range("E1") = Monnaie
Dim r, c As Range
    Set r = f.Range(f.Cells(6, 4), f.Cells(f.Cells(65536, 2).End(xlUp).Row, 16))
    On Error Resume Next
    For Each c In r
        If Not c.HasFormula = True And c.Value <> Empty Then
            c.Value = IIf(f.Range("E1").Value = "EURO", c.Value / 5, c.Value * 5)
        End If
    Next c
    On Error GoTo 0
    MsgBox Int((Timer - t) * 1000) & " ms"
End Sub
 
Réactions: cp4

cp4

XLDnaute Barbatruc
Bonjour,

@laurent950 : J'adore ton code cependant, tu as mis en dur dans le code "le taux de conversion". Sachant que les taux de change sont très fluctuants. Avec ton code tel quel la conversion sera fausse. Mais j'ai constaté que tu as défini la variable Devise que tu n'as pas utilisé. J'ai donc complété ton code.
VB:
Private Sub EuroRon(ByRef Monnaie As String)
    Dim f As Worksheet
    Set f = Worksheets(ActiveSheet.Name)
    Dim Devise As Double
    Range("E1") = Monnaie
    Devise = Range("J2").Value
    Dim r, c As Range
    Set r = f.Range(f.Cells(6, 4), f.Cells(f.Cells(65536, 2).End(xlUp).Row, 16))
    On Error Resume Next
    For Each c In r
        If Not c.HasFormula = True And c.Value <> Empty Then
            [S]'c.Value = IIf(f.Range("E1").Value = "EURO", c.Value / Devise, c.Value * Devise)[/S]
           c.Value = IIf(f.Range("E1").Value = "EURO", c.Value * Devise, c.Value / Devise)
        End If
    Next c
    On Error GoTo 0
    MsgBox Int((Timer - t) * 1000) & " ms"
End Sub
à la prochaine fidèle compagnon Xldien

Bonne journée.
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
344
Réponses
16
Affichages
605
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…