|
|
Forum Bonaberi.com Le Cameroun comme si vous y étiez
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
lucaToni Shabbaeur du lac
Inscrit le: 18 Jun 2008 Messages: 4021
|
Posté le: Thu Nov 26, 2009 7:45 am Sujet du message: |
|
|
unistern a écrit: |
luki c'est bon le design. on wait seulement que ca waka
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
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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Thu Nov 26, 2009 6:57 pm Sujet du message: |
|
|
lucaToni a écrit: | unistern a écrit: |
luki c'est bon le design. on wait seulement que ca waka
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
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
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 )
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 |
|
|
sean
Inscrit le: 15 May 2008 Messages: 103 Localisation: road to zion
|
Posté le: Thu Nov 26, 2009 10:14 pm Sujet du message: |
|
|
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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Sat Nov 28, 2009 8:06 pm Sujet du message: |
|
|
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
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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Sat Nov 28, 2009 8:27 pm Sujet du message: |
|
|
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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Sat Nov 28, 2009 8:43 pm Sujet du message: |
|
|
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 |
|
|
amatoyoshi Shabbaeur du lac
Inscrit le: 04 Jun 2008 Messages: 4323 Localisation: ad Dominum
|
Posté le: Tue Dec 01, 2009 9:59 pm Sujet du message: |
|
|
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 |
|
|
----
Inscrit le: 15 May 2008 Messages: 363 Localisation: Kinshasa
|
Posté le: Fri Dec 04, 2009 12:24 am Sujet du message: |
|
|
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
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" ?
Ca simplifierait au moins par 5
le code ... _________________ _---|---_
_-------_ |
|
Revenir en haut de page |
|
|
----
Inscrit le: 15 May 2008 Messages: 363 Localisation: Kinshasa
|
Posté le: Fri Dec 04, 2009 12:38 am Sujet du message: |
|
|
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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Fri Dec 04, 2009 1:51 pm Sujet du message: |
|
|
amatoyoshi a écrit: | Mille Mercis Unistern ...
Je commençais déjà à désespérer.
Encore merci.
a.S. |
de rien amato. pkoi desesperé? lol
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? |
|
Revenir en haut de page |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Fri Dec 04, 2009 1:54 pm Sujet du message: |
|
|
---- 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
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" ?
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 ? |
|
Revenir en haut de page |
|
|
meke Bérinaute Vétéran
Inscrit le: 16 May 2008 Messages: 5079 Localisation: france
|
Posté le: Fri Dec 04, 2009 6:13 pm Sujet du message: |
|
|
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 ... _________________
|
|
Revenir en haut de page |
|
|
Waddle
Inscrit le: 12 May 2008 Messages: 17412
|
Posté le: Fri Dec 04, 2009 6:51 pm Sujet du message: |
|
|
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 ... |
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 |
|
|
meke Bérinaute Vétéran
Inscrit le: 16 May 2008 Messages: 5079 Localisation: france
|
Posté le: Fri Dec 04, 2009 7:37 pm Sujet du message: |
|
|
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 ... |
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 |
|
|
----
Inscrit le: 15 May 2008 Messages: 363 Localisation: Kinshasa
|
Posté le: Fri Dec 04, 2009 11:46 pm Sujet du message: |
|
|
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 ? |
C la life ki est brutal bom _________________ _---|---_
_-------_ |
|
Revenir en haut de page |
|
|
meke Bérinaute Vétéran
Inscrit le: 16 May 2008 Messages: 5079 Localisation: france
|
Posté le: Sat Dec 05, 2009 2:50 am Sujet du message: |
|
|
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 _________________
|
|
Revenir en haut de page |
|
|
meke Bérinaute Vétéran
Inscrit le: 16 May 2008 Messages: 5079 Localisation: france
|
Posté le: Sat Dec 05, 2009 3:20 am Sujet du message: |
|
|
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
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 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 |
|
|
unistern
Inscrit le: 26 May 2008 Messages: 593
|
Posté le: Sat Dec 05, 2009 5:10 pm Sujet du message: |
|
|
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.
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
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 |
|
Revenir en haut de page |
|
|
meke Bérinaute Vétéran
Inscrit le: 16 May 2008 Messages: 5079 Localisation: france
|
Posté le: Sat Dec 05, 2009 9:03 pm Sujet du message: |
|
|
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.
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
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 |
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 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 |
|
|
sean
Inscrit le: 15 May 2008 Messages: 103 Localisation: road to zion
|
Posté le: Sun Dec 06, 2009 12:01 pm Sujet du message: |
|
|
.... _________________
the heartBeat..
Dernière édition par sean le Sun Dec 06, 2009 12:12 pm; édité 1 fois |
|
Revenir en haut de page |
|
|
|
|
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
|
|
|
|