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 :

gestion congés avec fichier xls


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut gestion congés avec fichier xls
    bonjour a tous !

    voila ça fait pres de 4 ans que j'ai pas programmer en c++ et j'ai besoin de vous pour me remettre sur pied !

    je vous met dans le contexte et si vous pouviez me donner des idées vers quoi me diriger se serai cool.

    J'ai un calendrier au format xls (ou csv) qui correspond a mon planning des jours travailler pour 2007. Je voudrais faire un programme qui utiliserai ce calendrier et grace auquel j'indiquerai mes jours de congés. Une fois mes "vacances" posées le programme se chargerai de faire la modification sur ce fichier xls (ou csv).

    Mon gros soucis est que pour le moment je ne vois pas comment utiliser ce fichier dans mon programme et par la suite faire l'enregistrement.

    je vous joint le fichier xls (et sa legende) au format pdf.

    Pourquoi le faire en c++ et ne pas creer une macro sous excel ?

    Je trouve le c++ largement mieux, et les macro je ne les trouvent pas particulièrement simple a créer d'autant plus que par la suite je veux intégrer a mon programme les différents type de congés auxquels j'ai droit (pas loin de 6 type différents au sein de mon entreprise) et faire le décompte de mes droits au fur et a mesure. Et d'autre part la programmation me manque énormément et faire ce programme me permettrais de me remettre sur pied.

    En espérant que vous pourrez m'aider (il va de soi que je ne veux pas que vous me fassiez tout le programme, mais juste m'indiquez des pistes)

    A bientôt Didou

    ps : a moins que j'arrive a créer un algo me permettant de generer le calendrier automatiquement en fonction de l'année puisque mes jours travailler sont fixes (4 jours du lundi au jeudi 2 semaines consécutive puis 5 jours du lundi au vendredi et enfin 4 jours du mardi au vendredi et on recommence a zero)

    pss : je voudrais gerer une contrainte, celle où tout le monde n'utilise pas excel (par exemple OpenOffice) je ne sais pas si cela est possible

    EDIT : j'ai remis le bon fichier pdf
    Images attachées Images attachées
    pas mal de connaissance en c/c++/mysql
    debute en php

  2. #2
    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
    Salut didou038:
    Tu veux donc modifier la fiche Excel par programme BCB, c'est possible il faut utiliser OleExcel il y a une aide dans la FAQ il y a aussi un tuto pour demarrer la je ne peu pas te donner les liens j'ai un probleme de navigateur mais fait une recherche sur C++.
    Si tu choisi cette solution ce sera aussi complexe sinon plus que les macro excel, poste les problemes que tu rencontrera au fur et a mesure on t'aidera
    A+
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    perso, j'ai jamais trouvé qu'Excel était une base de données...normal c'est un tableur

    Pourquoi ne pas t'orienter vers Access pour le stockage des données. D'autant que (si je ne m'abuse) tu n'aurais pas le soucis de portabilité. En effet, même si les users n'ont pas Access, tu pourras y accèder via le BDE (gestionnaire de base de données de BCB).

    voila, c'était un point de vue à caractère informatif.

    Si tu optes pour cette solution, je pourrais t'aider, en revanche, pour l'utilisation avancée d'Excel..ça va être plus délicat. Cependant, j'ai une classe ExcelOle que nous avons développé pour simplifier l'utilisation.
    Si ça t'intéresse...

    Bon courage

    Simon
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  4. #4
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    merci pour ces infos. je vois pas trop l'utilité d'une base de donnée pour mon probleme say, si tu peux m'eclairer ?

    je vais regarder dans la faq pour ole et m'installer excel ...

    merci a vous, des que j'ai un soucis je passerai vous en informer

    did
    pas mal de connaissance en c/c++/mysql
    debute en php

  6. #6
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    bah, c sur que l'utilité dans le cadre d'une utilisation limitée, suis sceptique.
    C'était plus dans le sens où Excel est un tableur uniquement à mon sens.

    Une évolution future du programme risque de remettre en cause une partie du développement pour pas grand chose.


    Avec une DB, ce serait moins le cas. par ailleurs, pour l'apprentissage...

    voilou, c tout
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    ok say !

    bon finalement je pars sur une autre approche dites moi si cela est gerable ou non.

    pour chaque mois je crée une GroupBox (janvier, fevrier etc ...) dans laquelle je crée le calendrier du mois correspondant (Jour et numero du jour) ainsi que pour chacun des jours 2 shapes (une indiquant si le jour est travailler ou non via des couleurs, et une pour les congés (couleur blanche-> pas de congé, verte->congé)

    j'ai plusieurs possibilité pour indiqué si le jour est un congé ou non :

    -1- soit à l'aide d'un clique sur la shape "congé du jour correspondant" et la une dialogBox s'ouvre m'indiquant ce que je veux faire de ce jour ou a partir de ce jour (l'utilisateur indique la date de fin)

    -2- soit a l'aide d'un bouton qui m'ouve une dialogBox et je choisi les jours de congés que je veux.

    Pour quelle solution opteriez vous ?

    L'inconvient de cet ensemble est que je suis obligé de creer chaque mois, jours etc et c'est tres fastidieux d'autant plus que je devrait tout recommencer en 2008. Est-il possible de créer tout cela de maniere automatique au lancement du programme, l'utilisateur choisi l'année et le programme créer le calendrier annuel seul ? Et que par la suite l'utilisateur puisse enregistrer ses congés dans un fichier et qu'il puisse les charger ?

    ça fait beaucoup de question je sais, mais comme ça fait un bye que j'ai pas programmé y'a pas mal de chose que j'ai oublié, soyez indulgent

    merci de votre aide

    ps: s'il vous faut des ecrans de se dont je vous ai parler pour une meilleure comprehension n'hesitez pas
    pas mal de connaissance en c/c++/mysql
    debute en php

  8. #8
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    Il existe le TCalendar qui gère le côté calendrier. Sinon perso, j'aurais fais des StringGrid de 2 colonnes, pour la date et l'annotation, par mois.

    La première méthode n'indique qu'un mois mais gère les jours de la semaine en fonction de l'année automatiquement.

    La seconde méthode est plus lisible pour l'utilisateur mais elle ne permet pas de gérer la date automatique.

    L'idéale est un mix des deux pour trouver le premier jour de l'année pour créer toi même un calendrier, à moins qu'il y ai des options permettant au TCalendar de gérer une année complète.

    Petit exemple:
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
        //déclaration des jours et mois
        char jours[7][10] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi" };
        char mois[12][10] = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre"};
     
        int        Mois;
        AnsiString CJour,CMois,CAnnee,CDate;
     
        //décriptage de la date
        TDateTime dtDate = Now();
     
        CDate = dtDate.CurrentDateTime();
        CJour = CDate.SubString(1,CDate.Pos('/')-1);
        CDate.Delete(1,CDate.Pos('/'));
        CMois = CDate.SubString(1,CDate.Pos('/')-1);
        CDate.Delete(1,CDate.Pos('/'));
        CAnnee = CDate.SubString(1,CDate.Pos(' ')-1);
     
        //recherche du premier jour de l'année
        int PremierJour = 0;
        while(CCalendar1->CellText[PremierJour][1] != "1")
        {
            PremierJour++;
        }
        if(PremierJour == 6) PremierJour++;   //adaptation lundi->dimanche
     
        Mois = StrToInt(CMois);
     
        CJour = jours[dtDate.DayOfWeek() - 1] + AnsiString(" ") + CJour;
        CMois = mois[Mois];
     
        //Affichage de la date
        Label1->Caption  = CJour + " " + CMois + " " + CAnnee;
     
        //déclaration du calendrier
        TStringGrid *GridMois[12];
     
        int j=PremierJour-1,
            k;
        for(k=0;k<12;k++)
        {
            GridMois[k] = new TStringGrid(this);
            GridMois[k]->Parent = Form1;
            GridMois[k]->Top  = 30;
            GridMois[k]->Left = k*(Screen->Width/12);
            GridMois[k]->ColCount = 2;
            GridMois[k]->Height = 15*32 + 1.1*32.0;
            if(k == 0 || k == 2 || k == 4 || k == 6 || k == 7 || k == 9 || k == 11)
                GridMois[k]->RowCount = 32;
            else if(k == 1)
                if(StrToInt(CAnnee)%4 == 0)  GridMois[k]->RowCount = 30;
                else                         GridMois[k]->RowCount = 29;
            else
                GridMois[k]->RowCount = 31;
            for(int i=0;i<GridMois[k]->RowCount;i++)
            {
                GridMois[k]->RowHeights[i] = 15;
                if(i!=0) GridMois[k]->Cells[0][i] = AnsiString(jours[j][0]) + " " + IntToStr(i);
                if(j++>5)j=0;
            }
            j--;
            GridMois[k]->Width = Screen->Width/12;
            GridMois[k]->ColWidths[0] = 30;
            GridMois[k]->ColWidths[1] = GridMois[k]->Width - 30 -6;
        }
    Tu colles un Label qui t'indique la date et un TCalendar pour t'indiquer le premier jour de l'année.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 55
    Points : 37
    Points
    37
    Par défaut
    merci bandit !

    par contre est-il possible d'appliquer differentes couleurs a differents jours dans TCalendar ? en gros mettre par exemple tous les samedi et dimanche en jaune, le reste en rose et les jours de congés en vert ? j'ai besoin de gerer ce systeme de couleurs afin d'avoir un aperçu global et rapide de la situation mensuelle/annuelle.
    pas mal de connaissance en c/c++/mysql
    debute en php

  10. #10
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Il est possible de colorer une ou plusieurs case du TCalendar, par contre c'est une méthode dérivée coloriant le Canvas du composant.
    Cette méthode est dérivée de celle utilisé pour personaliser un TStringGrid (méthode que tu peux trouver dans la FAQ). Par contre, cette méthode est utilisé dans l'évennement OnDrawCell du TStringGrid, de manière à code tous les changements de couleur dans cet évennement. Malheureusement cet évennement n'éxiste pas pour le TCalendar.
    Il faudra donc le faire manuellement à chaque changement du Canvas (un Refresh, un changement de cellule sélectionné ...)

    Fonction de coloration
    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
     
    void ColorCellule(TColor Couleur, int X, int Y)
    {
     
        AnsiString s2= Form1->CCalendar1->CellText[Y][X]; // Texte de la cellule.
     
        TRect Rect2;                                      //rectangle indiquant la position de la cellule
        Rect2.Top    = Form1->CCalendar1->Height/7*X-X;
        Rect2.Left   = Form1->CCalendar1->Width/7*Y;
        Rect2.Bottom = Form1->CCalendar1->Height/7*(X+1)-X-2;
        Rect2.Right  = Form1->CCalendar1->Width/7*(Y+1)-1;
     
        ((TStringGrid*)Form1->CCalendar1)->Canvas->Brush->Color = Couleur;
        ((TStringGrid*)Form1->CCalendar1)->Canvas->FillRect(Rect2); // On dessine le fond de la cellule.
        ((TStringGrid*)Form1->CCalendar1)->Canvas->Font->Color = clBlack;
        ((TStringGrid*)Form1->CCalendar1)->Canvas->TextRect(Rect2,  // On réaffiche le texte par dessus, car le FillRect l'a effacé.
                                     (Rect2.Right + Rect2.Left   - Form1->Canvas->TextWidth(s2)) / 2,
                                     (Rect2.Top+X-6   + Rect2.Bottom - Form1->Canvas->TextWidth(s2)) / 2,
                                      s2);
    }
    Exemple d'utilisation pour colorer les samedi et dimanche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
        //samedi et dimache sont colonnes 5 et 6
        int i;
        for(i=1;i<7;i++)
        {   //color les Samedi et Dimanche s'ils existent
            if(CCalendar1->CellText[5][i] != "")  ColorCellule(clYellow,i,5);
            if(CCalendar1->CellText[6][i] != "")  ColorCellule(clYellow,i,6);
        }
    }

Discussions similaires

  1. [CR 2011] Connexion avec fichier xls.x
    Par Louzemac dans le forum Connectivité
    Réponses: 1
    Dernier message: 29/08/2011, 21h32
  2. Charger une ListView avec fichier XLS
    Par Hobbi1 dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/11/2010, 20h32
  3. Fusion de fichiers .csv et comparaison avec fichier .xls
    Par GourenBZH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/04/2008, 14h15
  4. Mail avec fichiers .xls joints et qui ne le sont pas
    Par Bernard67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2008, 08h37
  5. Réponses: 7
    Dernier message: 29/06/2006, 12h33

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