IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour convertir des € en $, et vice versa


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro pour convertir des € en $, et vice versa
    Je suis dans une grosse boite informatique, et je fait du reporting financier, alors il m'arive très souvent de convertir des chiffre d'€ en $, et vice versa. Pour l'instant, je le fais manuellement, en tapant la formule avec le taux de conversion qui va bien. Mais voila après avoir fais ça des centaines de fois, je me suis un peu lassé de ces petites manoeuvres, et j'ai pensé qu'il était peut-être possible de l'automatiser avec une macro.

    Voila ma vision : je selectione une cellule(commençons avec une) contenant une donnée en €, je tape un racourcis clavier, qui déclenche une macro, puis juste en dessou de la cellule s'affiche le nouveau chiffre converti en $.

    Je pense qu'une fois qu'on sait faire ça, il est relativement simple de le faire dans l'autre sens ($ vers €)

    Mais voila, je suis ce qu'on appele un newbie, et je je n'ai aucune notion en programation, alors si un gentil programeur pouvait m'aider, ce serait vraiment très... gentil.

    Je vous remercie d'avance.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pour moi il ne s'agit pas de programmation.

    En général je gère ça avec une liste déroulante pour le choix de la devise.
    Pour chacune de mes cellules je multiplie par une cellule nommée (ici FxRate) :
    une formule
    devient
    facile à faire en masse avec un rechercher "=" remplacer "=FxRate*"

    Ma liste déroulante fera simplement changer la valeur de FxRate (au moyen de RECHERCHEV() ou INDEX()).
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour :

    S'il ne s'agit toujours que de $ et €, vous pouvez aussi essayer ce code à coller dans VBA et dans votre feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Worksheet_Change(ByVal Target As Range)
    cours = cells(1, 3)  '$
    If Target.Column = 2 And Target.Row = 2 Then
      If Range("B2").Value > 0 Then
      Range("A2").Value = Range("B2") * euro
      Else
      MsgBox "Le montant en $ n'est pas renseigné !)"
      End If
    ElseIf Target.Column = 1 And Target.Row = 2 Then
      If Range("A2").Value > 0 Then
      Range("B2").Value = Range("A2") / (euro)
      Else
      MsgBox "Le montant en € n'est pas renseigné !)"
      End If
    End If
    End Sub
    dans la cellule A1 vous tapez $ dans la cellule B1 vous tapez € et en C1 vous indiquez le cours du $ en euro.

    Dès que vous entrez une valeur en A2 la valeur en € s'affiche en B2 et dès que vous tapez une valeur en B2 la valeur en $ s'affiche en A2.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    S'il s'agit de convertir le montant lors de la sélection de la cellule sans ajouter de colonne, je placerais le code dans l'événement selectionChange
    Maintenant, tu ne dis pas si tes cellules sont formatée selon la monnaie, $ ou €, ni, le cas échéant si € ou $ sont placés avant ou après le montant (format cellule -> Monétaire). Tout dépend...
    Tu dis

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Merci mais...
    Merci pour vos réations, mais elle ne m'aident pas vraiement.
    Ce qui m'intéresse, c'est faire la conversion avec un simple racourci clavier, pour que ça me prenne Moins d'une seconde, et que la valeur convertie apparaisse sous la valeur à convertir. Bien sur, je peux rentrer manuellement une formule, mais cela prend un certain temps, et quand on fait ça 10 fois dans la journée, ce temps n'est pas négligeable. Alors... Avez vous la solution "miracle"... Merci d'avance.

  6. #6
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ConversionEuroEnDollar()
        ActiveCell.Offset(1, 0).Value = ActiveCell.Value * 1.1
     
    End Sub
    Sub ConversionDollarEnEuro()
        ActiveCell.Offset(1, 0).Value = ActiveCell.Value * 1.1
     
    End Sub
    Que tu affectes à un raccourci différent de touche pour les deux macros.
    (Alt+F8, sélectionnes la macro, Options.. et affectes la touche du raccourci désiré.)
    N'oublies pas de changer le 1.1 par le taux de conversion désiré!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Proposé par drakkar_agfa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub ConversionEuroEnDollar()
        ActiveCell.Offset(1, 0).Value = ActiveCell.Value * 1.1
     
    End Sub
    Sub ConversionDollarEnEuro()
        ActiveCell.Offset(1, 0).Value = ActiveCell.Value * 1.1
     
    End Sub
    vous voyez un avantage de devoir modifier en permanence 1 coefficient dans chaque procédure plutôt que d'en modifier un seul dans une cellule (avec un risque supplémentaire d'oublier de le faire) ?

  8. #8
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bien sur il a plein de possibilité, utiliser une celle pour retenir le taux de conversion (de euro a dollar et l'inverse), aussi, demander à chaque ouverture le taux de change...

    C'est appliquable et modifiable.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonsoir,

    Juste pour dire quelque-chose de probablement idiot, avant d'aller dormir :
    Quel que soit le format des cellules que tu veux traiter :
    Chépa, moi :

    - un truc (celui de ton choix) pour les marquer ! une couleur RGB(254,255,255) pour le blanc (et tu n'y verras que du feu), pour un fond blanc, une couleur RGB(1,0,0) pour écrire en noir à la place de rGB(0,0,0), un signe dans le commentaire associé, etc..etc... tout ce que tu pourras inventer de la sorte ...
    - une macro ayant pour rôle d'intervenir sur toutes les cellules ainsi "marquées"
    - un raccourci pour lancer ta macro...
    - un lancement de ce racourci.

    Bon ! suis fatigué, sûrement ... ===>> au dodo, vite...

  10. #10
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Un mixte légèrement optimisé -
    le principe de connexion asynchrone remplace avantageusement le jeu avec QueryTable ;
    elle permet de ne pas bloquer le code avec une connexion synchrone :

    Code WorkBook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Actualiser à l'ouverture du classeur  '
    Private Sub Workbook_Open():           EuroActualize:               End Sub
    Dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Jeu de touches Ctrl Shift E  (attribuée depuis Alt+F8) '
    Public Sub EuroActualize():             Worksheets("Euro").setUrl:                  End Sub
    Dans un module de feuille (Nommée Euro)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public WithEvents IE As classEuro
     
    'Procedure appelée afin de raffraichir l'affichage  '
    Public Function setUrl()
        If TypeName(IE) = "Nothing" Then Set IE = New classEuro
        IE.Refresh
    End Function
     
    ' Procédure d'actualisation retournée               '
    Private Sub IE_EuroActualize(value As String)
        [Euro0] = value
    End Sub
    Dans un module de classe nommée classEuro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    ' AJOUTER : '
    ' Référence à Microsoft Internet Controls (Internet Explorer) : shdocvw.dll si <= IE6, sinon ieframe.dll
    ' Référence à Microsoft HTML Object Librairy (DOM) : msHTML.tlb
     
    Private WithEvents clsIE    As InternetExplorer
    Private htmlDoc_            As HTMLDocument
    Private url_                As String
     
    Private Const defEuroId     As String = "aj_last_1xEURUS"
    Private Const defUrl        As String = "http://www.boursorama.com/cours.phtml?symbole=1xEURUS"
     
    Public Event EuroActualize(value As String)
     
    Private Sub Class_Initialize():                         Set clsIE = New InternetExplorer:       End Sub
     
     
    Public Sub Refresh(Optional Url As String = defUrl):    url_ = Url:    clsIE.Navigate url_:     End Sub
     
    Private Sub clsIE_DocumentComplete(ByVal pDisp As Object, Url As Variant)
        Dim dElem As Object, ret As String
     
        ' Le document demandé est chargé  dans son intégralité  '
        If Url = url_ Then
     
            ' On récupère le contenu                            '
            Set htmlDoc_ = clsIE.document
     
            ' pour chaque balise <span>                         '
            For Each dElem In htmlDoc_.getElementsByTagName("span")
     
                ' La valeur cherchée est trouvée                '
                If dElem.getAttribute("id") = defEuroId Then
     
                    ' alors on génère l'évènement               '
                    RaiseEvent EuroActualize(dElem.innerHTML)
                    Exit Sub
                End If
            Next
        End If
    End Sub

    Explications :

    Nécessite une connexion internet
    > actualisation à l'ouverture du classeur
    > ou sur combinaison de touches {Ctrl}+{Shift}+{E}
    > ou actualisation automatisée pouvant être liée à un évènement ou une fréquence par éxemple.
    Le résultat tien compte qu'une valeur par défaut est ou non fixée.


    Classeur EuroActualize.xls

Discussions similaires

  1. Macro pour convertir des images en dicom
    Par duflo dans le forum ImageJ
    Réponses: 2
    Dernier message: 13/07/2013, 16h55
  2. macro pour créer des graphiques
    Par Sebastien_INR59 dans le forum Access
    Réponses: 1
    Dernier message: 07/06/2006, 09h44
  3. [VBA-E] Macro pour convertir un fichier texte en excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2006, 14h47
  4. Installer un cgi pour convertir des html en pdf
    Par sami_c dans le forum Apache
    Réponses: 3
    Dernier message: 23/03/2006, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo