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

C++Builder Discussion :

Mise en forme Excel [FAQ]


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut Mise en forme Excel
    Salut à tous !

    dans mon projet actuel, je crée un fichier .csv que j'ouvre tout de suite
    avec excel (merci à la FAQ ) seulement j'ai un petit problème de mise
    en forme ! Il faut que ma première colonne soit au format texte et non au
    format nombre. J'arrive parfaitement à modifier le format après ouverture
    mais c'est déjà trop tard. Il faudrait donc que j'ouvre une feuille vide, que
    je modifie le format de la colonne puis importe mon fichier .csv ?

    Mais j'ai du mal avec cette importation. Une idée

    Merci

  2. #2
    Membre averti Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activité : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Points : 315
    Points
    315
    Par défaut
    Pourquoi ne pas passer directement avec le fichier excel sans faire de fichier .csv
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    en fait, dans la version précédente de mon soft je créais un fichier texte.
    Aujourd'hui j'ai besoin de passer sous excel. Et comme je ne voulais pas
    modifier tout le code d'écriture du fichier, j'ai simplement rajouter un séparateur
    ";". Je suis un peu fainéant
    Mais certaines lignes contiennent des nobres sous forme 0xxxx et j'ai besoin
    de conserver le 0.

    Voilà

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Personnellement j'utilise des fichiers csv sous Excel et ceux ci s'ouvrent correctement il y a des colonnes de texte et des colonnes de nombres donc rien ne t'empeche de modifier le format d'une colonne apres le chargement de ton fichier
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par blondelle
    Personnellement j'utilise des fichiers csv sous Excel et ceux ci s'ouvrent correctement il y a des colonnes de texte et des colonnes de nombres donc rien ne t'empeche de modifier le format d'une colonne apres le chargement de ton fichier
    en fait imaginons que mon fichier contienne la valeur 0123456, lors
    de l'ouverture de Excel, il me met la valeur 123456 dans la cellule A1
    et après c'est trop tard je ne peux retrouver mon 0123456, même après
    modification du format

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Je ne vois pas l'importance du zero devant le nombre.
    Cepandant tu peut changer le format avec le format personnalisee d'Excel
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    le nombre correspond à un numéro de licence, les deux premiers chiffres désignant le N° du département. Pour l'ain par exemple, cela donne 01xxxxxx
    si on enlève le 0, cela ne correspond plus.

    Mon problème c'est que lors de l'ouverture du fichier Excel, celui-ci supprime le 0 et après même avec tous les formats que je veux, il m'est impossible de le récupérer.

    Je viens d'essayer de rajouter le " ' " devant mes valeurs de mon fichier CSV mais ça ne fonctionne pas mieux

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Si dans ta chaine de nombre tu a une valeur constante de caracteres tu peux utiliser le format d'Excel decrit precedemment je te joind une petite macro Excel si tu sais la readapter en bcb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 05/06/2006 par blondelle
    '
     
    '
        Range("A3").Select
        Selection.NumberFormat = "00000000"
    End Sub
    J'ai suppose que tu avais 8 chiffres deux pour le n° de departement 6 pour la cle
    si tu n'a qu'un chiffre pour le n° de departement le formatage te creera le zero manquant
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Merci blondelle pour la macro
    Malheureusement le nombre de chiffre peut varier et je ne le connais pas !!!!

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Avant de charger ton fichier des que tu a selectionne ton instance Excel et avant de charger ton fichier sur la feuille declare ta colonne de chiffres en format texte tu peux faire un essai de calcul sur une autre cellule comme Excel gere des variants ca ne le gene pas du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 05/06/2006 par blondelle
    '
     
    '
        Columns("B:B").Select
        Selection.NumberFormat = "@"
    End Sub
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    J'ai trouve ca dans la FAQ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Comment récupérer un objet correspondant à la ligne/colonne complète à laquelle appartient un groupe de cellules ? [haut] 
     
    auteur : Superstivix 
    Nous allons travailler sur le Variant vCell correspondant à la cellule.
     
    Variant vCol, vRow;
    vRow = vRange.OlePropertyGet("EntireRow");
    vCol = vRange.OlePropertyGet("EntireColumn");
    et ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Comment définir le format des données pour une cellule ou un groupe de cellules ? [haut] 
     
    auteur : Ricky81 
    Plaçons nous par exemple au niveau d'une cellule définie par le Variant vCel.
     
    vCel.OlePropertySet("NumberFormat", vValue);
    Le Variant vValue correspond à une chaîne de caractères définissant le format (par exemple "Standard", "0,00", "@" pour texte, "jj, mm, aaaa", ...).
    Attention : certains formats (par exemple "jj, mm, aaaa") dépendent de la langue utilisée par Excel.
     
    Astuce : Décrivez votre format dans Excel pour une cellule (par exemple la première, puis récupérer le avec le code suivant) :
     
    ShowMessage(vCell.OlePropertyGet("NumberFormat"));
    essai de voir ce que tu peux faire avec sinon quelqu'un connaissant Excel pou bcb pourra te donner un exemple moi je ne suis pas asse bon pour cela
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Merci blondelle de ton aide

    C'est bien ce que je fais pour modifier le format de ma colonne complète . Mon seul soucis reste d'éxecuter cela avant de charger mon fichier.

    Et pour le moment

    Mais je vais y arriver Peut-être en céant une worksheet vierge avec mes propriétés puis d'ouvrir mon fichier dans une autre et de copier les cellules. A ton avis ?

    Xav

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    tu devrais avoir quelque chose comme ceci a partir de " ExcelApplication1->Connect(); " tu insere ta mise au format texte de ta colonne
    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
     
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible",true);
    vMSExcel= Variant::GetActiveObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible",true);
    ExcelApplication1->Connect();
     
    ///////////
    // ici tu insere ta mise au format texte de ta colonne
    ///////////
     
    //Application.Dialogs(xlDialogOpen).Show
    //ExcelApplication1->OlePropertyGet->Get_Dialogs("Open");
     
    ///////////
    // a partir d'ici tu ouvre ton fichier
    //////////
     
    Variant FileFiltrer = StringToOleStr("Document Excel   (*.XLS)(*.XLS),*.XLS , Document CSV   (*.CSV)(*.CSV),*.CSV , Document TXT   (*.TXT)(*.TXT),*.TXT , TOUT Document   (*.*)(*.*),*.*");
    Variant Title = StringToOleStr("Ouverture De Fichier"); // titre à donner à la boite de dialogue
    Variant Multiselect = false;
    //-----------------------------------------------
    // ON SELECTIONNE LE FICHIER A OUVRIR AVEC LA BOITE DE DIALOGUE
    //-----------------------------------------------
    vFileName = ExcelApplication1->GetOpenFilename( FileFiltrer, vFilterIndex, Title, EmptyParam, Multiselect, 0);
    vXLWorkbooks= vMSExcel.OlePropertyGet("Workbooks");
    //-----------------------------------------------
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Merci blondelle je vais tester ça en le mettant à ma sauce
    Simplement je ne vois pas où le fichier est ouvert à la place du
    premier en gardant les formats C'est le ExcelApplication1 ?
    Quid de cette variable (un variant ???)

    Merci pour ton aide

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Dans le programme il ne manque que les declarations des variants.
    la premiere chose qui est faite c'est d'ouvrir Excel et d'afficher une feuille.
    Apres la commande ci apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ExcelApplication1->Connect();
    tu peux mettre ton code et apres tu poursuit avec les fonctions open dialog
    la fonction d'ouverture a une fonction filtre pour le TXT, CSV, XLS, ou tous fichiers et utilise la boite de dialog ouvrir
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Bon je pense que j'ai trouvé la solution à mon problème (enfin grâce au forum VBA)

    Il faut que j'utilise la fonction "OpenText" au lieu de "Open"
    Mon code est le suivant :

    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
     
    // Ouverture d'Excel et traitement du fichier
     Variant vXLWorkbooks, vXLWorkbook, vMSExcel;
     AnsiString vFileName = nf; //nom du fichier
     Variant vOrigin = 1; // = xlWindows format Windows (par défaut)
     Variant vStartRow = 1; // on commence à la 1ère ligne (par défaut)
     Variant vDataType = 1; // = xlDelimited format délimité (par défaut)
     Variant vTextQualifier = 1; // = xlTextQualifierDoubleQuote qualificateur de texte (par défaut)
     Variant vConsecutiveDelimiter = false; // pas de délimitateur consécutif
     Variant vTab = false; // pas délimitateur tab
     Variant vSemicolon = true; // délimitateur ";"
     Variant vComma = false; // pas délimitateur virgule
     Variant vSpace = false; // pas délimitateur espace
     Variant vOther = false; // pas délimitateur autre
     Variant vOtherChar = ""; // délimitateur Other non actif
     Variant vFieldInfo[3][2] = {{1,2},{2,2},{3,4}}; // { N° Colonne; Format } Texte = 2, Date JMA = 4
     
     
     vMSExcel = Variant::CreateObject("Excel.Application");
     vMSExcel.OlePropertySet("Visible", true);
     vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
     vXLWorkbook = vXLWorkbooks.OleFunction("OpenText", vFileName.c_str(), vOrigin, vStartRow, vDataType, vTextQualifier, vConsecutiveDelimiter, vTab, vSemicolon, vComma, vSpace, vOther, vOtherChar, vFieldInfo);
    Mon problème concerne le dernier paramètre : vFieldInfo
    L'aide VBA est la suivante :

    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
    47
    48
    49
    FieldInfo   Argument de type Variant facultatif. Tableau contenant des
    informations de redistribution pour les différentes colonnes de données.
    L'interprétation dépend de la valeur de l'argument DataType.
    
    Quand les données sont délimitées, cet argument est un tableau composé de
    tableaux à deux éléments qui spécifient chacun les options de conversion
    pour une colonne donnée. Le premier élément correspond au numéro de
    colonne (commençant à 1), et le second élément est l'une des constantes 
    xlColumnDataType répertoriées dans le tableau suivant, qui spécifient la manière dont la colonne est redistribuée.
    
    Constante Description 
    xlGeneralFormat Standard 
    xlTextFormat Texte 
    xlMDYFormat date MJA 
    xlDMYFormat date JMA 
    xlYMDFormat date AMJ 
    xlMYDFormat date MAJ 
    xlDYMFormat date JAM 
    xlYDMFormat date AJM 
    xlEMDFormat date EMD 
    xlSkipColumn non distribuée 
    
    Vous pouvez utiliser la constante xlEMDFormat uniquement si vous avez
    installé et sélectionné la prise en charge du chinois (Taïwan). La constante
    xlEMDFormat spécifie que les dates d'ères chinoises (Taïwan) sont utilisées.
    
    L'ordre des éléments de colonne peut être quelconque. S'il manque un 
    élément pour une colonne donnée dans les données d'entrée, la colonne est 
    redistribuée sur la base du paramètre Standard. L'exemple suivant montre 
    comment ne pas redistribuer la troisième colonne, comment redistribuer la 
    première colonne sous la forme de texte et les autres colonnes de données 
    source sur la base du paramètre Standard.
    
    Array(Array(3, 9), Array(1, 2))
    Si les données source possèdent des colonnes de largeur fixe, le premier 
    élément de chaque tableau à deux éléments spécifie la position du premier 
    caractère dans la colonne (sous la forme d'un nombre entier, le caractère 
    zéro étant le premier caractère). Le deuxième élément du tableau à deux 
    éléments spécifie l'option de redistribution pour la colonne sous la forme d'un 
    nombre compris entre 1 et 9, comme indiqué dans le tableau précédent.
    
    L'exemple suivant montre comment redistribuer deux colonnes provenant d'un 
    fichier texte de largeur fixe. La première colonne comprend les caractères 1 à 
    10. Les caractères 11, 12, 13, 14 et 15 ne sont pas redistribués. La deuxième
    colonne contient le caractère 16 ainsi que tous les caractères suivants sur la 
    ligne.
    
    Array(Array(0, 1), Array(10, 9), Array(15, 1))
    J'ai donc essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Variant vFieldInfo[3][2] = {{1,2},{2,2},{3,4}};
    Mais j'ai une erreur sur ce param à l'ouverture d'Excel et pas à la compilation

    Quelqu'un aurait une idée ??

    Merci d'avance

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Points : 93
    Points
    93
    Par défaut
    Up

    Personne pour m'aider ?

Discussions similaires

  1. Outputquery et mise en forme excel
    Par devdev dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/04/2009, 17h30
  2. mise en forme Excel en vb.net
    Par skaraa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/03/2009, 12h55
  3. [A-03] Mise en forme Excel dans macro access
    Par elfiestador dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/02/2009, 12h15
  4. mise en forme excel
    Par roico dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/05/2007, 12h36
  5. Mise en forme EXCEL pendant exportation ACCESS
    Par Mr White dans le forum Access
    Réponses: 3
    Dernier message: 03/01/2006, 16h35

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