Format numérique de présentation

Unusual

XLDnaute Nouveau
Bonjour,

Je créé un fichier XLS à partir d'une application Delphi en me basant sur un modèle Excel (*.XLT). Une macro doit se charger de la présentation finale (réorganisation suivant le type des lignes et présentation dans un certain format).

Le fichier résultant doit être un fichier de type CSV (séparateur ;) et les nombres doivent avoir pour séparateur numérique un point (et non une virgule). Comme je ne voudrais pas si possible changer le séparateur décimal au niveau de la configuration de Windows ou d'Excel, je me demande si cela est possible d'appliquer à une plage de cellules un format de ce type (qu'importe si excel le considère comme numérique ou pas) afin de pouvoir enregistrer le fichier CSV comme attendu.

Dans l'exemple très simple joint, la macro a déjà été jouée et la présentation est satisfaisante hormis le séparateur décimal.

Ex : 1,235 au lieu de 1.235
12,34 au lieu de 12.34

Le nombre de décimales peut être variant et il ne faut pas arrondir les valeurs présentes...

Merci à l'avance pour toute aide ou conseil...et bonne année 2006 à tous. [file name=test1_20060102104845.zip size=9982]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test1_20060102104845.zip[/file]
 

Pièces jointes

  • test1_20060102104845.zip
    9.7 KB · Affichages: 16

Creepy

XLDnaute Accro
Bonjour le Forum, Unusual,

Si j'ai bien compris dans ton fichier final il faut remplacer les , par des ., alors que les séparateurs de ton fichier CSV sont aussi des .

La solution la plus simple est :
1 - Importer ton CSV en l'état
2 - Convertir les colonnes en format texte
3 - Remplacer les , par des . pour chaques colonnes.

Bon je suis pas bien sûr de la question, mais je crois que c'estce que tu veux.

@+

Creepy
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Unusual, Creepy, le forum

Sinon, une solution VBA

Cordialement, A+

Code:
Option Explicit
Sub Export_Csv()
    'variables
    Dim Nom_Fichier As String, Titre_Box As String
    Dim Test_Fichier As Integer, Compteur As Long
    'désactive les messages d'alerte
    Application.DisplayAlerts = False
    'ferme le canal en cas d'erreur
    On Error GoTo Gere_Erreurs
    'paramètres d'enregistrement du fichier
    Titre_Box = 'Enregistrement du fichier Csv'
    Nom_Fichier = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, '.')) & 'csv'
    'boucle des paramètres d'enregistrement
    Do
        Test_Fichier = 0
        Nom_Fichier = Application.GetSaveAsFilename(Nom_Fichier, FileFilter:='Fichiers Csv (*.Csv),*.Csv', Title:=Titre_Box)
        If Not (Dir$(Nom_Fichier, vbNormal) = '') Then Test_Fichier = MsgBox(LCase(Nom_Fichier) & ' existe déja' & Chr(10) & 'en date du ' & DateValue(FileDateTime(Nom_Fichier)) & Chr(10) & 'voulez vous l'écraser ?', vbYesNo + vbQuestion)
        If Test_Fichier = 7 Then Titre_Box = 'Redéfinissez le nom d'enregistrement'
        If Test_Fichier = 6 Then Kill Nom_Fichier
        If Nom_Fichier = 'Faux' Then MsgBox 'Fichier non enregistré !', vbOKOnly + vbExclamation: Sheets(1).Activate: Exit Sub
    Loop While Test_Fichier = 7
    'écriture du fichier
    Open Nom_Fichier For Output As #1
        For Compteur = 1 To Range('A65536').End(xlUp).Row
            Print #1, Replace(Cells(Compteur, 1) & ';' & Cells(Compteur, 2) & ';' & Cells(Compteur, 3) & ';' & Cells(Compteur, 4) & ';' & Cells(Compteur, 5) & ';' & Cells(Compteur, 6).Value, ',', '.')
        Next Compteur
Gere_Erreurs:
    Close #1
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re bonjour

pour agir sur la feuille active uniquement

A+
Code:
Sub Virgule_en_point()
    Dim Cel_Ref As Range, Plage_Ref As Range
    Set Plage_Ref = Columns('D:F').SpecialCells(xlCellTypeConstants, 23)
    Plage_Ref.NumberFormat = '@'
    For Each Cel_Ref In Plage_Ref
    Cel_Ref.Value = Replace(Cel_Ref.Text, ',', '.')
    Next Cel_Ref
End Sub
 

Unusual

XLDnaute Nouveau
Tout d'abord ...merci à Creepy et à Yeahou...

Grâce à votre aide, je suis sur la voie...j'ai adapté le code des dernières réponses pour avoir la sauvegarde et le remplacement voulu (',' par '.')car les colonnes ne sont pas régulières mais...

car il y a un mais...il subsiste 2 pb :

- J'ai des lignes en trop et des colonnes en trop dans le fichier CSV

- Lorsque la ',' est substituée par un '.' dans les numériques, le séparateur ';' est substitué par une ',' dans le fichier CSV comme vous pourrez le voir dans le fichier joint... :( [file name=test_20060102161157.zip size=11135]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20060102161157.zip[/file]
 

Pièces jointes

  • test_20060102161157.zip
    10.9 KB · Affichages: 11
U

Unusual

Guest
Oups...le voilà ! [file name=test_20060102163419.zip size=15470]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20060102163419.zip[/file]
 

Pièces jointes

  • test_20060102163419.zip
    15.1 KB · Affichages: 14

Unusual

XLDnaute Nouveau
Evidemment, mon fichier à générer ne correspondait pas à un fichier CSV traditionnel, donc cela a posé qq problèmes...mais c'est résolu !

Merci à ceux qui suivi ce fil et m'ont aidé dans ma recherche...Je dois avouer que j'ai trouvé la solution surtout grâce à Yeahou...Merci beaucoup ;)
 

Unusual

XLDnaute Nouveau
Le bout de code pour ceux que cela intéresse est disponible sur demande (je ne sais pas pourquoi mais quand je copie le bout de code dans le texte ci-dessous avec les balises adéquates, je ne peux poster la réponse, cela échoue systématiquement alors qu'en prévisualisation cela marche sans problème...)
 

Discussions similaires

Réponses
7
Affichages
2 K

Statistiques des forums

Discussions
312 493
Messages
2 088 952
Membres
103 989
dernier inscrit
jralonso