XL 2016 Conversion en devise

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 !

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

Bonjour,

Si j'ai bien compris. Cellule M1 utilisée pour ne pas convertir plusieurs fois de suite.
à tester. Code à copier dans un module standard et enregistrer fichier au format xlsm ou xlsb
VB:
Option Explicit

Sub conversion()
Dim i As Integer, j As Integer, moné As Double
With ActiveSheet
If .Range("M1").Value = "Converti" Then
MsgBox "Monnaie déjà convertie!" & vbLf & "Fin de l'opération.", vbInformation + vbOKOnly, "CONVERTION"
Exit Sub
Else
.Range("M1") = "Converti"
moné = .Range("J2").Value
For j = 4 To 15

For i = 8 To 17
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 22 To 32
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 39 To 57
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 59 To 60
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 62 To 68
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 70 To 81
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 85 To 87
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 92 To 97
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 101 To 105
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 109 To 112
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

 i = 116
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If

Next j
MsgBox "Convertion terminée!", vbInformation + vbOKOnly, "CONVERTION DEVISE"
End If
End With
End Sub
Bonne journée.
 
Bonjour,

Si j'ai bien compris. Cellule M1 utilisée pour ne pas convertir plusieurs fois de suite.
à tester. Code à copier dans un module standard et enregistrer fichier au format xlsm ou xlsb
VB:
Option Explicit

Sub conversion()
Dim i As Integer, j As Integer, moné As Double
With ActiveSheet
If .Range("M1").Value = "Converti" Then
MsgBox "Monnaie déjà convertie!" & vbLf & "Fin de l'opération.", vbInformation + vbOKOnly, "CONVERTION"
Exit Sub
Else
.Range("M1") = "Converti"
moné = .Range("J2").Value
For j = 4 To 15

For i = 8 To 17
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 22 To 32
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 39 To 57
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 59 To 60
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 62 To 68
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 70 To 81
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 85 To 87
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 92 To 97
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 101 To 105
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

For i = 109 To 112
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If
Next i

 i = 116
If IsEmpty(.Cells(i, j).Value) Then
.Cells(i, j).Value = ""
Else
.Cells(i, j).Value = .Cells(i, j).Value * moné
End If

Next j
MsgBox "Convertion terminée!", vbInformation + vbOKOnly, "CONVERTION DEVISE"
End If
End With
End Sub
Bonne journée.
Bonjour,
Merci pour ce code.
Cela fonctionne bien. Toutefois je trouve le traitement assez long. De plus j'aimerai pouvoir le reconvertir en RON. Car ce document est complété dans la monnaie locale.
En fait l'idéal serait de pouvoir cliquer sur un bouton EUR et d'avoir le tableau en EUR, puis de recliquer sur le bouton afin de retrouver les données telles qu'elles étaient remplies en RON.
C'est peut être compliqué à réaliser ?
Merci
 
Bonjour,

Toutefois je trouve le traitement assez long. De plus j'aimerai pouvoir le reconvertir en RON. Car ce document est complété dans la monnaie locale.
Pour le temps d’exécution: il est proportionnel au nombre de cellules à traiter.
Tu n'avais pas mentionné le taux de change, j'ai donc pris une valeur au pif.
Ce n'est pas difficile de passer d'une monnaie à l'autre. Si on a multiplié les valeurs pour passer à une autre monnaie, il suffit de diviser pour revenir aux valeurs initiales.
 
Bonjour tout le fil,
Un essai simple en PJ avec :
VB:
Sub Convertir()
    Dim L%, C%
    On Error GoTo Fin:
    If [B1] = "Value in RON" Then
        [B1] = "Value in EURO": Taux = 1 / [J2]
    Else
        [B1] = "Value in RON": Taux = [J2]
    End If
    Application.ScreenUpdating = False
    For C = 4 To 16
        For L = 6 To Range("A65500").End(xlUp).Row
            On Error Resume Next
            If Cells(L, C) <> "" Then
                If Left(Cells(L, "B"), 1) <> "%" Then
                    Cells(L, C) = Cells(L, C) * Taux
                End If
            End If
        Next L
    Next C
Fin:
End Sub
Le changement de monnaie se fait par appui sur B1.
J'ai pris par défaut 5 Lei par €. A modifier.
 

Pièces jointes

- 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

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
503
Réponses
10
Affichages
501
Réponses
8
Affichages
736
Retour