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 :

imprime une virgule au lieu d'un point


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Par défaut imprime une virgule au lieu d'un point
    Bonjour tout le monde !

    J'ai créé un programme qui copie la colonne P3 d'un fichier texte en une colonne -P3 dans ce même fichier texte. Le soucis est qu'il me renvoie un nombre avec virgule alors que tous les nombres étaient avec des points.
    Comment faire pour qu'il me renvoie des nombres avec des points ?

    Merci d'avance pour votre aide

    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
    Sub Lissage()
    Dim Nv, P1, P2, P3 As Variant
    Dim X(10000000), Y(10000000), Z(10000000) As Variant
     
    Open ActiveWorkbook.Sheets("bathy").Cells(7, 6) For Input As #1   ' Fichier bathy Brut
     
    'Mise en tableau dynamique des bathy
    i = 0
    Do While Not EOF(1)
     
       i = i + 1
       Input #1, P1, P2, P3        ' lecture fichier
     
        X(i) = P1
        Y(i) = P2
        Z(i) = P3
    Loop
     
    Close #1
     
    Nv = i
    Close #1
    i = 0
     
    Open ActiveWorkbook.Sheets("bathy").Cells(7, 6) For Output As #2
     
    For i = 1 To Nv
        Print #2, X(i), Y(i), -Z(i)
    Next i
    Close #2
    End Sub

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    essayes avec :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X(i) = Replace(P1, ",", ".")
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Il te faut utiliser Replace(). J'ai, je pense, simplifié un peu ton code :
    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
     
    Sub Lissage()
     
        Dim X()
        Dim I As Long
        Dim Fichier As String
     
        Fichier = ActiveWorkbook.Sheets("bathy").Cells(7, 6)
     
        Open Fichier For Input As #1
     
        Do While Not EOF(1)
     
           I = I + 1
     
           'redimensionne le tableau (3 colonnes et x lignes)
           ReDim Preserve X(1 To 3, 1 To I)
     
           'récup directe dans le tableau
           Input #1, X(1, I), X(2, I), X(3, I)
     
        Loop
     
        Close #1
     
        Open Fichier For Output As #1
     
        For I = 1 To UBound(X, 2)
     
            'remplace la virgule par le point
            Print #1, Replace(X(1, I), ",", "."), _
                      Replace(X(2, I), ",", "."), _
                      Replace(-X(3, I), ",", ".")
     
        Next I
     
        Close #1
     
    End Sub
    Hervé.

  4. #4
    Membre averti
    Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Par défaut
    ca marche ! (mais c'est un peu plus lent)

    Merci beaucoup pour votre aide

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    C'est normal que ce soit un peu plus lent puisqu'on passe par la fonction Replace pour modifier les trois valeurs de chaque ligne. Maintenant, tu pourrais essayer de récupérer la ligne entière et Spliter dans un tableau et comme ça, pas besoin de remplacer les virgules par des points (à voir pour le plus rapide des deux ?) :
    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
    41
    42
    43
    44
    45
    46
     
    Sub Lissage()
     
        Dim X()
        Dim Tbl
        Dim I As Long
        Dim Fichier As String
        Dim Ligne As String
     
        Fichier = ActiveWorkbook.Sheets("bathy").Cells(7, 6)
     
        Open Fichier For Input As #1
     
        Do While Not EOF(1)
     
            'récup par ligne entière
            Line Input #1, Ligne
     
            'splite la ligne dans un tableau transitoire
            'adapter le délimiteur (ici, 11 espaces)
            Tbl = Split(Ligne, Space(11))
     
            I = I + 1
            ReDim Preserve X(1 To 3, 1 To I)
     
            'distribu le tableau
            'trim supprime les espaces éventuels avant et après
             X(1, I) = Trim(Tbl(0))
             X(2, I) = Trim(Tbl(1))
             X(3, I) = Trim(Tbl(2))
     
        Loop
     
        Close #1
     
        Open Fichier For Output As #1
     
        For I = 1 To UBound(X, 2)
     
            Print #1, X(1, I), X(2, I), -X(3, I)
     
        Next I
     
        Close #1
     
    End Sub
    Hervé.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2009, 11h26
  2. [C#] Remplacer un point par une virgule
    Par SLicTa dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/01/2008, 13h08
  3. mettre une virgule à la place d'un point
    Par michelle1000 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/10/2006, 07h29
  4. [sql] remplacer une virgule par un point
    Par shiners300 dans le forum Oracle
    Réponses: 1
    Dernier message: 23/12/2005, 19h19
  5. Réponses: 3
    Dernier message: 17/08/2005, 17h27

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