Problème de séparateur décimal

KIM

XLDnaute Accro
Bonjour les ami(e)s, & le Forum,
Je récupère des fichiers excel générés par un outil externe avec comme séparateur décimal le point ".".
Le séparateur décimal défini au niveau du système XP est la virgule ",".
Dans les options d'excel onglet "International" , j'ai coché "Utiliser les séparateurs système

Si j'ouvre ce fichier excel, il ne reconnait pas les nombres et les cellules deviennent du texte. Il faut que je change le "." en virgule "," .
Par contre, avant d'ouvrir ce fichier excel, je modifie le séparateur décimal dans excel c-à-d :
- je décoche "Utiliser les séparateurs système"
- je déclare le point "." comme séparateur décimal
et j'ouvre mon fichier excel. Là il reconnait le séparateur décimal et les cellules deviennent des nombres.

- Si je coche de nouveau "Utiliser les séparateurs système" dans les options d'excel, le point "." devient virgule dans les cellules.

Si par mégarde j'ouvre le fichier excel avant de positionner le séparateur décimal, la logique ci-dessus ne fonctionne plus.

J'ai beaucoup de plans que je récupère dans un seul fichier excel par vba. Est-il possible de modifier les options d'excel par vba selon la logique ci-dessous :
Au lancement du code et avant la lecture des fichiers excel faire:
- décocher "Utiliser les séparateurs système"
- déclarer le point "." comme séparateur décimal
- importer les fichiers dans le classeur courant
- sauvegarder le fichier lu et le classeur courant
- et après remettre les options d'excel d'origine : Cocher "Utiliser les séparateurs système"

Votre code sera intégré avant même la lecture de ces fichiers excel.

Merci de votre aide
KIM
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de séparateur décimal

Re,

essaye ceci, fonctionne chez moi sur ton fichier source, mais bon j'ai le point en séparateur décimale.... Mais avant exécution de cette ligne, les nombres étaient considérés comme du texte, après exécution ce sont bien des nombres.... en espérant que cela puisse t'aider....

(numéro de la colonne à adapter)
Code:
Columns(6).TextToColumns DecimalSeparator:="."

@+
 

KIM

XLDnaute Accro
Re : Problème de séparateur décimal

Re, & le fil,
@Pierrot93
Exact, le "DecimalSeparator" est celui de la source, le point.
en exécutant cette ligne de commande : Columns(6).TextToColumns DecimalSeparator:=".", cela transforme le contenu de la cellule selon le format défini dans Excel c-à-d la virgule comme séparateur décimal + m² (ex : 2.85 devient automatiquement 2,85 m²).

Cela fonctionne, merci Pierrot93.
Dans mon fichier il y a des zoes et des colonnes qu'il ne faut pas modifier. Comment modifier cette ligne pour l'appliquer à:
B1:B9
F11, jusqu'à la fin
L11:011, jusquà la fin
Merci d'avance
KIM
 

KIM

XLDnaute Accro
Re : Problème de séparateur décimal

Re,

Oui Pierrot93, l'instruction que tu m'as donnée fonctionne correctement. je l'ai testée. il ne faut même pas remplacer le point en virgule car l'instruction donnée me transforme automatiquement le contenu de la cellule selon le format défini dans Excel.
Il me reste maintenant à l'appliquer sur une partie de mes données (voir mon dernier post #18)
Merci encore
KIM
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de séparateur décimal

Re,


Dans mon fichier il y a des zoes et des colonnes qu'il ne faut pas modifier. Comment modifier cette ligne pour l'appliquer à:
B1:B9
F11, jusqu'à la fin
L11:011, jusquà la fin

essaye ceci :
Code:
Dim t() As Variant, i As Byte
t = Array(2, 6, 12, 13, 14, 15)
For i = 0 To 5
    Columns(t(i)).TextToColumns DecimalSeparator:="."
Next i
 

KIM

XLDnaute Accro
Re : Problème de séparateur décimal

Re, Pierrot93, JCGL & le forum,
Mon problème de séparateur décimal est réglé. Merci Pierrot93.

En effet, à l'import des fichiers source, il faut préciser que le "DecimalSeparator" à convertir est le point, celui des fichiers source.
Les données seront automatiquement au format déclaré dans le fichier excel cible.

L'instruction à utiliser:
Columns(6).TextToColumns DecimalSeparator:="."

On peut l'appliquer à l'ensemble des données et celui ne nuit pas les données non concernées par le séparateur décimal.

Merci les amis & le forum
KIM
 

KIM

XLDnaute Accro
Re : Problème de séparateur décimal

Bonsoir à tou(te)s, Bonsoir Pierrot93 et JCGL,
A l'import des fichiers source, j'utilise l'instruction que m'a fourni Pierrot93 et cela fonctionne bien.
On me demande actuellement d'exécuter cette instruction à chaque fichier source lu et le sauvegarder.
La macro GO,
lance le scan en choisissant le répertoire où scanner + ses sous répertoires
lance la procédure FormatSeparateurDecimal qui :
- Recherche dans le répertoire sélectionné et ses sous-répertoires les fichiers dont le nom se termine par *SURF.xls
et les ouvre un à un.
Comment intégrer la macro "SeparateurDecimal" du module1 dans la procédure globale FormatSeparateurDecimal pour l'exécuter sur chaque fichier lu et le sauvegarder? voir fichiers ci-joint.
Merci de votre aide
KIM
 

Pièces jointes

  • TDB_SepDecimal.zip
    46.1 KB · Affichages: 25

KIM

XLDnaute Accro
Re : Problème de séparateur décimal

Bonjour Pierrot93, JCGL, et le forum,
Je reviens vers vous pour ce probleme de formatage.
Le séparateur dédcimal du fichier texte est bien le point "."
Tout marche quand il y a plusieurs lignes du fichier texte. Par contre quand j'ai une seule ligne de données (ligne 11) dans le fichier texte j'ai le problème suivant :
1) Avec la macro Remplace2 et le code : " Columns(t(i)).TextToColumns DecimalSeparator:="." "
j'ai l'erreur suivante : "Voulez vous remplacer le contenu des cellules de destination?"
2) Avec la macro Remplace3 qui démarre à partir de la ligne 11 de chaque colonne concernée, et le code : " Range(Cells(11, t(i)).Address, Cells(65000, t(i)).Address).TextToColumns DecimalSeparator:="." "
j'ai l'erreur suivante : "Aucune donnée à convertir a été sélectionnée"
voir fichiers ci-joints
Je suis bloquée par cette erreur et vous remercie par avance de votre aide.
Bien amicalement
KIM
 

Pièces jointes

  • VJF.zip
    40.6 KB · Affichages: 29

Pierrot93

XLDnaute Barbatruc
Re : Problème de séparateur décimal

Bonjour,

dans "remplace2", si tu modifies la méthode "opentext" ainsi :
Code:
   Workbooks.OpenText Filename:=NomFichierTxt, Origin:=xlWindows, StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
    Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 2), Array(5, 2), _
    Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
    Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), _
    Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1)), _
    DecimalSeparator:=".", TrailingMinusNumbers:=True

tu devrais pourvoir supprimer ceci :
Code:
   Dim t() As Variant, i As Byte
    t = Array(2, 6, 12, 13, 14, 15, 16)
    For i = 0 To 6
        Columns(t(i)).TextToColumns DecimalSeparator:="."
'    Range(Cells(11, t(i)).Address, Cells(65000, t(i)).Address).TextToColumns DecimalSeparator:="."

    Next i

enfin, me semble t'il, si j'ai bien compris, pas sûr..

bon après midi
@+
 

Discussions similaires

Réponses
1
Affichages
381

Statistiques des forums

Discussions
315 108
Messages
2 116 278
Membres
112 711
dernier inscrit
EBEUR