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 :

Supprimer le . en tant que séparateur des milliers [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut Supprimer le . en tant que séparateur des milliers
    Bonjour à tous,
    Je vais essayer de vous expliquer mon problème !

    J’ai un fichier Excel générer lors j'exporte des données depuis un autre logiciel et dans l'une des colonnes, j'ai des nombres sous la forme suivante :

    1.230,78 ou 1.500 ou 26,80 ...

    et pour transformer ces données en nombre, au départ j'utilisais la fonction remplacer le . par du "". Tout fonctionne bien.

    Maintenant j'ai voulu automatiser à l'aide d'une macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Columns("N:N").Select
        Selection.Replace What:=".", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    Malheureusement quand je fais fonctionner cette macro, elle remplace les . et les virgules par "". Voici le résultat obtenu :
    123078 ou 1500 ou 2680 au lieu de 1230,78 et 26,80.

    Je ne comprends vraiment pas d'ou vient le problème ! Il doit y avoir une histoire de format ...
    Merci pour votre aide.
    Cordialement.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Il me semble, sauf erreur de ma part, que dans VBA les "." et les "," sont considérés comme des signes décimaux. Donc il ne fait pas la différence.
    Mais cela reste à confirmer.
    Je sais que cette question a déjà était posée sur ce site. Il faudrait faire une recherche sur les questions posées.
    Si je trouve je te fais signe.
    Cordialement
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai trouvé ce code posté par Ormonth il y a quelques temps. Vois si cela peux t'aider.
    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
     
    Option Explicit
     
    Sub SupEspaceExtrem()
    Cells(1, 2) = Trim(Cells(1, 1))
    End Sub
     
    Sub BonFormat()
    Cells(1, 3) = Replace(Cells(1, 2), ".", " ")
    End Sub
    Sub PassenNombre()
    Cells(1, 4).NumberFormat = "0.0"
    Cells(1, 4) = CDbl(Cells(1, 3))
    End Sub
     
    Sub Faitout()
    With Cells(1, 5)
       .NumberFormat = "0.0" '"0.00"
       .Value = CDbl(Replace(Trim(Cells(1, 1)), ".", " "))
    End With
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonjour NEC14,

    Merci pour ton aide.
    Je viens d'essayer le code proposé, le résultat est cohérant.
    Simplement il faut que je réalise une boucle pour traiter toutes les données et il faut utiliser 4 colonnes pour obtenir le bon résultat.
    Si il y a moyen de faire plus simple je suis preneur …

    @+ et encore merci.

  5. #5
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    utiliser 4 colonnes pour obtenir le bon résultat.
    c'est à dire ? (dans faitout, tu peux traiter la cellule sur elle-même).


    S'il y a moyen de faire plus simple je suis preneur
    ainsi ?

    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
    Option Explicit
    Option Base 1
     
    Sub traitecol()
    Dim objMaplage As Range
    Dim tbopass As Variant
    Dim I As Long
     
    '*** Suppose qu'il y a un entête de colonne.
    Set objMaplage = Range(Range("C" & Rows.Count).End(xlUp), Cells(2, 3))
    tbopass = objMaplage
    For I = 1 To UBound(tbopass, 1)
       tbopass(I, 1) = CDbl(Replace(Trim(tbopass(I, 1)), ".", " "))
    Next I
    objMaplage.NumberFormat = "# ##0.00" 'ou "0.00"
    objMaplage = tbopass
    Set objMaplage = Nothing
    End Sub
    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonsoir et merci Ormonth,
    J'ai utilisé la première proposition que j'ai adaptée :

    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
    Sheets("CA des MP").Select
        Set Feuille = ThisWorkbook.Sheets("CA des MP")
        Set Rng = Feuille.Cells(65536, 2)
        Do While IsEmpty(Rng) And Rng.Row > 1
        Set Rng = Rng.Offset(-1)
        Loop
        If IsEmpty(Rng) Then
        LastLine = 0
        Else
        LastLine = Rng.Row
        End If
     
     
     
        compteurbis = 2
        Do While compteurbis < LastLine + 1
     
        With Cells(compteurbis, 14)
        .NumberFormat = "0.00" '"0.00"
        .Value = CDbl(Replace(Trim(Cells(compteurbis, 14)), ".", " "))
        End With
     
        compteurbis = compteurbis + 1
     
        Loop

    j'ai tout de même une question à propos de la seconde proposition car lors de l'exécution, j'ai une erreur sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For I = 1 To UBound(tbopass, 1)

  7. #7
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    re,

    surement un message de pb d'index.

    il faut que tu ais bien déclaré Option base 1

    d'autre part la méthode employés pour sélectionner la plage fera qu'il y a plantage si tu n'as pas au moins 2 données sous ton en-tête.
    tu peux avoir aussi une incompatibilité de type si tes données ne sont pas numériques si cellule vide etc..

    les codes fournis sont pour adaptation au contexte

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonsoir,

    L'erreur est générée par le fait que je n'avais pas plus de 2 données dans mon test.

    Merci beaucoup pour votre aide.
    Le problème est résolu.

    @+.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Bonjour,

    Même si je suis trop tard.....

    Essaie avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Convertir()
    With Columns(14)
        .TextToColumns Destination:=Range("N1"), ThousandsSeparator:="."
        .Replace ".", "."
    End With
    End Sub
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/12/2008, 13h54
  2. Publipostage et séparateur des milliers
    Par Tchock dans le forum Word
    Réponses: 6
    Dernier message: 19/06/2008, 10h33
  3. Séparateur des milliers
    Par Tchupacabra dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2007, 10h24
  4. Réponses: 3
    Dernier message: 28/04/2007, 15h07
  5. Séparateurs des milliers
    Par blowlagoon dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/05/2006, 10h02

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