Excel - Partie de fonction qui se répète
Fermé
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
-
31 août 2010 à 22:19
Tehani_t Messages postés 240 Date d'inscription mercredi 14 juillet 2010 Statut Membre Dernière intervention 20 décembre 2011 - 3 sept. 2010 à 23:21
Tehani_t Messages postés 240 Date d'inscription mercredi 14 juillet 2010 Statut Membre Dernière intervention 20 décembre 2011 - 3 sept. 2010 à 23:21
A voir également:
- Excel - Partie de fonction qui se répète
- Excel fonction si et - Guide
- Liste déroulante excel - Guide
- Fonction moyenne excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
13 réponses
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
31 août 2010 à 22:25
31 août 2010 à 22:25
https://www.cjoint.com/?iFwxH5d6Cc
Voila, c'est la feuille 5_calcul_prochain_ae
Merci !!
Voila, c'est la feuille 5_calcul_prochain_ae
Merci !!
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié par eriiic le 31/08/2010 à 22:39
Modifié par eriiic le 31/08/2010 à 22:39
Bonjour,
Déjà tu ne devrais passer que des dates à ta fonction, et si tu as besoin du jour, mois ou année le récupérer en vba. Ca sera beaucoup plus léger...
Est-ce qu'une dispo est toujours du 1er-1 au 1er du mois ?
En fait explique les règles et le mode de calcul car j'ai l'impression que tu as bien compliqué la réponse
eric
Déjà tu ne devrais passer que des dates à ta fonction, et si tu as besoin du jour, mois ou année le récupérer en vba. Ca sera beaucoup plus léger...
Est-ce qu'une dispo est toujours du 1er-1 au 1er du mois ?
En fait explique les règles et le mode de calcul car j'ai l'impression que tu as bien compliqué la réponse
eric
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:25
1 sept. 2010 à 00:25
Bonjour !!
Les début et fin de dispo peuvent se faire en cours de mois, fin de mois, ca n'a pas d'importance
Les début et fin de dispo peuvent se faire en cours de mois, fin de mois, ca n'a pas d'importance
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:27
1 sept. 2010 à 00:27
On a une date d'avancement prévu.Un début de dispo et une fin de dispo. Et on souhaite obtenir la date d'avancement réelle (colonne X).
Pour ce faire, il faut ajouter la durée de dispo à la date d'avancement prévu.
Pour ce faire, il faut ajouter la durée de dispo à la date d'avancement prévu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:36
1 sept. 2010 à 00:36
Pour calculer la durée de dispo :
Exemple 1: debut : 01/01/2000 fin : 16/01/2000
soustraire les jours : FIN-DEBUT = 16-1=15
soustraire les mois : 1-1 = 0
soustraire les années : 2000-2000=0
la durée de dispo est donc de 15 jours.
Exemple 2 : debut : 26/03/1999 fin : 15/02/2002
soustraire les jours : 15-26 = impossible donc on ajoute 30 au jour de fin 30+15 =45
on retranche le mois de fin de 1, on obtient donc 2-1 =1
45-26=19
soustraire les mois1-3 = impossible donc ajoute 12 au mois de fin 12+2=14
on retranche l'année de fin de 1, on obtient donc 2002-1=2001
14-3 = 11
on soustrait les années : 2001-1999 = 2
Exemple 1: debut : 01/01/2000 fin : 16/01/2000
soustraire les jours : FIN-DEBUT = 16-1=15
soustraire les mois : 1-1 = 0
soustraire les années : 2000-2000=0
la durée de dispo est donc de 15 jours.
Exemple 2 : debut : 26/03/1999 fin : 15/02/2002
soustraire les jours : 15-26 = impossible donc on ajoute 30 au jour de fin 30+15 =45
on retranche le mois de fin de 1, on obtient donc 2-1 =1
45-26=19
soustraire les mois1-3 = impossible donc ajoute 12 au mois de fin 12+2=14
on retranche l'année de fin de 1, on obtient donc 2002-1=2001
14-3 = 11
on soustrait les années : 2001-1999 = 2
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:37
1 sept. 2010 à 00:37
La durée de dispo est de 2 an 11 mois et 19 jours.
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:45
1 sept. 2010 à 00:45
Ajout de la durée de dispo à la date d'avancement prévu (colonne O)
Avancement prévu le :
Exemple 1 : 13/01/2000
Additionner les jours : 19+13=32 impossible donc 32-30=2 et on ajoute 1 aux mois
Additionner les mois : 11+1=12 12+1=13 impossible donc 13-12=1 et on ajoute 1 aux années
Additionner les années : 2+2000=2002 2002+1=2003
La date d'avancement réelle : 02/01/2003
Avancement prévu le :
Exemple 1 : 13/01/2000
Additionner les jours : 19+13=32 impossible donc 32-30=2 et on ajoute 1 aux mois
Additionner les mois : 11+1=12 12+1=13 impossible donc 13-12=1 et on ajoute 1 aux années
Additionner les années : 2+2000=2002 2002+1=2003
La date d'avancement réelle : 02/01/2003
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 00:54
1 sept. 2010 à 00:54
S'il y a une 2eme dispo, (on parle de 2eme dispo quand celle ci débute au plus tard à la date d'avancement réelle). Bref ! S'il y a une 2eme dispo, il ne faut plus ajouter la durée de dispo à la date d'avancement prévu (colonne O) mais il faut ajouter cette durée à la dernière date d'avancement réelle.
C'est ce que j'ai essayé de faire dans "Calcul si plus d'une dispo". Quand j'entre une première dispo, ca me donne bien la date d'avancement réelle. Quand j'entre une seconde dispo, ca me donne bien la date d'avancement réelle. Mais quand j'archive cette dispo, la date d'avancement réelle change alors que je n'ai rien saisi en date de début et fin de dispo.
C'est ce que j'ai essayé de faire dans "Calcul si plus d'une dispo". Quand j'entre une première dispo, ca me donne bien la date d'avancement réelle. Quand j'entre une seconde dispo, ca me donne bien la date d'avancement réelle. Mais quand j'archive cette dispo, la date d'avancement réelle change alors que je n'ai rien saisi en date de début et fin de dispo.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
Modifié par eriiic le 1/09/2010 à 09:59
Modifié par eriiic le 1/09/2010 à 09:59
Re,
C'est TA méthode de calcul ou la méthode de calcul officielle ?
Parce que, par formule, tu peux avoir le nombre de jour avec :
=MOD(JOUR(V11)-JOUR(U11);30)
le nombre de mois avec :
=(ANNEE(V11)-ANNEE(U11))*12+MOIS(V11)-MOIS(U11)-(JOUR(U11)>JOUR(V11))
et te fabriquer ta date avec :
=date(annéePrévue;moisPrévu+moisCalculés;jourPrévu+joursCalculés)
Par contre pour ton exemple 2 je trouve 19 jours et 34 mois (et non 35 mois)
Et pour ton soucis de double passage dans la boucle n'ayant aucune idée de comment utiliser ta feuille je ne sais pas.
Ce qui me gène c'est que je ne vois qu'une seule zone de saisie pour les dispo (?) par ligne et qu'une ligne semble correspondre à 1 agent.
eric
C'est TA méthode de calcul ou la méthode de calcul officielle ?
Parce que, par formule, tu peux avoir le nombre de jour avec :
=MOD(JOUR(V11)-JOUR(U11);30)
le nombre de mois avec :
=(ANNEE(V11)-ANNEE(U11))*12+MOIS(V11)-MOIS(U11)-(JOUR(U11)>JOUR(V11))
et te fabriquer ta date avec :
=date(annéePrévue;moisPrévu+moisCalculés;jourPrévu+joursCalculés)
Par contre pour ton exemple 2 je trouve 19 jours et 34 mois (et non 35 mois)
Et pour ton soucis de double passage dans la boucle n'ayant aucune idée de comment utiliser ta feuille je ne sais pas.
Ce qui me gène c'est que je ne vois qu'une seule zone de saisie pour les dispo (?) par ligne et qu'une ligne semble correspondre à 1 agent.
eric
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 20:05
1 sept. 2010 à 20:05
Bonjour,
Ce n'est pas ma méthode, j'avais pensé utiliser les formules d'excel, mais ce n'est pas possible car "ils" ont un leur façon de calculer.
Mais si ce que tu me proposes me permet d'avoir les memes résultats que la méthode décrite plus haut, je suis preneuse.
Tu as vu qu'il y a 2 boutons sur ma feuille, "Archiver DERNIERE SITUATION" et "Archiver Position".
Bouton "Archiver DERNIERE SITUATION" : Lorsque l'agent atteint la date d'avancement réelle, l'utilisateur doit cliquer sur ce bouton et toute (presque) la ligne sera copiée dans une autre feuille du classeur.
Bouton "Archiver Position" : Admettons, un agent prend une disponibilité, appelons la DISPO 1, on saisi les infos dans "POSITION A PRENDRE EN COMPTE". On obtient donc une date d'avancement réelle, appelons la REEL 1.
Si cet agent souhaite prendre une seconde disponibilité, appelons la DISPO 2, l'utilisateur doit alors cliquer sur le bouton et les infos concernant uniquement la dispo (colonnes "position", "cat", "début", "fin") seront copiées dans une autre feuille. Donc, les cellules ("position", "cat", "début", "fin") seront vides, et la cellule test incrémentée de 1 . Et la date d'avancement réelle sera toujours REEL 1.
Lorsque l'utilisateur saisira DISPO 2, il faut que la durée de DISPO 2 soit ajouté à REEL 1. Et c'est la que j'ai un souci. Je ne parviens pas à gérer la saisie d'une seconde DISPO ....
PS : Merci de me répondre
Ce n'est pas ma méthode, j'avais pensé utiliser les formules d'excel, mais ce n'est pas possible car "ils" ont un leur façon de calculer.
Mais si ce que tu me proposes me permet d'avoir les memes résultats que la méthode décrite plus haut, je suis preneuse.
Tu as vu qu'il y a 2 boutons sur ma feuille, "Archiver DERNIERE SITUATION" et "Archiver Position".
Bouton "Archiver DERNIERE SITUATION" : Lorsque l'agent atteint la date d'avancement réelle, l'utilisateur doit cliquer sur ce bouton et toute (presque) la ligne sera copiée dans une autre feuille du classeur.
Bouton "Archiver Position" : Admettons, un agent prend une disponibilité, appelons la DISPO 1, on saisi les infos dans "POSITION A PRENDRE EN COMPTE". On obtient donc une date d'avancement réelle, appelons la REEL 1.
Si cet agent souhaite prendre une seconde disponibilité, appelons la DISPO 2, l'utilisateur doit alors cliquer sur le bouton et les infos concernant uniquement la dispo (colonnes "position", "cat", "début", "fin") seront copiées dans une autre feuille. Donc, les cellules ("position", "cat", "début", "fin") seront vides, et la cellule test incrémentée de 1 . Et la date d'avancement réelle sera toujours REEL 1.
Lorsque l'utilisateur saisira DISPO 2, il faut que la durée de DISPO 2 soit ajouté à REEL 1. Et c'est la que j'ai un souci. Je ne parviens pas à gérer la saisie d'une seconde DISPO ....
PS : Merci de me répondre
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
1 sept. 2010 à 21:29
1 sept. 2010 à 21:29
Re,
Ton code est un peu dur à suivre, j'ai essayé en pas à pas mais je me fais éjecter car il manque des saisies.
A la place de ta fonction j'ai mis une formule en X9 (calcul sur les données de la ligne 4 pour que tu puisses comparer).
Si les réponses aux différents tests sont correct, remplace par ma formule et re-teste ton programme.
Si c'est bon on saura que c'est le code de ta fonction qui pêche et on pourra le reprendre (ou tu restes avec la formule si ça t'es autorisé)
Si l'erreur est dans le code d'appel à la fonction je crois que je ne pourrais pas t'aider plus.
http://www.cijoint.fr/cjlink.php?file=cj201009/cijt9Pwvp4.xls
eric
Ton code est un peu dur à suivre, j'ai essayé en pas à pas mais je me fais éjecter car il manque des saisies.
A la place de ta fonction j'ai mis une formule en X9 (calcul sur les données de la ligne 4 pour que tu puisses comparer).
Si les réponses aux différents tests sont correct, remplace par ma formule et re-teste ton programme.
Si c'est bon on saura que c'est le code de ta fonction qui pêche et on pourra le reprendre (ou tu restes avec la formule si ça t'es autorisé)
Si l'erreur est dans le code d'appel à la fonction je crois que je ne pourrais pas t'aider plus.
http://www.cijoint.fr/cjlink.php?file=cj201009/cijt9Pwvp4.xls
eric
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 21:51
1 sept. 2010 à 21:51
Pour pouvoir archiver il faut renseigner toute la ligne ou mettre des zéros, je teste ta formule et te répond
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 22:07
1 sept. 2010 à 22:07
Re,
En ce qui concerne ta formule, dans beaucoup de cas ca marche mais pas toujours,
Date avancement prévu : 18/05/2010
deb dispo : 21/09/2009
fin dispo : 20/08/2011
avancement réel : 17/04/2012
avec ta formule l'avancement reel : 16/04/2012
En ce qui concerne ta formule, dans beaucoup de cas ca marche mais pas toujours,
Date avancement prévu : 18/05/2010
deb dispo : 21/09/2009
fin dispo : 20/08/2011
avancement réel : 17/04/2012
avec ta formule l'avancement reel : 16/04/2012
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 22:08
1 sept. 2010 à 22:08
Refaire ma fonction n'est pas un souci, mais il faut garder le meme mode de calcul.
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
1 sept. 2010 à 22:33
1 sept. 2010 à 22:33
C'est ma fonction qui a un souci. Tu vois la colonne test (colonne W). A chaque fois qu'on clique sur "Archiver Position", il s'incrémente de 1.
Dans la partie « Caclul date d'avancement si plus d'une dispo »
If test>0 then
Partie 1
Else
Partie 2
end if
La Partie 2 s'exécute si test =0, donc aucune dispo n'a encore été saisi.
Si ce n'est pas le cas, Partie 1 s'exécute, donc si on a déjà saisi une dispo.
Dans les 2 parties le mode de calcul est le même. La seule différence c'est :
Partie 1, pour calculer la date d'avancement reelle on part de la dernière date d'avancement réelle.
Partie2, pour calculer la date d'avancement reelle on part de la date d'avancement prévu.
Partie 1 s'exécute tant qu'on a pas cliqué sur le bouton « Archiver DERNIERE SITUATION ».
Mon souci est le suivant, j'archive une 1ere dispo, la date d'avancement reelle reste la meme.
Je saisi une 2eme dispo, j'obtient donc une date d'avancement reelle. Quand j'archive cet dispo, ma date d'avancement réelle change alors qu'elle ne devrait pas. Le souci c'est que Partie 1 s'exécute 2fois au lieu d'une fois, et je ne sais pas pourquoi.
Dans la partie « Caclul date d'avancement si plus d'une dispo »
If test>0 then
Partie 1
Else
Partie 2
end if
La Partie 2 s'exécute si test =0, donc aucune dispo n'a encore été saisi.
Si ce n'est pas le cas, Partie 1 s'exécute, donc si on a déjà saisi une dispo.
Dans les 2 parties le mode de calcul est le même. La seule différence c'est :
Partie 1, pour calculer la date d'avancement reelle on part de la dernière date d'avancement réelle.
Partie2, pour calculer la date d'avancement reelle on part de la date d'avancement prévu.
Partie 1 s'exécute tant qu'on a pas cliqué sur le bouton « Archiver DERNIERE SITUATION ».
Mon souci est le suivant, j'archive une 1ere dispo, la date d'avancement reelle reste la meme.
Je saisi une 2eme dispo, j'obtient donc une date d'avancement reelle. Quand j'archive cet dispo, ma date d'avancement réelle change alors qu'elle ne devrait pas. Le souci c'est que Partie 1 s'exécute 2fois au lieu d'une fois, et je ne sais pas pourquoi.
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
1 sept. 2010 à 23:21
1 sept. 2010 à 23:21
Je ne vois aucune variable dans la fonction qui s'appelle 'date d'avancement reelle'
Ca serait bien d'utiliser leur vrai nom (quitte à compléter par une explication sur le rôle)
Avec toi c'est comme conduire les yeux bandés...
Si elle est déclarée à l'intérieur de la fonction essaie en la déclarant à l'extérieur qu'elle ne soit pas réinitialisée à chaque appel.
Et contrôle que le reste du code n'utilise pas le même nom en la modifiant...
Ca serait bien d'utiliser leur vrai nom (quitte à compléter par une explication sur le rôle)
Avec toi c'est comme conduire les yeux bandés...
Si elle est déclarée à l'intérieur de la fonction essaie en la déclarant à l'extérieur qu'elle ne soit pas réinitialisée à chaque appel.
Et contrôle que le reste du code n'utilise pas le même nom en la modifiant...
Mytå
Messages postés
2973
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
949
Modifié par Mytå le 2/09/2010 à 02:36
Modifié par Mytå le 2/09/2010 à 02:36
Salut le forum
Pour faire l'extraction, voici les trois fonctions VBA
Mytå
Merci de donner suite à votre question, nous ne sommes pas des robots...
Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)]
Pour faire l'extraction, voici les trois fonctions VBA
Pour la jour.....Day(Date) Pour le mois.....Month(Date) Pour l'année.....Year(Date)
Mytå
Merci de donner suite à votre question, nous ne sommes pas des robots...
Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)]
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
2 sept. 2010 à 03:11
2 sept. 2010 à 03:11
Cool Merci Myta !!
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
3 sept. 2010 à 06:59
3 sept. 2010 à 06:59
Bonjour,
eriiic - 1 sep 2010 à 23:21
Je ne vois aucune variable dans la fonction qui s'appelle 'date d'avancement reelle'
Ca serait bien d'utiliser leur vrai nom (quitte à compléter par une explication sur le rôle)
Avec toi c'est comme conduire les yeux bandés...
Si elle est déclarée à l'intérieur de la fonction essaie en la déclarant à l'extérieur qu'elle ne soit pas réinitialisée à chaque appel.
Je crois que tu avais la réponse ici : tes variables sont déclarées à l'intérieur de la fonction.
Ca ne suffira peut-être pas mais déjà tu es sûre que ça ne pouvait pas fonctionner.
Par ailleurs ça serait bien que tu lises attentivement les réponses et que tu en tiennes compte. Déjà ici je te demandais d'utiliser les noms des variables, sinon ce que tu dis est incompréhensible...
eric
eriiic - 1 sep 2010 à 23:21
Je ne vois aucune variable dans la fonction qui s'appelle 'date d'avancement reelle'
Ca serait bien d'utiliser leur vrai nom (quitte à compléter par une explication sur le rôle)
Avec toi c'est comme conduire les yeux bandés...
Si elle est déclarée à l'intérieur de la fonction essaie en la déclarant à l'extérieur qu'elle ne soit pas réinitialisée à chaque appel.
Je crois que tu avais la réponse ici : tes variables sont déclarées à l'intérieur de la fonction.
Ca ne suffira peut-être pas mais déjà tu es sûre que ça ne pouvait pas fonctionner.
Par ailleurs ça serait bien que tu lises attentivement les réponses et que tu en tiennes compte. Déjà ici je te demandais d'utiliser les noms des variables, sinon ce que tu dis est incompréhensible...
eric
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
3 sept. 2010 à 23:16
3 sept. 2010 à 23:16
http://www.cijoint.fr/cjlink.php?file=cj201009/cijMIq6F2K.xls
Tehani_t
Messages postés
240
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
20 décembre 2011
21
3 sept. 2010 à 23:21
3 sept. 2010 à 23:21
Voici un fichier, j'ai simplifié du moins j'ai essayé. Tu as une fonction avance_reel qui permet de calculer la date reelle d'avancement en colonne X (=variable date_av_reel)
La fonction ne permet de gérer qu'une seule dispo. On saisi dans le fichier les début et fin (colonne U et V) et la date correspondante s'affiche en X.
Quand je clique sur "Archiver Position", les début et fin seront collées dans une autre feuille.
Ce que j'aimerais avoir, c'est, lorsque je dois saisir une nouvelle dispo, que la duree de cette dernière s'ajoute à date_av_reel.
La fonction ne permet de gérer qu'une seule dispo. On saisi dans le fichier les début et fin (colonne U et V) et la date correspondante s'affiche en X.
Quand je clique sur "Archiver Position", les début et fin seront collées dans une autre feuille.
Ce que j'aimerais avoir, c'est, lorsque je dois saisir une nouvelle dispo, que la duree de cette dernière s'ajoute à date_av_reel.