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 :

Aide sur code VBA - Modifier les séparateurs de milliers ainsi que les séparateurs de décimal


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Aide sur code VBA - Modifier les séparateurs de milliers ainsi que les séparateurs de décimal
    Bonjour chers membres de ce forum,

    Contexte : Il m'arrive de télécharger des documents contenant des "devises" ayant une mise en forme à l'anglaise, mon logiciel excel n'est pas capable de comprendre que ce sont des chiffres et l'assimile à du texte. J'aimerais écrire une macro VBA capable d'agir sur ma sélection pour transformer ces chiffres en devises ayant une mise en forme française.

    Ma requête : Modifier les chiffres de ma sélection d'une mise en forme anglaise (€123,666.42) à une mise en forme française (123 666,42€).

    Figurez-vous que j'avais presque réussie, mais je me retrouve avec une erreur étrange.

    1 - Ma macro pas folle mais qui fonctionnerait presque

    Pour des cellules ayant un nombre comme €123,666.42

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'Le but étant de changer la mise en forme anglaise d'un nombre par la mise en forme française
     
        Set MaSelection = Selection
     
        MaSelection.Replace What:="€", Replacement:="" 'Je vire le € par rien
        MaSelection.Replace What:=",", Replacement:="" 'Je vire la virgulre par rien
        MaSelection.Replace What:=".", Replacement:="," 'Je remplace le point par une virgule
        MaSelection.Style = "Currency" 'J'essaye péniblement d'indiquer à excel que c'est une devise (histoire de faire réaparraitre le "€" et avoir un espace comme séparateur de milliers).
    Ca fonctionne presque, SEULEMENT:

    2- Excel comprend ce chiffre comme du texte

    Nom : excel convert number currency.png
Affichages : 501
Taille : 23,4 Ko

    Tout est rangé comme je le souhaitais mais ce chiffre est compris comme du "texte" par Excel. Or, il est hors de question pour le petit employé un peu avancé sur excel que je suis de faire ce boulot à la souris "Conver to Number" sur tous les chiffres.

    Avez-vous une solution à mon problème 2 ? Ou avez-vous une solution plus simple peut-être ?

    En vous remerciant,
    Ylaff

  2. #2
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    vous pouvez ajouter la ligne suivante après la ligne "MaSelection.Style = "Currency"":

    MaSelection.Value = CDec(MaSelection.Value)

  3. #3
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Zedite Voir le message
    Bonjour,

    vous pouvez ajouter la ligne suivante après la ligne "MaSelection.Style = "Currency"":

    MaSelection.Value = CDec(MaSelection.Value)
    Désolé mais j'ai une erreur Run-time error "13":
    Type Mismatch


  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mai 2019
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Les cellules de votre sélection contiennent toutes des valeurs numériques ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Zedite,
    Oui tout à fait.
    Je me retrouve avec

    Nom : Capture d’écran 2023-01-17 160732.png
Affichages : 350
Taille : 44,0 Ko

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaSelection.NumberFormat = "General"
    MaSelection.Value = MaSelection.Value

  7. #7
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour @Joe.levrai

    Malheureusement, ça ne change rien !
    Mais pas d'erreur de mismatch 13 néanmoins

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    C'est étrange...

    voir peut-être du côté de la méthode TextToColumns

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous avez une version récente d'excel, je passerais par Power Query pour remplacer les . par , et éventuellement s'il le faut la conversion des dates
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 157
    Points : 1 696
    Points
    1 696
    Par défaut
    Salut,

    Excel détermine automatiquement les types de donnée que contiennent les cellules, et manipuler les format et autre propriété n'y change rien.
    Garde bien en tête que le format d'une cellule n'est que de l'affichage et ne représente en rien le type de la valeur sous-jacente.

    La solution est d'écrire dans la cellule une donnée de type approprié, les fonctions de convertion y sont utile (attention, les paramètres régionaux influent sur ces dernières).

    Je te propose 2 solutions, l'une avec des remplacements (ce que tu avais commencé):
    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
    Dim Wb As Excel.Workbook
    Set Wb = ThisWorkbook
     
    Dim Ws As Excel.Worksheet
    Set Ws = Wb.Worksheets("Feuil1")
     
    Dim Rng As Excel.Range
    Set Rng = Ws.Range("A1")    '// A1 contient €123,666.43
     
    Dim Text As String
    Text = Rng.Value
    Text = Replace(Text, "€", vbNullString)
    Text = Replace(Text, ",", vbNullString)
    Text = Replace(Text, ".", ",")
    Rng.Value = CDbl(Text)      '// A1 contient 123666,43
    L'autre avec des regex:
    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
    Dim Wb As Excel.Workbook
    Set Wb = ThisWorkbook
     
    Dim Ws As Excel.Worksheet
    Set Ws = Wb.Worksheets("Feuil1")
     
    Dim Rng As Excel.Range
    Set Rng = Ws.Range("A1")    '// '// A1 contient €123,666.43
     
    Dim Text As String
    Text = Rng.Value
     
    Dim Rx As Object        '// VBScript_RegExp_55.RegExp
    Set Rx = CreateObject("VBScript.RegExp")
    Rx.Pattern = "€(\d{3}),(\d{3})\.(\d{2})"
    Text = Rx.Replace(Text, "$1$2,$3")
    Rng.Value = CDbl(Text)   '// A1 contient 123666,43

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2023
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Ylaff Voir le message
    Bonjour chers membres de ce forum,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'Le but étant de changer la mise en forme anglaise d'un nombre par la mise en forme française
     
        Set MaSelection = Selection
     
        MaSelection.Replace What:="€", Replacement:="" 'Je vire le € par rien
        MaSelection.Replace What:=",", Replacement:="" 'Je vire la virgulre par rien
        MaSelection.Replace What:=".", Replacement:="," 'Je remplace le point par une virgule
        MaSelection.Style = "Currency" 'J'essaye péniblement d'indiquer à excel que c'est une devise (histoire de faire réaparraitre le "€" et avoir un espace comme séparateur de milliers).
    Ylaff
    Presque bon, mais Excel est capricieux avec les formats monétaires. Ta troisième ligne de remplacement est celle qui pose problème.

    Essaye plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Le but étant de changer la mise en forme anglaise d'un nombre par la mise en forme française
     
     
     
        Set MaSelection = Selection
        MaSelection.Replace What:=",", Replacement:="" 
        MaSelection.NumberFormat = "0.00 $"

  12. #12
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous,
    Malheureusement, aucune de vos solutions ne semble marcher.

    Je suis bel et bien coincé sur des chiffres en mode "Texte"
    Nom : vba pb 1.png
Affichages : 438
Taille : 27,1 Ko

    En revanche, merci à Lulah où ma troisième ligne qui remplace le "." par "," est bien celle qui pose problème.
    Car quand je remplace le séparateur de décimal présent comme "." par "" (rien en gros), il devient possible de mettre en devise monétaire.

    Donc, c'est cette maudite virgule qui maintient la cellule en texte au lieu de devise monétaire !

    Ylaff

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2023
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Ylaff Voir le message
    Bonjour à tous,
    Malheureusement, aucune de vos solutions ne semble marcher.

    Je suis bel et bien coincé sur des chiffres en mode "Texte"
    Nom : vba pb 1.png
Affichages : 438
Taille : 27,1 Ko

    En revanche, merci à Lulah où ma troisième ligne qui remplace le "." par "," est bien celle qui pose problème.
    Car quand je remplace le séparateur de décimal présent comme "." par "" (rien en gros), il devient possible de mettre en devise monétaire.

    Donc, c'est cette maudite virgule qui maintient la cellule en texte au lieu de devise monétaire !

    Ylaff
    Bonjour,

    Je viens de retester avec le format que vous indiquez dans votre premier post la solution suivante fonctionne chez moi :

    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
     
     
    Sub cor_format()
     
     
    With ThisWorkbook.Sheets(1).Range("I5:I9")
     
    ' Sélection alétroire, remplacez par une range définie, etc..
     
        .Replace What:=",", Replacement:="" 
        .NumberFormat = "0.00 $"
     
    End With
     
    End Sub
    Je pense que vous avez des plages ou des colonnes déjà formatées sur votre fichier, essayez avec une feuille vierge.

    Cordialement,

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 32
    Points
    32
    Par défaut
    Bonjour Ylaff,

    Je vois que pas mal de solutions ont été proposées.
    Je vais donc juste réagir sur un point

    Citation Envoyé par Ylaff Voir le message

    2- Excel comprend ce chiffre comme du texte

    Nom : excel convert number currency.png
Affichages : 501
Taille : 23,4 Ko

    Tout est rangé comme je le souhaitais mais ce chiffre est compris comme du "texte" par Excel. Or, il est hors de question pour le petit employé un peu avancé sur excel que je suis de faire ce boulot à la souris "Conver to Number" sur tous les chiffres.

    Ylaff
    Il existe dans le bandeau [Données] d'Excel un bouton appelé "Convertir".
    Si tu sélectionnes l'ensemble de ta colonne, que tu clic sur "Convertir" puis directement sur "Terminer", sans changer quoi que ce soit au paramétrage dans la fenêtre qui s'affiche, ça convertira tes nombres qui sont sous un format texte en format numérique.
    Ca t'évite donc le fastidieux clic sur chaque cellule pour convertir en nombre que tu évoquais.
    De mon expérience, les personnes qui se retrouvent confrontés à la même problématique que toi et qui n'ont pas connaissance de VBA procèdent ainsi :

    1) Sélection de/des colonne(s) à traiter
    2) CTRL + H (rechercher/remplacer) => remplacement du "." par une ","
    3) Utilisation de la fonction "Convertir" évoquée supra (toujours en gardant les colonnes sélectionnées)

    C'est pas automatique mais pas trop long à faire et ne nécessite pas de VBA.
    Je me doute que ce n'est pas ce que tu cherches mais si jamais l'entreprise de création de requête se révélait veine ou ardu tu pourras toujours utiliser cette méthode.

    En espérant avoir (un peu) aidé.
    Bien à toi

  15. #15
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Janvier 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2023
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour merci de votre aide à tous,
    Malheureusement, les dernières solutions proposées par les gentilles personnes ci-dessous n'ont pas marché non plus
    Par ailleurs, trouverez ci-dessous un petit GIF qui permet de visualiser le "problème" même si à la fin des fins on arrive à bout de ce que l'on voulait.

    Nom : FqIM18pKEV.gif
Affichages : 279
Taille : 1,98 Mo

Discussions similaires

  1. Aide sur code VBA - Selectionner les cellules A1 de chaque worksheet
    Par Ylaff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/01/2023, 18h24
  2. [XL-2003] Aide sur code VBA sur Excel
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2013, 17h14
  3. [XL-2007] Aide sur code vba copier/coller
    Par youlig dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/03/2013, 11h28
  4. [XL-2007] Besoin d aide sur code vba
    Par alexandrek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2011, 17h10
  5. [XL-2000] Aide sur Code VBA
    Par Dan21 dans le forum Excel
    Réponses: 3
    Dernier message: 08/02/2010, 14h38

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