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
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 SubJ'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 SubJ'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
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