Conversion € en $ ou le contraire selon conditions

Bonsoir,

Je viens vous demander conseil avant d'aller dans le VBA. J'ai actuellement un tableau de budget avec une colonne en € et une en $ sachant que mon taux de change est lui fixe.

Est-il possible via le VBA de faire en sorte que si le montant est rentré en € qu'il calcule automatiquement le montant en $ et si c'est le $ qui est rentré qu'il calcule le montant en € ?

la logique serait :

Si A1 est non nulle et que B1 est nulle donc B1=A1*1,25

et si A1 est nulle est que B1 est non nulle donc A1=B1/1,25

si A1 es B1 sont non nulles donc ne rien faire

Tout ca biensur sur 2 colonnes entiere !

si OUI est ce possible que ce soit automatique ? sans appel de la macro par un bouton ?

Pour info si je souhaite faire ca en VBA c'est que ce calcul se fera sur une feuille dont le contenu est généré par du VBA (une consolidation de plusieurs feuilles) donc le nombre de lignes va varier au fur et à mesure.

Merci

Bonjour,

Tes montants sont déjà dans la feuille ou il s'agit d'une saisie au fil de l'eau ?

Ou se trouve le taux de conversion ? Dans une cellule ?

Si tu changes ton taux le résultat doit rester fixe ou il doit évoluer ? Si c'est une formule il évoluera...

eric

Il s'agirait plus d'une saisie au fil de l'eau.

Le tx de change lui sera fixe sur toute l'année. Mais bon je ne suis pas à l'abri d'un changement en cours d'année ... je pense que pour le coup je le gererais au pire en manu.

le tx de change sera dans une cellule dans une feuille dédiée à toutes mes variables et le contenu de mes listes déroulantes.

Merci

Bonjour,

Si tu changes ton taux le résultat doit rester fixe ou il doit évoluer ?

eric

Il devrait changer ...

donc en clair il faudra rajouter d'autres conditions à savoir que le resultat des champs (lun des deux) soit raccord avec le nouveau tx ???

le seul hic c'est que le systeme devra savoir quelle a été la valeur d'origine (€ ou $) pour être capable de vérifier le résultat ? juste ?

Re,

Si A1 est non nulle et que B1 est nulle donc B1=A1*1,25

et si A1 est nulle est que B1 est non nulle donc A1=B1/1,25

si A1 es B1 sont non nulles donc ne rien faire

Non, dès qu'il y a une saisie l'autre cellule est mise à jour, qu'elle soit vide ou pas.

donc en clair il faudra rajouter d'autres conditions à savoir que le resultat des champs (lun des deux) soit raccord avec le nouveau tx ???

le seul hic c'est que le systeme devra savoir quelle a été la valeur d'origine (€ ou $) pour être capable de vérifier le résultat ? juste ?

Si on met la formule le résultat s'adapte au changement de taux (la cellule doit être nommée Taux)

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lig As Long
    lig = Target.Row
    If Target.Cells.Count > 1 Or lig = 1 Then Exit Sub
    '
    Application.EnableEvents = False
    Select Case Target.Column
    Case 1
        If Target = "" Then
            Cells(lig, 2) = ""
        Else
            Cells(lig, 2).FormulaLocal = "=" & Target.Address & " * taux"
        End If
    Case 2
        If Target = "" Then
            Cells(lig, 1) = ""
        Else
            Cells(lig, 1).FormulaLocal = "=" & Target.Address & " / taux"
        End If
    End Select
    Application.EnableEvents = True
End Sub
21classeur3.zip (7.39 Ko)

Merci c'est incroyable !!! c'est exactement ce que je voulais voir plus !!!

Comment intégrer que ce travail de calcul de devise doit être faire à partir de la ligne 4 sur la colonne D et E jusqu'à ce que qu'atteindre une ligne ou la cellule A est vide.

faudra-t-il ajouter une condition à savoir que la cellule A (ou il y a du texte) soit non vide ?

Je me permet de te demander plus d'infos sur ton code ca ne suis pas convaincu de comprendre :

' Que signifie (ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)
'J'annonce la variable lig comme Long
    Dim lig As Long
'Lig est une selection
    lig = Target.Row
' là je ne comprend pas !!
    If Target.Cells.Count > 1 Or lig = 1 Then Exit Sub
    '
   Application.EnableEvents = False
' là aussi je ne vois pas à quoi ça sert. ca selectionne les colonnes sur lesquelles la macro va s'appliquer mais je ne vois pas comment.
Select Case Target.Column
'si la case 1 est vide et que la case 2 aussi donc rien
 Case 1
        If Target = "" Then
            Cells(lig, 2) = ""
'Sinon (implique que la case 1 est non vide) prendre valeur de la case 1 et X par 1,27
 Else
            Cells(lig, 2).FormulaLocal = "=" & Target.Address & " * taux"
        End If
    Case 2
        If Target = "" Then
            Cells(lig, 1) = ""
        Else
            Cells(lig, 1).FormulaLocal = "=" & Target.Address & " / taux"
        End If
    End Select
    Application.EnableEvents = True
End Sub

J'ai fait une tentative ... mais je ne vois pas trop comment ça marche.

Je vous attache le fichier

Merci

Re,

Comment intégrer que ce travail de calcul de devise doit être faire à partir de la ligne 4 ... jusqu'à ce que qu'atteindre une ligne ou la cellule A est vide.

????

Heureusement que j'ai posé la question s'il s'agissait de saisies... Tu m'as répondu oui.

Traiter une plage se fait différemment.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Or Target.Row < 4 Then Exit Sub
    conv Target
End Sub

Sub convPlage()
    Application.EnableEvents = True
    'traite la plage sélectionnée
    Dim c As Range
    For Each c In Selection
        conv c
    Next c
End Sub

Private Sub conv(ByVal cel As Range)
    Application.EnableEvents = False
    Select Case cel.Column
    Case 4 'colonne D
        If cel = "" Then
            cel.Offset(0, 1) = ""
        ElseIf Left(cel.Formula, 1) = "=" Then
            MsgBox (cel.Address & " non traitée : formule")
        ElseIf IsNumeric(cel) Then
            cel.Offset(0, 1).FormulaLocal = "=" & cel.Address & " * taux"
        End If
    Case 5 'colonne E
        If cel = "" Then
            cel.Offset(0, -1) = ""
        ElseIf Left(cel.Formula, 1) = "=" Then
            MsgBox (cel.Address & " non traitée : formule")
        ElseIf IsNumeric(cel) Then
            cel.Offset(0, -1).FormulaLocal = "=" & cel.Address & " / taux"
        End If
    End Select
    Application.EnableEvents = True
End Sub

J'ai rajouté un test pour que les cellules validées avec formule ne soient pas traitées (sinon risque de référence circulaire non voulue)

eric

18classeur3.zip (8.84 Ko)

Merci Eric,

Milles excuses ! tu as raison !

le bonton met bien à jour les champs existants mais uniquement si elles sont selectionnées.

Pour le reste les nouvelles cellules sont bien remplies au fur et à mesure.

Merci

le bonton met bien à jour les champs existants mais uniquement si elles sont selectionnées.

C'est bien ce qu'il y a d'écrit dans le bouton et dans les commentaires

eric

Merci ! J'ai un autre challenge !! faire en sorte que les champs calculés soient en valeur et non en formule !

ces champs sont appelés sur d'autres feuilles et là le soucis c'est que c'est la formule qui est appelée et non la valeur.

.FormulaLocal = "=" & cel.Address & " / taux"

Comment tranduire "cel.Address" en ".Range" ???

Bonjour,

Tu sais ce que tu veux ou pas ?

Il faut prendre plus de temps à réfléchir à ton projet...

Les valeurs n'évolueront plus en cas de changement de taux.

Il suffit d'enlever la formule (plus de .formula) et mettre juste le résultat :

ta_cellule = cel/taux

Rechercher des sujets similaires à "conversion contraire conditions"