Bonaberi.com Publicité
Forum Bonaberi.com
Le Cameroun comme si vous y étiez
FAQFAQ RechercherRechercher Liste des MembresListe des Membres Groupes d'utilisateursGroupes d'utilisateurs S'enregistrerS'enregistrer
ProfilProfil Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés ConnexionConnexion
concours codage (suite)
Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Forum Bonaberi.com Index du Forum -> Sciences & Loisirs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
lucaToni
Shabbaeur du lac


Inscrit le: 18 Jun 2008
Messages: 4021

MessagePosté le: Thu Nov 26, 2009 7:45 am    Sujet du message: Répondre en citant

unistern a écrit:

luki c'est bon le design. on wait seulement que ca waka Smile
bon j'ai été un peu vague dans la description de mon mini adresse.
je te donne encore un peu d'explication parce que a premiere vue on a l'impression qu#il nya pas grand chose à faire mais au fond il ya bien plus a implementer.

le mini adress book est coe son nom l'indique un repertoire d'adresse. mini parce que dans notre exemple ca n'inclu que 4 données (nom prenom pays et ville) en verité il en faut plus coe telephone , rue , boite postale, etc....

alors! hormis le GUI que faut il encore implementer en arriere plan?
il faut definir differentes classes.
une classe adresse qui contient les 4 differents attributs mentionnés ci dessus.
une classe organise_book qui propose des fonctions traitant les entrées d'une personne (ou d'un client) qui décide de s'enregistrer dans le répertoire d'adresse.

alors supossons qu'au départ le carnet d'adresse est vide.
x1 arrive et donne ses coordonnés (il entre ses donnés dans les champs de la fenetre GUI) , il faut dc que la classe adresse instance un nouveau objet et le delegue a la classe organise_book . cette derniere insere dc les donnes de x1 dans le dit repertoire (ici precisement la classe doit communiquer avec la banque de donné choisi) lui attribut un numero d'identification et prepare le repertoire pr l'arrive éventuel d'un prochain client x2. ( c'est ce qui ce passe quand on clique sur add Person)
pr le cas où x1 decide de remove ses données dans le book cest encore la classe organise_book qui s'en occupe. (c'est le cas lorskon clik sur delete Personne) .
intuitivement on déduit le reste pr les button lookup qui li les donnes dans la DB et delegue le resultat au GUI ou bien le button sort by name qui ordonne les clients du book par ordre alphabetique et affiche le resultat dans le GUI.
voila les fonctionalités a implementer derriere le GUI.
kkun coe Laurent fait tt ca en 2 minutes Laughing
lucatoni au niveau de lacces au database c'est là où hibernate entre en jeux.
meke si tu as encore les questions n'hesite pas stp

bon ce matin je viens de regarder un peu
je te donne les fichiers que j'ai deja

voici l'hibernate config :
http://www.megaupload.com/?d=FUPYSVGI

Voici la classe contact qui devrai faire exactement ce que fait la classe adresse dont tu parle
cette classe est generée automatiquement par le tool hibernate d'eclipse
file java :
http://www.megaupload.com/?d=EBEZYDHJ
file hbm :
http://www.megaupload.com/?d=CC98HTCE

la classe books est une classe que j'utiliser pour implementer les fonctions de " organise book " avec add , remove , update etc..
http://www.megaupload.com/?d=HVKBYVEK

voici un zip de tout le projet java avec toutes les classes
java et flex
http://www.megaupload.com/?d=7RRNB2BY
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Envoyer un e-mail Visiter le site web de l'utilisateur Yahoo Messenger MSN Messenger
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Thu Nov 26, 2009 6:57 pm    Sujet du message: Répondre en citant

lucaToni a écrit:
unistern a écrit:

luki c'est bon le design. on wait seulement que ca waka Smile
bon j'ai été un peu vague dans la description de mon mini adresse.
je te donne encore un peu d'explication parce que a premiere vue on a l'impression qu#il nya pas grand chose à faire mais au fond il ya bien plus a implementer.

le mini adress book est coe son nom l'indique un repertoire d'adresse. mini parce que dans notre exemple ca n'inclu que 4 données (nom prenom pays et ville) en verité il en faut plus coe telephone , rue , boite postale, etc....

alors! hormis le GUI que faut il encore implementer en arriere plan?
il faut definir differentes classes.
une classe adresse qui contient les 4 differents attributs mentionnés ci dessus.
une classe organise_book qui propose des fonctions traitant les entrées d'une personne (ou d'un client) qui décide de s'enregistrer dans le répertoire d'adresse.

alors supossons qu'au départ le carnet d'adresse est vide.
x1 arrive et donne ses coordonnés (il entre ses donnés dans les champs de la fenetre GUI) , il faut dc que la classe adresse instance un nouveau objet et le delegue a la classe organise_book . cette derniere insere dc les donnes de x1 dans le dit repertoire (ici precisement la classe doit communiquer avec la banque de donné choisi) lui attribut un numero d'identification et prepare le repertoire pr l'arrive éventuel d'un prochain client x2. ( c'est ce qui ce passe quand on clique sur add Person)
pr le cas où x1 decide de remove ses données dans le book cest encore la classe organise_book qui s'en occupe. (c'est le cas lorskon clik sur delete Personne) .
intuitivement on déduit le reste pr les button lookup qui li les donnes dans la DB et delegue le resultat au GUI ou bien le button sort by name qui ordonne les clients du book par ordre alphabetique et affiche le resultat dans le GUI.
voila les fonctionalités a implementer derriere le GUI.
kkun coe Laurent fait tt ca en 2 minutes Laughing
lucatoni au niveau de lacces au database c'est là où hibernate entre en jeux.
meke si tu as encore les questions n'hesite pas stp

bon ce matin je viens de regarder un peu
je te donne les fichiers que j'ai deja

voici l'hibernate config :
http://www.megaupload.com/?d=FUPYSVGI

Voici la classe contact qui devrai faire exactement ce que fait la classe adresse dont tu parle
cette classe est generée automatiquement par le tool hibernate d'eclipse
file java :
http://www.megaupload.com/?d=EBEZYDHJ
file hbm :
http://www.megaupload.com/?d=CC98HTCE

la classe books est une classe que j'utiliser pour implementer les fonctions de " organise book " avec add , remove , update etc..
http://www.megaupload.com/?d=HVKBYVEK

voici un zip de tout le projet java avec toutes les classes
java et flex
http://www.megaupload.com/?d=7RRNB2BY


gars je vois Very Happy
bon j'ai pas reussi a faire marcher ton truc chez moi localement
je suis allé chez http://alpanko.s210.eatj.com/book/web/AdressBook.html
parrait que ton account a éte suspendu dc pas moyen de tester ca aussi la bas.
-dans ton zip il manque les bib du build path
j'utilise glassfish comme serveur chez moi et non pas tomcat
dc il faudrait que ton code soit capable de generer un log4j pr un serveur quelconque.
une autre remarque est que tu introduit plus de fonctions qu'il ne le faut
(ps c'est juste un mini adressbook que je voulais Very Happy )

gars envoi moi all les lib de la build path j'ai falla certaines sur le net mais
il manque mime4j dc la structure du package ne correspond pas avec celle de ton code.
dans ton code

Code:

import org.mime4j.BodyDescriptor;
import org.mime4j.ContentHandler;
import org.mime4j.MimeStreamParser;
import org.mime4j.decoder.Base64InputStream;


sur le net

Code:
import org.apache.james.mime4j.descriptor.BodyDescriptor;
import org.apache.james.mime4j.parser.AbstractContentHandler;
import org.apache.james.mime4j.parser.MimeStreamParser;
import org.apache.james.mime4j.codec.Base64InputStream;


le mieux c'est que tu relance ton account et on teste ca.
une derniere remarque pas importante mais bon ca peut aider kkun d'autre
Code:
        <property>org.hibernate.dialect.MySQLDialect</property>

ca c'est le dialect de mysql version <5x
dc il manque le 5 pr les versions suivantes
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sean



Inscrit le: 15 May 2008
Messages: 103
Localisation: road to zion

MessagePosté le: Thu Nov 26, 2009 10:14 pm    Sujet du message: Répondre en citant

salut tout le monde
une petite question concernant communication entre socket
j'implémente une appli , et je souhaite qu'un client envoi une structure a un autre client , or les send et sendto() ,ne fonctionne qu'avec les carractères
vous avez une methode svp (hors celle de concaténer tous les elements de la structure ?)
_________________

the heartBeat..
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Sat Nov 28, 2009 8:06 pm    Sujet du message: Répondre en citant


amato j'ai fait ton truc today
je ne te cache pas que c'était trop facile du pure Baba quoi.
quoique je te conseillerais de changer de langage de programmation quand tu veux travailler avec les fichiers . j'ai trouvé c trop primitifs a mon gout.
un pareil exercice en java me prend kk 5 lignes.
vive la POO Razz Very Happy
j'ai commenté le code mais néamoins si t'as des questions fait moi signe


Code:


/*
 * amato_project number 1
 *
 *  Created on: 28.11.2009
 *      Author: Unistern le Gangster
 *      eclipse CDT
 */

#include <stdio>
#include <stdlib>
#include <string>

//nbre de ligne dans le fichier a traiter
int max_line =0;

// precise la location du fichier ici
static const char file[] = "file.txt";

//fichier resultat
static const  char *resultFile = "resultat.txt";


/**
 * comme son nom l'indique
 */
int nb_lignes (const char*)
{
     FILE*fp ;
        if((fp=fopen(file, "r"))==NULL)
        {
              perror("Failed to open file ");
                 return EXIT_FAILURE;
           }
  int n=0, c;

  while ((c = fgetc(fp)) != EOF)
  {

    if (c == '\n')
    {
      n++;
    }
  }
  fclose(fp);
  return n;
}


// write ls 2 premieres lignes du fichier a traiter dans le fichier resultat

int write_2_line(FILE* res)
{
   // on ouvre le fichier a traiter  en mode lecture
      FILE *pFile;
         if((pFile=fopen(file, "r"))==NULL)
         {
               perror("Failed to open file ");
                  return EXIT_FAILURE;
            }

         char *ReturnCode;
         char  Data[80];
         int k=0;
        while(ReturnCode=fgets(Data, 80, pFile))
        {
           fprintf(res, "%s", ReturnCode);
           k++;

           if(k==2) break;

        }
        fclose(pFile);

}


int main ()
{
   max_line = nb_lignes(file);

   FILE *fp;
   //un fichier est crée de tt facon s'il n'en existe pas
   if((fp=fopen(resultFile, "w"))==NULL)
     {
         perror("Failed ");
            return EXIT_FAILURE;
      }
   //ecrit les deux 1ere ligne dans le fichier resultat.txt
write_2_line(fp);


//quel est le nombre de Mn, Cu, Ni, Si dont la coordonnée-Z
//est entre 0 et 6 ou 340 et 346.
    int nbrCu=0, nbrMn=0, nbrNi=0, nbrSi=0;

     nbrCu= fonction(file,'C');
     printf("nbrCu: %i \n", nbrCu);

    fprintf(fp,"%s %d \n","Cu: ", nbrCu); /*writes*/

     nbrSi = fonction(file,'S');
     printf("    nbrSi: %i \n",    nbrSi);

    fprintf(fp,"%s %i \n","Si: ", nbrSi); /*writes*/

      nbrMn = fonction(file,'M');
        printf("nbrMn: %i \n", nbrMn);

       fprintf(fp,"%s %i \n","Mn: ", nbrMn); /*writes*/

     nbrNi = fonction(file,'N');
        printf("nbrNi: %i \n", nbrNi);

       fprintf(fp,"%s %i \n","Ni: ", nbrNi); /*writes*/


fclose(fp);
    return 0;

 }



fichier.txt
Code:

18920
9.6e+09 1.68001e+07 1.68356e+07 1.68001e+07
Mn 1.438000 1.438000 1.438000
Ni 1.438000 1.438000 53.205999
Si 2.876000 2.876000 69.023998
Ni 1.438000 1.438000 145.237996
Mn 2.876000 2.876000 345.119991
Mn 1.438000 4.314000 1.438000
Si 2.876000 5.752000 51.767999
Ni 1.438000 4.314000 113.601997
Si 2.876000 5.752000 126.543997
Ni 1.438000 4.314000 220.013994
Ni 1.438000 4.314000 329.301992
Mn 2.876000 5.752000 345.119991
Mn 1.438000 7.190000 1.438000
Ni 2.876000 8.628000 92.031998
Ni 1.438000 7.190000 142.361996
Cu 1.438000 7.190000 173.997996
Mn 2.876000 8.628000 345.119991
Mn 1.438000 10.066000 1.438000
Mn 2.876000 11.504000 2.876000
Ni 2.876000 11.504000 109.287997


resultat.txt
Code:

18920
9.6e+09 1.68001e+07 1.68356e+07 1.68001e+07
Cu:  0
Si:  0
Mn:  8
Ni:  0

Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Sat Nov 28, 2009 8:27 pm    Sujet du message: Répondre en citant

désolé mais le parseur du forum est defect
je vais te send le code de la fonction principale d'une autre facon
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Sat Nov 28, 2009 8:43 pm    Sujet du message: Répondre en citant

Code:


//fonction principale chargee du traitement et comptage
int fonction( const char*, char c)
  {

   int total=0;
     FILE*fp ;
     if((fp=fopen(file, "r"))==NULL)
     {
        perror("Failed to open file ");
           return EXIT_FAILURE;
     }

         // exit(1);
      char  Data[80];
   char *ReturnCode;
   int count=0, i=0, j=0;
   double *vect = (double*)malloc(4*sizeof(double));
   int k=0;
   double Z=0;  // la coordonee Z

      while(ReturnCode=fgets(Data, 80, fp))
   {
      k++;
      //on saute les 2 premieres lignes
      if(k>2)
   {
         char* pEnd;
         char *newChar = ReturnCode+2;
         //cette superbe fonction recupere les string et
         // et les convertie en primitive de type double
      vect[count]= strtod(newChar,&pEnd);
       ++count;

      while((*pEnd!='\n'))  // hier wird '\n' benutzt
        {
         vect[count]= strtod(pEnd,&pEnd);

               //la place de la partie qui derange
                ++count;
        }
      
      count =0;
      if(k>= max_line)
      {
              return total;            
      }
   }
   }  // end while
//LIBERATION de MEMOIRE
       free(vect);
       fclose(fp);
  }



la partie qui derange
Code:

 if(count==2 and  ReturnCode[0]==c)    {
Z= vect[count];
    if  Z greater than 0 and  Z less than  6
 total=total+1;                  
       if Z greater than 340 and  Z less than 346   
total=total+1;   
 break;
    }
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
amatoyoshi
Shabbaeur du lac


Inscrit le: 04 Jun 2008
Messages: 4323
Localisation: ad Dominum

MessagePosté le: Tue Dec 01, 2009 9:59 pm    Sujet du message: Répondre en citant

Mille Mercis Unistern ...
Je commençais déjà à désespérer.

Je vais l'essayer demain et je te tiendrai au courant.

Je sais que c'est un programme très très facile. C'est juste que je suis un vrai débutant et je ne voulais pas passer trop de temps dessus.

Encore merci.

a.S.

_________________
Aperi, Dómine, os meum ad benedicéndum nomen sanctum Tuum.
Munda quoque cor meum ab ómnibus vanis, pervérsis et aliénis cogitatiónibus.
Intelléctum illúmina, afféctum inflámma.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
----



Inscrit le: 15 May 2008
Messages: 363
Localisation: Kinshasa

MessagePosté le: Fri Dec 04, 2009 12:24 am    Sujet du message: Répondre en citant

unistern a écrit:

amato j'ai fait ton truc today
je ne te cache pas que c'était trop facile du pure Baba quoi.
quoique je te conseillerais de changer de langage de programmation quand tu veux travailler avec les fichiers . j'ai trouvé c trop primitifs a mon gout.
un pareil exercice en java me prend kk 5 lignes.
vive la POO Razz Very Happy
j'ai commenté le code mais néamoins si t'as des questions fait moi signe


Code:


/*
 * amato_project number 1
 *
 *  Created on: 28.11.2009
 *      Author: Unistern le Gangster
 *      eclipse CDT
 */

#include <stdio>
#include <stdlib>
#include <string>

.
.
.



Mbom, Pourquoi n'utilises tu
pas la classe "fstream" ? Neutral
Ca simplifierait au moins par 5
le code ...
_________________
_---|---_
_-------_
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger
----



Inscrit le: 15 May 2008
Messages: 363
Localisation: Kinshasa

MessagePosté le: Fri Dec 04, 2009 12:38 am    Sujet du message: Répondre en citant

sean a écrit:
salut tout le monde
une petite question concernant communication entre socket
j'implémente une appli , et je souhaite qu'un client envoi une structure a un autre client , or les send et sendto() ,ne fonctionne qu'avec les carractères
vous avez une methode svp (hors celle de concaténer tous les elements de la structure ?)



As tu deja essaye de serialiser/deserialiser les objects dont
tu veux envoyer ?
_________________
_---|---_
_-------_
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Fri Dec 04, 2009 1:51 pm    Sujet du message: Répondre en citant

amatoyoshi a écrit:
Mille Mercis Unistern ...
Je commençais déjà à désespérer.

Encore merci.

a.S.

de rien amato. pkoi desesperé? lol Very Happy


amatoyoshi a écrit:

Je vais l'essayer demain et je te tiendrai au courant.

Je sais que c'est un programme très très facile. C'est juste que je suis un vrai débutant et je ne voulais pas passer trop de temps dessus.

a.S.

dis moi je pensais que c'etait juste un programme qui devais t'aider dans ton boulot. ou bien tu es encore étudiant et tu apprends le c? Shocked
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Fri Dec 04, 2009 1:54 pm    Sujet du message: Répondre en citant

---- a écrit:
unistern a écrit:

amato j'ai fait ton truc today
je ne te cache pas que c'était trop facile du pure Baba quoi.
quoique je te conseillerais de changer de langage de programmation quand tu veux travailler avec les fichiers . j'ai trouvé c trop primitifs a mon gout.
un pareil exercice en java me prend kk 5 lignes.
vive la POO Razz Very Happy
j'ai commenté le code mais néamoins si t'as des questions fait moi signe


Code:


/*
 * amato_project number 1
 *
 *  Created on: 28.11.2009
 *      Author: Unistern le Gangster
 *      eclipse CDT
 */

#include <stdio>
#include <stdlib>
#include <string>

.
.
.



Mbom, Pourquoi n'utilises tu
pas la classe "fstream" ? Neutral
Ca simplifierait au moins par 5
le code ...

euh .. zut c'est vrai mais je me disais qu'il voulait du typiquement c
fstream ne serait-ce pas déja c++?
au fait on ne te vois plus trop par ici ancien tu es sur kel dur projet coe ca ? Very Happy
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
meke
Bérinaute Vétéran


Inscrit le: 16 May 2008
Messages: 5079
Localisation: france

MessagePosté le: Fri Dec 04, 2009 6:13 pm    Sujet du message: Répondre en citant

unistern, (ou tous les autres informaticiens là)
est ce que tu t'y connais en programation VBA sur excel? j'ai un petit souci avec un outil que je construis qui marchait meme bien il ya 2semaines mais maintenant il bug car j'ai ajouté 2éléments et j'aimerai comprendre le bug Wink Wink ...

_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Waddle



Inscrit le: 12 May 2008
Messages: 17412

MessagePosté le: Fri Dec 04, 2009 6:51 pm    Sujet du message: Répondre en citant

meke a écrit:
unistern, (ou tous les autres informaticiens là)
est ce que tu t'y connais en programation VBA sur excel? j'ai un petit souci avec un outil que je construis qui marchait meme bien il ya 2semaines mais maintenant il bug car j'ai ajouté 2éléments et j'aimerai comprendre le bug Wink Wink ...

Gars j'ai fait un tout petit peu de VBA pour Excel a l'époque mais bon...

Dis toujours...
_________________
la vie c'est le ludo. Parfois tu peux jouer un, parfois tu peux jouer deux chaines quatre comme ca...

Allez visiter mon blog:

Mon blog
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
meke
Bérinaute Vétéran


Inscrit le: 16 May 2008
Messages: 5079
Localisation: france

MessagePosté le: Fri Dec 04, 2009 7:37 pm    Sujet du message: Répondre en citant

Waddle a écrit:
meke a écrit:
unistern, (ou tous les autres informaticiens là)
est ce que tu t'y connais en programation VBA sur excel? j'ai un petit souci avec un outil que je construis qui marchait meme bien il ya 2semaines mais maintenant il bug car j'ai ajouté 2éléments et j'aimerai comprendre le bug Wink Wink ...

Gars j'ai fait un tout petit peu de VBA pour Excel a l'époque mais bon...

Dis toujours...


oke waddle, merci.
je mettrai ça là ce soir lorsque je back car là je suis epuisée et je sens que je passerai mon week dessus....je pense que c'est même une erreur bête ,surement de variable mais je n'arrive pas à voir..bref je mets ça ce soir

_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
----



Inscrit le: 15 May 2008
Messages: 363
Localisation: Kinshasa

MessagePosté le: Fri Dec 04, 2009 11:46 pm    Sujet du message: Répondre en citant

unistern a écrit:

...
euh .. zut c'est vrai mais je me disais qu'il voulait du typiquement c
fstream ne serait-ce pas déja c++?
au fait on ne te vois plus trop par ici ancien tu es sur kel dur projet coe ca ? Very Happy


C la life ki est brutal bom
_________________
_---|---_
_-------_
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Yahoo Messenger MSN Messenger
meke
Bérinaute Vétéran


Inscrit le: 16 May 2008
Messages: 5079
Localisation: france

MessagePosté le: Sat Dec 05, 2009 2:50 am    Sujet du message: Répondre en citant

Bon waddle, pour que tu comprennes ,il faut que je t’explique un peu ce que je veux faire.
Comme je l’ai déjà dit le programme marchait bien ,c’est parce que je voulais enlever un paramètre qu’il a commencé à buguer. Dc le souci ne vient pas des formule je pense ,mais plutôt de la variable..(enfin je pense)

Bon déjà l’outil en question sert à faire le calcul des provisions mathématiques par rapport aux assurés.

Le fichier excel est composé de 4 feuilles :

la première feuille (DateCalcul) contient juste la valeur de la date à laquelle le calcul des provisions doit avoir lieu

la deuxième feuille (données) regroupe juste les valeurs des chargements, les pourcentages du capital pour chaque tranche d’age : (bref tu n’auras même pas besoin de ça car le pb ne se situe pas au niveau des calculs)

la troisième feuille (F_Tables) regroupe les différentes tables de mortalités)

la quatrième (Assuré) regroupe les différents assurés pour lesquels on cherche à calculer les provisions mathématiques :
pour chaque assuré on a identifiant,le nom, le sexe, la date de naissance, la capital et une colonne pour les provisions mathématiques.
Ces provisions sont remplies une fois qu’on clique sur le bouton de commande "lancer le calcul" qui se trouve dans cette feuille.
Une fois que tu cliques sur le bouton de commande, tu as la userform « saisie des paramètres » qui apparait. Je ne l’ai pas posté ici car je ne sais pas comment faire pour mettre cet image là,même avec l’impression d’écran je ne sais pas comment mettre une fichier word ici....

Bref en gros dans l’userfom il ya (écrit en rouge)

ce sont des comboBox(avec des choix)

Table de mortalité pour hommes …………………………
Table de mortalité pour femmes…………………………..
Table par défaut………………………………….


Là par contre ce sont des textbox


Date de calcul de la provision mathématique…………………………
Coefficient de chargement………………………..
Intérêt technique…………………..


Bon lorsqu’on rentre tous ces paramètres , les provisions mathématiques sont bien calculées et il nya pas de soucis.
Lorsque l’utilisateur oubli de saisir l’une des 3 tables,il ya automatiquement un message d’erreur ki oblige dc celui ci a choisir les tables de mortalités.

là tout es ok


je re Very Happy
_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
meke
Bérinaute Vétéran


Inscrit le: 16 May 2008
Messages: 5079
Localisation: france

MessagePosté le: Sat Dec 05, 2009 3:20 am    Sujet du message: Répondre en citant

Le souci maintenant c est k lorsque j’avais fait ce code au départ, il y avait des assurés dont on ne connaissait pas le sexe , mais pour un autre portefeuille,il s’avère qu’on connait le sexe de tous les assurés donc cette table ne devrait plus entrer en compte.

Et lorsque je rentre slt les tables des femmes et pour les hommes ,j’ai le messages d’erreur comme quoi je n'ai pas sélectionner la table de mortalité par defaut : j'ai dc réglé ce pb en mettant en commentaire le code où j'avais mis cette condition (si la table n'est pas choisie , afficher "" ,je te montrerai ds le code) , lorsque je mets dc ca en commentaire, lorsque je teste l'outil et que j'entre juste les tables de mortalité pour les hommes et femmes, eh bien il ya un buge j'ai une erreur 6 qui signale une erreur d'exécution numéro 6 « dépassement de capacité » et c est ca que je ne comprends pas

Bon voici mes codes :

1)Le premier code concerne le code de la userform


Private Sub UserForm_Initialize() 'permet juste de mettre les valeurs des tables de mortalités dans les combobox pour que l'utilisateur fasse des choix pour toutes les tables
cboTableF.AddItem "TD 73/77"
cboTableF.AddItem "TV 73/77"
cboTableF.AddItem "TD 88/90"
cboTableF.AddItem "TV 88/90"
cboTableF.AddItem "TPRV"
cboTableF.AddItem "PM 60/64"
cboTableF.AddItem "PF 60/64"
cboTableM.AddItem "TD 73/77"
cboTableM.AddItem "TV 73/77"
cboTableM.AddItem "TD 88/90"
cboTableM.AddItem "TV 88/90"
cboTableM.AddItem "TPRV"
cboTableM.AddItem "PM 60/64"
cboTableM.AddItem "PF 60/64"
cboTableDef.AddItem "TD 73/77"
cboTableDef.AddItem "TV 73/77"
cboTableDef.AddItem "TD 88/90"
cboTableDef.AddItem "TV 88/90"
cboTableDef.AddItem "TPRV"
cboTableDef.AddItem "PM 60/64"
cboTableDef.AddItem "PF 60/64"

End Sub


Private Sub cbAnnul_Click() 'gère le bouton de commande annuler de l'userform, lorsqu'on clique sur le bouton annuler, la userform se ferme
SaisieParametres.Hide
End Sub


Private Sub cbValid_Click() 'gère le bouton de commande valider de la userform ,lorsqu'on clique sur le bouton valider, les differentes tables prennent les valeurs text des combobox

tabF = cboTableF.Text
tabM = cboTableM.Text
tabDef = cboTableDef.Text
If tabF = "" Then
MsgBox "Vous n'avez pas saisi la table de mortalité pour les femmes"
ElseIf tabM = "" Then
MsgBox "Vous n'avez pas saisi la table de mortalité pour les hommes"
' ElseIf tabDef = "" Then
' MsgBox "Vous n'avez pas saisi la table de mortalité utilisée par défaut"


Else
SaisieParametres.Hide
calculPM
End If
End Sub

NB : tu vois comme je te disais dans ce code, j'ai mis en commentaire le message d'erreur qui concernait la table de mortalité par défaut.
dc normalement il ne devrait pas avoir de soucis et donc après ttes les vérifications faites, la userfom se ferme automatiquement, puis le caculPM est effectué : c'est la fonction qui permet de calculer les provisions (voir plus bas)



2) code qui permet de calculer les provisions math

'définition des paramètres

Public tabF As String
Public tabM As String
Public tabDef As String
Public nbper As Integer
Public interet
Public chargement
Public tabDebTA
Public tabFinTA
Public tabTauxTA
Public tabMinTA
Public tabMaxTA


Sub SaisiePeriodes()
'On commence par définir les tranches d'age pour le calcul

Sheets("Données").Activate
interet = Range("D3").Value
chargement = Range("E4").Value
nbper = 0
Range("A10").Activate
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Activate
Loop
nbper = ActiveCell.Offset(-1, 0).Value
ReDim tabDebTA(nbper)
ReDim tabFinTA(nbper)
ReDim tabTauxTA(nbper)
ReDim tabMinTA(nbper)
ReDim tabMaxTA(nbper)
Range("B10").Activate

For i = 1 To nbper
tabDebTA(i) = ActiveCell.Value
tabFinTA(i) = ActiveCell.Offset(0, 1).Value
tabTauxTA(i) = ActiveCell.Offset(0, 2).Value
tabMinTA(i) = ActiveCell.Offset(0, 3).Value
tabMaxTA(i) = ActiveCell.Offset(0, 4).Value
ActiveCell.Offset(1, 0).Activate
Next i
End Sub


Public Sub calculPM()
Dim n
Dim tabSexe
Dim tabDN
Dim tabAge
Dim tabCap
Dim tabPM
Dim DateCalc As Date
Dim tabprobleme
Dim tabnumpb

Application.ScreenUpdating = False 'l ecran n'est plus mis à jour
'On récupère la date de calcul
Sheets("DateCalcul").Activate
DateCalc = Range("F2").Value
SaisiePeriodes
For i = 1 To nbper
If tabMinTA(i) > tabMaxTA(i) Then
MsgBox "Les valeurs minimum et maximum de la tranche d'âge " & i & " sont mal définies..."
Exit Sub
End If
Next i
For i = 1 To nbper - 1
If tabDebTA(i + 1) <tabFinTA> tabFinTA(i) Then
MsgBox "la période " & i & " est mal définie! "
Exit Sub
End If
Next i

Sheets("Assurés").Activate
'Calcul du nombre de personnes
Range("B2").Activate
n = 0
Do While ActiveCell.Value <> ""
n = n + 1
ActiveCell.Offset(1, 0).Activate
Loop
ReDim tabSexe(n) As String
ReDim tabDN(n) As Date
ReDim tabAge(n)
ReDim tabPM(n) As Double
ReDim tabCap(n)
ReDim tabprobleme(n) As Variant
ReDim tabnumpb(n) As Variant
cpt = 0
Range("C2").Activate
For j = 1 To n
tabSexe(j) = ActiveCell.Value
tabDN(j) = ActiveCell.Offset(0, 1).Value
If ActiveCell.Offset(0, 1).Value = "" Then
cpt = cpt + 1
tabprobleme(j) = 1
tabnumpb(j) = ActiveCell.Offset(0, -2).Value
End If
tabCap(j) = ActiveCell.Offset(0, 2).Value
ActiveCell.Offset(1, 0).Activate
Next j
For j = 1 To n
interm = DateDiff("d", tabDN(j), DateCalc)
tabAge(j) = CInt(interm / 365.25)
Next j
For z = 1 To n
' On Error GoTo Agetropgrand
tabPM(z) = formulePM((tabSexe(z)), (tabAge(z)), tabCap(z))
Next z
For z = 1 To n
tabPM(z) = tabPM(z) * (1 + chargement)
Next z
Sheets("Assurés").Activate
Range("F2").Activate
For z = 1 To n
If tabprobleme(z) = 0 Then
ActiveCell.Offset(z - 1, 0).Value = tabPM(z)
ElseIf tabprobleme(z) = 1 Then
ActiveCell.Offset(z - 1, 0).Value = ""
End If
Next z
If cpt <> 0 Then
r1 = "Le calcul n'a pas été effectué pour " & cpt & " assuré(s), car la date de naissance n'était pas précisée"
r2 = "Les numéros d'identification correspondants sont : "
r3 = ""
For z = 1 To n
If tabnumpb(z) <> 0 Then
r3 = r3 & Chr(13) & tabnumpb(z)
End If
Next z
MsgBox r1 & Chr(13) & r2 & Chr(13) & r3
End If

Application.ScreenUpdating = True
Exit Sub

''Gestion des erreurs
Agetropgrand:
MsgBox "la date de calcul est trop petite, ou trop grande...!"
Exit Sub

End Sub




Function formulePM(Sexe As String, Age As Integer, capital As Variant) As Double
Dim somme
ReDim somme(nbper) As Single
Dim res
Sheets("F_TABLES").Activate
Select Case Sexe
Case "F"
Select Case tabF
Case "TD 73/77"
Range("B7").Activate
Case "TV 73/77"
Range("D7").Activate
Case "TD 88/90"
Range("F7").Activate
Case "TV 88/90"
Range("H7").Activate
Case "TPRV"
Range("J7").Activate
Case "PM 60/64"
Range("L7").Activate
Case "PF 60/64"
Range("N7").Activate
Case Else
MsgBox "Vous n'avez pas saisi la table de mortalité pour les femmes"
End Select
Case "M"
Select Case tabM
Case "TD 73/77"
Range("B7").Activate
Case "TV 73/77"
Range("D7").Activate
Case "TD 88/90"
Range("F7").Activate
Case "TV 88/90"
Range("H7").Activate
Case "TPRV"
Range("J7").Activate
Case "PM 60/64"
Range("L7").Activate
Case "PF 60/64"
Range("N7").Activate
Case Else
MsgBox "Vous n'avez pas saisi la table de mortalité pour les hommes"
End Select
Case Else
Select Case tabDef
Case "TD 73/77"
Range("B7").Activate
Case "TV 73/77"
Range("D7").Activate
Case "TD 88/90"
Range("F7").Activate
Case "TV 88/90"
Range("H7").Activate
Case "TPRV"
Range("J7").Activate
Case "PM 60/64"
Range("L7").Activate
Case "PF 60/64"
Range("N7").Activate
'Case Else
' MsgBox "Vous n'avez pas saisi la table de mortalité par défaut"

End Select
End Select
'On est alors sur la ligne 7 dans la colonne Lx
'On se place sur la ligne de l'age
ActiveCell.Offset(Age, 0).Activate
'Premier terme _ période 1
somme(1) = 0
If Age <= tabFinTA(1) Then
For j = 0 To tabFinTA(1) - Age
somme(1) = somme(1) + ((ActiveCell.Offset(j, 0).Value - ActiveCell.Offset(j + 1, 0).Value) / ActiveCell.Value) * (1 + interet) ^ (-0.5 - j)
Next j
End If
cap = capital * tabTauxTA(1)
If cap <tabMinTA> tabMaxTA(1), tabMaxTA(1) > 0) Then
cap = tabMaxTA(1)
End If
somme(1) = somme(1) * cap
If nbper > 1 Then
'Périodes 2 à nbper
For i = 2 To nbper
somme(i) = 0
If Age <= tabFinTA(i) Then
If Age <= tabFinTA(i - 1) + 1 Then
For l = tabFinTA(i - 1) - Age + 1 To tabFinTA(i) - Age
somme(i) = somme(i) + ((ActiveCell.Offset(l, 0).Value - ActiveCell.Offset(l + 1, 0).Value) / ActiveCell.Value) * (1 + interet) ^ (-0.5 - l)
Next l
Else
For k = 0 To tabFinTA(i) - Age
somme(i) = somme(i) + ((ActiveCell.Offset(k, 0).Value - ActiveCell.Offset(k + 1, 0).Value) / ActiveCell.Value) * (1 + interet) ^ (-0.5 - k)
Next k
End If
End If
cap = capital * tabTauxTA(i)
If cap <tabMinTA> tabMaxTA(i), tabMaxTA(i) > 0) Then
cap = tabMaxTA(i)
End If
somme(i) = somme(i) * cap
Next i
End If
formulePM = 0
For w = 1 To nbper
formulePM = formulePM + somme(w)
Next w
End Function



PS :

ce qui pose problème c'est le code qui est en rouge car lorsque ca bugue, la ligne qui pose des pb est celle en gras et je pense que le calcul pose problème car j'ai mis en commentaire ce que j'ai écrit en gros (en gras).
mais j me demande dc why ca bugue car je comprends pas.

tu n'es pas obligée de tout lire , car le code même de formulePM est bon par rapport au calcul mais je pense que ce sont les variables que je dois peut etre modifier ,mais je ne vois pas comment Wink


Public Sub LancementFeuille()
Load SaisieParametres
SaisieParametres.Show
End Sub

je passerai surement tt mon week dessus car j'ai déjà perdu trop de temps avec ce souci dc si t'as des questions,poses les.si tu ne peux pas m'aider, bah tant pis Very Happy merci d'avance

ps: les commentaires st précédés de '
_________________


Dernière édition par meke le Sat Dec 05, 2009 9:12 pm; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
unistern



Inscrit le: 26 May 2008
Messages: 593

MessagePosté le: Sat Dec 05, 2009 5:10 pm    Sujet du message: Répondre en citant

yémaléeeee Méké c'est toi qui code les way fort fort comme ca ?
je suis comme un bamenda kan je vois ton code. Shocked
mama je n'ai jamais fais VBA (bon jamais c'est un peu mentir car excel et lotus je work avec ces prg des fois )
mais ton niveau ci hein Very Happy


en tt cas je vais encore jetter un coup d'eoil sur ton pb en attendant Waddle.
Waddle ????

ps: il ya les balises ca embelli davantage le code Wink
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
meke
Bérinaute Vétéran


Inscrit le: 16 May 2008
Messages: 5079
Localisation: france

MessagePosté le: Sat Dec 05, 2009 9:03 pm    Sujet du message: Répondre en citant

unistern a écrit:
yémaléeeee Méké c'est toi qui code les way fort fort comme ca ?
je suis comme un bamenda kan je vois ton code. Shocked
mama je n'ai jamais fais VBA (bon jamais c'est un peu mentir car excel et lotus je work avec ces prg des fois )
mais ton niveau ci hein Very Happy


en tt cas je vais encore jetter un coup d'eoil sur ton pb en attendant Waddle.
Waddle ????

ps: il ya les balises ca embelli davantage le code Wink


lol tu sais ,j'ai passé plus de deux mois sur cet outil dc ce n'était pas évident .je trouve que ça c'est plus facile que les ways que tu fais souvent ici lol Laughing Laughing Laughing Laughing Laughing Laughing Laughing Laughing merci de jeter un coup d'œil, je dois finir cet outil dans 1semaine.j'espère que d'ici là j'aurai résolu le pb..

_________________
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
sean



Inscrit le: 15 May 2008
Messages: 103
Localisation: road to zion

MessagePosté le: Sun Dec 06, 2009 12:01 pm    Sujet du message: Répondre en citant

....
_________________

the heartBeat..


Dernière édition par sean le Sun Dec 06, 2009 12:12 pm; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Forum Bonaberi.com Index du Forum -> Sciences & Loisirs Toutes les heures sont au format GMT + 2 Heures
Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8  Suivante
Page 6 sur 8

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Accueil  |  Forum  |  Chat  |  Galeries photos © Bonaberi.com 2003. Tous droits de reproduction réservés  |  Crédit Site
Votre publicité ici ?