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 :

Remplacer un point par une virgule dans un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Remplacer un point par une virgule dans un tableau
    Bonjour,

    J'ai renseigné mon tableau à l'aide d'un doc .csv où les "," exprimant les décimales sont des "." (je n'ai donc pas 1,5 mais 1.5) ce qui empêche tous calcul entre les colonnes.
    L'idée serait de faire un équivalent de


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For j = 2 To UBound(tableau, 1)
    tableau(j, 2) = tableau(j, 2).Replace(".", ",")
    Next j
    mais Replace ne fonctionne apparemment que sur les feuilles
    Serait il possible de modifier cela au sein même du tableau?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Replace fonctionne très bien en VBA, et sur les tableaux!
    à condition de le programmer correctement!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    For j = 2 To UBound(tableau, 1)
    tableau(j, 2) = Replace(tableau(j, 2), ".", ",")
    Next j

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le replace ne changera rien!
    si dans la colonne [A] tu as des points pour des virgules comme caractère décimale alors!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("A:A").value=range("A:A").value
    la virgule est le caractère décimal Excel!
    le point es le caractère décimal vb!

    l'inversion de l'un sera vu par l'autre comme du texte et réciproquement i il faut alimenter l'autre en fonction du format de l'un et réciproquement!

  4. #4
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Non mais là il est pas dans des cellules, il est dans tableau chargé à partir d'un csv!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    Non mais là il est pas dans des cellules, il est dans tableau chargé à partir d'un csv!
    oui mais il va en faire quoi de son tableau coté vb c'est le point le décimal!

    et vu que son tableau est très certainement un variant un numérique dans son tableau sera vue comme un string!

    si il veut manipuler son tableau pour faire des comparaison il n’aura pas d'autre choix que d'utiliser Val si le décimal est un point ou Cdbl si c'est une virgule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For j = 2 To UBound(tableau, 1)
    if val(tableau(j, 2)) = cdbl(tableau(j+1, 2)) then
    Next j
    mais pour enrichir Excel il faut qu'il soit un point!
    Dernière modification par Invité ; 26/04/2016 à 13h26.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    Replace fonctionne très bien en VBA, et sur les tableaux!
    à condition de le programmer correctement!
    En effet!!!!
    Ca marche parfaitement merci

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Je reviens sur ce problème car il n'est finalement pas entièrement résolu.
    Cette méthode marche bien quand la nombre n'est pas trop long (159.58 devient bien 159,58 mais 147405937.11000001 devient 14740593711000000)
    Serait il possible de contourner le problème tout en gardant "Replace"?

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For j = 2 To UBound(tableau, 1) 
    tableau(j, 2) = Replace(tableau(j, 2), ".", ".")
    Next j
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Oui, il y a un problème.
    Mais je n'ai pas le même chose que toi.
    J'ai plutôt une perte de décimale.
    En passant par un string, les décimales sont conservées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test_replace()
        Dim dblVar As Variant
     
        dblVar = 147405937.11
        Debug.Print Replace(147405937.11, ".", ",")
        dblVar = Replace(147405937.11, ".", ",")
        Debug.Print dblVar
        dblVar = "147405937.11000001"
        dblVar = Replace(dblVar, ".", ",")
        Debug.Print dblVar  ' affiche bien : 147405937,11000001
    End Sub

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Non ça ne marche pas, en remplaçant "." par "." je me retrouve avec l'incompatibilité de type du début dès que je veux faire des opérations entre les colonnes

  11. #11
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Ok mais alors attention à une chose!
    En vba:
    si tu multiplie des nombre, avec un type de données numérique, le point est le séparateur décimal.
    Par contre si tes nombres ont le type String, alors c'est la virgule qui est le séparateur décimale!!!!!
    Avec la Fenêtre des variables locales(en mode pas à pas), regarde quel est le type de données des cellules de ton tableau!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Donc si j'ai bien compris, j'enregistre mon tableau as String dès le début puis une fois le remplacement fait je le repasse en Variant?



    Citation Envoyé par Philippe PONS Voir le message
    Oui, il y a un problème.
    Mais je n'ai pas le même chose que toi.
    J'ai plutôt une perte de décimale.
    En passant par un string, les décimales sont conservées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub test_replace()
        Dim dblVar As Variant
     
        dblVar = 147405937.11
        Debug.Print Replace(147405937.11, ".", ",")
        dblVar = Replace(147405937.11, ".", ",")
        Debug.Print dblVar
        dblVar = "147405937.11000001"
        dblVar = Replace(dblVar, ".", ",")
        Debug.Print dblVar  ' affiche bien : 147405937,11000001
    End Sub

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Philippe PONS Voir le message
    Avec la Fenêtre des variables locales(en mode pas à pas), regarde quel est le type de données des cellules de ton tableau!
    Tout est en variant puisque dans mon tableau il y a des Nombres et des Caractères

  14. #14

  15. #15
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Ccomment est déclarée ta variable tableau?

  16. #16
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Oui, mais dans un tableau, tu peux avoir des Variant/String ou des Variant/Double, c'est à dire un sous-type de donnée.
    Comme le dit rdurupt, tu peux aussi utiliser CDbl pour convertir un String en Double

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    je l'ai déclaré comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks.OpenText Filename:=chemin, DataType:=xlDelimited, local:=True
        tableau = Range("a1").CurrentRegion

  18. #18
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    C'est donc une variable non déclarée! C'est pas bien ça!
    Et je croyais que c'était un tableau chargé à partir d'un fichier csv!
    Là il est chargé à partir d'une plage de cellules!

  19. #19
    Invité
    Invité(e)
    Par défaut
    pour être tranquille tu le force dans un format dont tu connais le type(Val ou Cdbl)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Numerique= cdbl(Replace(tableau(i,2), ".", ","))

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Oui je débute, j'ai pas encore les bon réflexes
    oui c'est vrai, je voulais dire que le fichier de base était un csv

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2003] Remplacer un point par une virgule dans Textbox
    Par tibs1502 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/03/2013, 10h48
  2. [PROC] Remplacer un point par une virgule dans une Proc Tabulate
    Par PAULOM dans le forum SAS Base
    Réponses: 2
    Dernier message: 20/08/2009, 08h36
  3. remplacement du point par une virgule
    Par thierry007 dans le forum Windows Forms
    Réponses: 13
    Dernier message: 13/05/2009, 20h11
  4. remplacer un point par une virgule
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/04/2008, 09h43
  5. [C#] Remplacer un point par une virgule
    Par SLicTa dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/01/2008, 13h08

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