Convertir virgule en point VBA [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
31 mars 2014
-
Messages postés
4
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
31 mars 2014
-
Bonjour,

MON OBJECTIF :
J'ai trois colonnes dans Excel avec des nombres décimaux (contenant des virgules!).
----------------------------------------------------------------------------------------------------
-9,952854338 9,914015274 37,5
-9,68653706 10,17244397 37,5
-9,298642109 10,32703771 37,5
----------------------------------------------------------------------------------------------------

Je fais une première modification (vous pourrez comprendre pourquoi plus tard) pour transformer les "," en "." :
----------------------------------------------------------------------------------------------------
- Fichier
- Option
- Options avancées
- Décocher "Utiliser les séparateurs système"
- Mettre un point à la place de la virgule dans "Séparateur de décimale"
----------------------------------------------------------------------------------------------------

Et j'obtiens :
----------------------------------------------------------------------------------------------------
-9.952854338 9.914015274 37.5
-9.68653706 10.17244397 37.5
-9.298642109 10.32703771 37.5
----------------------------------------------------------------------------------------------------

Je souhaiterai exporter ces trois colonnes en fichier .txt de manière à créer des courbes sous SolidWorks.
Pour cela j'utilise le code suivant (non optimisé mais je travaillerai ca après avoir réglé mon problème):
----------------------------------------------------------------------------------------------------
Sub creer_TXT()

Dim Chemin As String
Dim DerniereLigne As Long           'Index de la dernière ligne
Dim Tableau1() As Variant
Dim Tableau2() As Variant
Dim Tableau3() As Variant
Dim Ligne As Long

Chemin = "C:\Users\User\Desktop\"
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Création du tableau par une boucle
Ligne = 1
Do While Ligne <= DerniereLigne
 'Ajout 1 élément à l'array en conservant les éléments précédents
    ReDim Preserve Tableau1(Ligne)
     ReDim Preserve Tableau2(Ligne)
      ReDim Preserve Tableau3(Ligne)
'Affectation de la valeur au nouvel élément
    Tableau1(Ligne) = Range("A" & Ligne).Value
    Tableau2(Ligne) = Range("B" & Ligne).Value
    Tableau3(Ligne) = Range("C" & Ligne).Value
    Ligne = Ligne + 1
Loop

'Ecrit dans le fichier txt
Ligne = 1
Do While Ligne <= DerniereLigne
    Open Chemin & "Temporaire.txt" For Append As #Ligne
    
    Print #Ligne, Tableau1(Ligne) & vbTab & Tableau2(Ligne) & vbTab & Tableau3(Ligne) & vbCrLf
    Close
    Ligne = Ligne + 1
Loop

MsgBox ("c'est ok")

End Sub

----------------------------------------------------------------------------------------------------

PROBLÈME : J'arrive a créer le fichier .txt mais je n'arrive pas à conserver les "." J'obtiens dans le fichier .txt des nombres décimaux avec des ",". Or SolidWorks ne reconnais pas les virgules mais uniquement les points!


MA QUESTION : Que faire pour obtenir des "." dans le fichier .txt ??

Je vous remercie par avance de bien vouloir m'aider. J'ai déjà fait plusieurs tests alors si vous voulez mieux comprendre, nous pouvons en discuter.

A bientôt,

7 réponses

Messages postés
18
Date d'inscription
dimanche 14 juillet 2013
Statut
Membre
Dernière intervention
7 avril 2020
1
si tu n'as pas d'autres virgules dans le document que celles des nombres décimaux, tu peux ouvrir ton fichier .txt avec bloc-notes, puis tu vas dans edition/remplacer (Ctrl+H)
dans rechercher tu met le signe virgule, dans remplacer tu met le point, puis tu clique sur remplacer tout.

ATTENTION : ne marche pas si tu as aussi des virgules qui ne correspondent pas aux nombres décimaux mais à du texte.

PS : as-tu vérifié que parmis tous les formats sous lesquels exel te permet d'enregistrer les fichiers (dans enregistrer sous), il n'y en a pas un qui convienne?
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 590
Bonjour,

Le problème vient du fait que, sous Excel, tu ne remplaces pas les virgules par des points, mais change ton séparateur décimal.
Ainsi lorsque tu lances ta macro, le point est reconnu comme séparateur décimal.

Pour remplacer les virgules par des points utilise la fonction Excel Remplacer (accessible depuis ta feuille par le raccourci clavier CTRL+H).

Essaie comme cela et reviens nous indiquer si cela a fonctionné.
Messages postés
4
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
31 mars 2014

J'ai oublié de précisé que j'aimerai éviter de faire "remplacer tout" manuellement.
J'airai aimé lancé le programme et obtenir directement le fichier texte utilisable dans SolidWorks.
Je cherche à automatisé le travail pour que d'autres puissent l'utiliser sans se tromper et plus rapidement...

Peux-tu expliquer plus en détail cette questions ?
"PS : as-tu vérifié que parmis tous les formats sous lesquels exel te permet d'enregistrer les fichiers (dans enregistrer sous), il n'y en a pas un qui convienne?"
L'idée que tu sous entends est d'enregistrer mon fichier Excel sous un autre format pour pouvoir l'utiliser directement dans SolidWorks?

Merci en tout cas pour ce début de proposition!
Messages postés
15721
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2021
1 480
Bonjour a tous,

Remettez votre option "Utiliser les séparateurs système", laissez la saisie separateur en virgule et:

Sub creer_TXT()

Dim Chemin As String
Dim DerniereLigne As Long 'Index de la dernière ligne
Dim Ligne As Long

Chemin = "C:\Users\User\Desktop\"
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Création du tableau par une boucle
'Ecrit dans le fichier txt
Ligne = 1
Do While Ligne <= DerniereLigne
Open Chemin & "Temporaire.txt" For Append As #Ligne
Print #Ligne, Replace(Range("A" & Ligne).Value, ",", ".") & vbTab & Replace(Range("B" & Ligne).Value, ",", ".") & vbTab & Replace(Range("C" & Ligne).Value, ",", ".") & vbCrLf
Close
Ligne = Ligne + 1
Loop

MsgBox ("c'est ok")

End Sub

par contre le fichier en Append ?????
Messages postés
4
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
31 mars 2014

Je viens de tester le code et ça fonctionne : c'est merveilleux :-)
Je chercherai à comprendre tout ca lundi matin car je n'ai plus le temps aujourd'hui mais merci mille fois!

Par contre, je n'ai pas compris la question "par contre le fichier en Append ?????".

Bon WE et merci encore.
Messages postés
15721
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2021
1 480
Re,

Les fichier en Append sont en general reserves a l'ajout d'enregistrements aux fichiers existant en les reouvrants. Si ce n'est pas votre cas ouvrir le fichier en Output

Sub creer_TXT()

Dim Chemin As String
Dim DerniereLigne As Long 'Index de la dernière ligne
Dim Ligne As Long

Chemin = "C:\Users\User\Desktop\"
DerniereLigne = Range("A1").SpecialCells(xlCellTypeLastCell).Row

'Ecrit dans le fichier txt
Open Chemin & "Temporaire.txt" For Output As #1
For Ligne = 1 To DerniereLigne
Print #1, Replace(Range("A" & Ligne).Value, ",", ".") & vbTab & Replace(Range("B" & Ligne).Value, ",", ".") & vbTab & Replace(Range("C" & Ligne).Value, ",", ".") & vbCrLf
Next Ligne
Close

MsgBox ("c'est ok")

End Sub

il y a un saut de ligne en fin ???????
Messages postés
4
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
31 mars 2014

Ok pour les fichiers en Append. Merci pour les explications.

Le saut de ligne n'est pas nécessaire, en effet!