Aide fonction/vba

Résolu/Fermé
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014 - Modifié par isaccm le 22/10/2013 à 08:20
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014 - 15 févr. 2014 à 12:30
Bonjour à tous et merci à celui ou celle qui voudra bien se pencher sur ma question
j'ai un tableau excel représentant les jours du mois coté gauche (lignes) et des personnes pour les colonnes (7), les jours de we sont grisés
chaque jour, je dois avoir
du lundi au vendredi un "b", un "o" et un "g" et le vendredi un "b", un "c" et un "g"
le samedi et le dimanche, uniquement un "g"
par ailleurs, un "g" doit toujours être suivi d'une cellule vide en dessous
avec la fonction countif que j'ai écrite en bout de chaque ligne et un message d'erreur si conditions non réunies, j'ai résolu le premier problème mais comment résoudre les autres ?
j'ai pensé à carrément faire un petit programme macro mais cela fait au moins 20 ans que je n'ai pas utilisé le vba, je ne suis plus du tout au point
pourriez vous m'aider ?
merci
isabelle

16 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
22 oct. 2013 à 09:22
Bonjour,


Tu devrais joindre un fichier pour exemple afin de faciliter la compréhension du problème.

https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers#q=cjoint&cur=1&url=%2F

A+
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
22 oct. 2013 à 18:11
rebonjour à tous,

c'est pas idiot,

voici donc un aperçu (le vrai tableau est dans un autre ordi mais le principe y est)

http://cjoint.com/data/0Jwr3xzs5Wq_exemple_tableau.xls

j'espère que ça va marcher, c'est une première pour moi (les pièces jointes hébergées)

le fichier a été fait avec libre office sous linux et enregistré en format xls

merci de votre aide

isa
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 22/10/2013 à 19:19
Bonjour,
Tu pourrais revoir tes explications, c'est un peut incompréhensible au niveau du vendredi.
Tu dis du lundi au vendredi, il ne faut pas lire du lundi au jeudi ça, puis le vendredi ça, puis le we ça ? ?
Sinon comment compter un g pour Y et un autre pour Z ?
Et est-ce qu'il faut impérativement ces 3 valeurs une seule fois et les autres cellules vides ? Ou bien des doublons sont possibles ?
Donne aussi le nombre de lignes en réalité. Si tu en as 30 ou 10000 il faudra utiliser des colonnes intermédiaires pour accélérer le calcul
Et tu dis avoir 7 personnes, pourquoi en mettre 5 alors ??? Pour le plaisir de nous revoir si tu n'arrives pas à adapter et qu'on reprenne tout à zéro ?
Egalement pourquoi OK pour le vendredi qui a o, b, g ???? ça ne colle pas avectes explications.
Refais un tableau avec plus de cas différents stp
Soit le plus précis possible.

eric
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
22 oct. 2013 à 20:15
rebonsoir,
milles excuses, c'est toi qui a raison, c'est bien du lundi au jeudi puis le vendredi un c au lieu d'un o
il y a bien 5 personnes permanentes mais c'est vrai que en tout il y a 7 personnes (2 non permanentes) donc il faut bien 7 colonnes
ce n'est pas important que les autres cases soient vides ou non, peu importe, on s'en sert pour écrire autre chose, alors.... sauf celle qui suit un g (en dessous, donc dans la même colonne)
pour le nombre de lignes, ça concerne un mois donc au maximum 6 semaines (il y a un type avec les jours de la semaine qu'on adapte au mois en cours comme on le voit sur mon tableau exemple) donc 42 lignes potentiellement concernées par le test que je recherche
ci joint mon tableau exemple

http://cjoint.com/data/0JwujzfuzJG_exemple_tableau.xls

j'ai fait une semaine type, j'espère que je n'ai rien oublié et que c'est plus clair
n'hésite pas à m'interpeller de nouveau si je ne suis pas claire

merci de ton aide

isa
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
22 oct. 2013 à 20:18
j'ai oublié une chose,
chaque b, g, o, c ou g ne doit être présent qu'une seule fois par ligne
bonne soirée
isa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 23/10/2013 à 08:25
Bonjour,

Proposition par formule.
Comme elle est un peu complexe je t'ai laissé la décomposition des 4 tests à coté, pour te faciliter la compréhension.
Comme tu ne l'as pas précisé, je considère qu'une combinaison b,o,c,g est donc valide du lundi au vendredi.
Si ce n'est pas le cas il fauda que tu complètes un peu les tests sur le même principe.
A tester: https://www.cjoint.com/?CJxiulQpH6U

eric

1) En plus du merci (et oui, ça se fait !!!), penser à mettre en résolu (en haut vers votre titre) lorsque c'est le cas. 2) Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
23 oct. 2013 à 10:20
Bonjour isaccm,
Salutations eriiic,

Pour le fun, une autre solution avec une fonction personnalisée.

https://www.cjoint.com/?CJxktzizqnz

A+
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 23/10/2013 à 10:51
Bonjour gyrus,

Juste un détail mais qui a son importance.
Le .volatile est totalement inutile ici, et même extrêmement pénalisant. Il oblige excel a réévaluer toutes les fonctions, même si tu écris un simple 1 n'importe où. Si la fonction est présente 300 fois il le fera sur les 300 à chaque saisie.
Ici, toutes les références pouvant faire varier le résultat sont passées en paramètre. Si une seule de ces valeur change, excel le voit et recalcule la fonction que pour la ligne impactée.
Si tu veux ten convaincre met un Stop dans ta fonction et regarde la différence avec et sans.

eric
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
23 oct. 2013 à 11:24
Un autre détail qui a son importance : si la valeur en dessous d'un g est modifiée, es-tu certain qu'Excel va réévaluer la fonction ?

A+
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 23/10/2013 à 17:10
Tu as tout à fait raison.
Je vais réfléchir s'il y aurait moyen de contourner.
Si ce sont des saisies et non des formules tu pourrais utiliser l'évènement Change pour contrôler la ligne et celle du dessus si un g est au-dessus en utilisant ta fonction.
Sinon la solution pourrait être de tout recalculer (avec toutes les données dans un tableau en mémoire de préférence) et de mettre à jour. A appeler par un clic bouton, plus à l'ouverture, plus à la désactivation de la feuille si des résultats d'une autre feuille dépendent de ces résultats.

Ce sont juste des pistes qui demandent un peu de réflexion encore avant de faire le choix.
A voir si ça irait pour le demandeur.
Et puis il faudrait que le demandeur précise si c'est un tableau tout rempli qui lui arrive et qu'il doit analyser une fois. Il n'y a pas peut-être pas de modif apportées, ça simplifierait grandement.

eric
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
23 oct. 2013 à 19:15
bonsoir,
ici la demandeuse
je viens de découvrir vos deux propositions et je les ai testées
ça marche très bien, merci à tous les deux, la feuille s'actualise à chaque changement
cependant, celle d'eric affiche l'erreur "g" pour la ligne ou se situe le g et pas pour la ligne devant contenir la case vide le suivant, et celle de gyrus affiche une erreur sur les 2 lignes, ce qui est moins gênant car en fait, vous ne pouviez pas le deviner mais la ligne d'erreur est celle ou il y a un "g" au dessus d'une cellule vide car une personne ne doit pas être présente le jour suivant un "g"
la macro de gyrus colle donc mieux à priori
en tout cas, merci grandement de vous être penchés sur mon problème, je pense que je n'y serai pas arrivée seule, et en plus j'ai appris des trucs !
bonne soirée à vous
isa
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
23 oct. 2013 à 20:36
bonsoir demandeuse,

Celle de gyrus affiche une erreur sur les 2 lignes, alors que la ligne d'erreur est celle ou il y a un "g" au dessus d'une cellule vide.

Peux-tu donner un exemple ?
Si je place une donnée sous un g, j'ai bien l'erreur sur la ligne qui contient le g mais je n'ai pas d'erreur sur l'autre ligne (si les conditions relatives à la ligne sont respectées bien sûr).
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
23 oct. 2013 à 22:20
la macro de gyrus colle donc mieux à priori
Ca tombe très bien que préfères en vba. Parce là les formules deviennent trop longues et ingérables. Bonjour les difficultés à la moindre petite évolution...
eric

PS: que mon message ne te fasse pas rater le post de gyrus juste au-dessus.
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
23 oct. 2013 à 22:37
rebonsoir
oups, tu as raison, je ne sais pas ce que j'ai fabriqué tout à l'heure
donc la ligne qui contient l'erreur (quelque chose en dessous du g) n'affiche pas d'erreur, ce qui ne fait pas mes affaires en fait
aurais tu une solution ?
merci
bonne soirée à toi
isa
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
24 oct. 2013 à 17:14
Bonjour isaccm,

Il me semblait avoir posté le fichier après mise à niveau hier soir.
Sûrement la fatigue !

https://www.cjoint.com/?CJyrnRUBA1x

A+
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
25 oct. 2013 à 22:21
bonsoir gyrus
ça marche très bien
y plus qu'à s'en servir
merci grandement de ton aide
et merci aussi à eric qui avait aussi trouvé une solution qui marchait
bonne soirée
Isa
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
29 janv. 2014 à 21:37
bonsoir à vous,
finalement, mon tableau ayant évolué entretemps, j'ai utilisé la formule d'éric en l'adaptant (j'ai juste mis les colonnes en référence absolue de façon à pouvoir décaler la formule vers la droite sans foutre le bazar)
cependant; malgré le fait que ça marche super, évidemment, je me suis rendue compte que j'avais oublié qu'il y avait des jours fériés dans l'année, donc qui sont comme un dimanche....
y a t il une solution ?
voici le fichier
https://www.cjoint.com/?0ADvBvvfJHO
si vous savez comment faire...
pour la fonction controle,de gyrus j'ai bien essayé de l'adapter à ce fichier là mais ça ne fonctionne pas et vu que je ne la comprend pas, ce n'est pas étonnant que je n'y arrive pas.....
une formule c'est plus à la portée de mon petit cerveau, même si elle est longue....
merci de votre aide
isa
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 30/01/2014 à 01:42
Bonsoir,

heuuu, c'est vieux....
Tu as un peu trop bien nettoyé ton tableau.
Tous les ans tu saisis les 365 dates ??? Ou bien il y a l'année et le mois d'inscrits quelque part sur la feuille ?

La date lue dans Mai!B20 est le 01/01/2014.
Et le 01/05/14 est un Jeudi, pas un mercredi.
Pas terrible de mettre des pièges en plus...

Sans m'engager sur le résultat, pour les fériés il faut l'année. A récupérer sur une des dates ou présente dans une cellule dédiée ?
La date lue dans Mai!B20 est le 01/01/2014. Pas terrible...

@gyrus si il passe dans le coin pour adapter sa macro :
Pour supprimer le .volatile il faudrait passer en paramètre à la fonction la plage concernée étendue à la ligne suivante. Ex sur ton ancien fichier en J7 : =Controle(A7:I8)
Comme ça la fonction ligne 7 sera réévaluée en cas de modif en ligne 8

eric
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
30 janv. 2014 à 08:23
bonjour,
en fait, la colonne B a l'origine contenait des nombres et pas des dates
c'est juste que je n'ai pas encore vérifié et modifié tous les onglets, je devrais le faire sur le vrai tableau alors....
je fais les tests sur janvier et un autre mois au hasard (c'est tombé sur mai)
le mois et l'année sont respectivement dans G3 et I3
voici le tableau
https://www.cjoint.com/?0AEismbNAqZ
n'hésite pas à m'interpeler si j'oublie des trucs, j'espère que je ne suis pas trop brouillonne
merci de ton aide
isa
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
30 janv. 2014 à 20:20
Re,

J'ai été au plus simple, j'ai repris une partie de la fonction personnalisée de gyrus et modifié ce qui n'allait pas.
Je te laisse tester plus à fond et ressortir les anomalies s'il y en a.
En S1 la formule à recopier vers le bas :
=Controle(B18;C18:R19)
B18 : date
C18:R19 : ligne de saisie à contrôler + la ligne suivante

J'ai ajouté une feuille Fériés. C'est dans cette feuille que tu dois saisir l'année.
https://www.cjoint.com/?DAEurTgn5ZA

eric
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
3 févr. 2014 à 07:56
merci grandement à toi eric
je vais le tester cette semaine
a bientot
je te dirais si ca marche
isa
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
6 févr. 2014 à 20:46
bonsoir
voici donc les dernières nouvelles du front :
la macro fonctionne mais en fait les autres cellules n'étant pas vides, elle peuvent contenir parfois un b ou un c ou un g ou un o (il y a des formules dans les autres cellules qui contiennent ces caractères, c'est pour ça que ça ne fonctionne pas je pense puisque si je vide les cellules incriminées ça marche)
est-il possible de ne tester que 1 cellule sur 2 (donc les colonnes C, E, G, I, K, M, O et Q) ?
merci de ton aide eric
bonne soirée
isa
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
7 févr. 2014 à 00:09
Bonsoir,

En gros tu es en train de dire qu'on a bossé pour rien car tu as mal rédigé et évalué ta demande ?

Ce n'était pas forcément simple au départ et là tu compliques encore plus. Je n'ai pas le temps actuellement.
il y a des formules dans les autres cellules qui contiennent ces caractères
Et bien avec tes formules tu ne peux pas retourner "g_" au lieu de "g" plus simplement ?

eric
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
7 févr. 2014 à 08:15
pas du tout eric, j'avais dit au départ que les autres cellules n'étaient pas forcément vides, c'est juste que je n'avais pas signalé qu'il y avait des formules dans certaines...mais en même temps, je ne l'avais pas remarqué avant, je voyais juste les chiffres (ce n'est pas moi qui ait conçu le tableau)
désolée
ne te casse pas la tête si tu n'as pas le temps
j'essayerai ta solution sinon, je me débrouillerai autrement
vous n'avez pas bossé pour rien je peut m'en servir comme base...
bonne journée
isa
0
isaccm Messages postés 14 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 15 février 2014
15 févr. 2014 à 12:30
bonjour à tous
voici des nouvelles du front
je m'en suit finalement sortie avec un formule, un peu longue il est vrai, mais au moins je la comprends, contrairement aux macros qui sont un peu trop compliquées pour moi, au moindre problème, je me trouverais coincée et je n'aime pas du tout ça
la feuille fériés m'a été d'une grande utilité

en fait, je ne sait pas pourquoi la macro ne fonctionnait pas parce que avec la formule et les autres cases remplies avec d'autre formules nb.si avec des g et de b ect... sur la ligne, ça fonctionne nickel


voici la formule (pour ceux que ça intéresse) celle de la ligne 44
=SI(((JOURSEM($B44;2)<5)*(ESTNA(EQUIV(B45;Fériés!$B$3:$B$30;0)))*(NB.SI( $C44:$R44;$A$6)=1)*(NB.SI($C44:$R44;$G$5)=1)*(NB.SI($C44:$R44;$A$5)=1))+((JOURSEM($B44;2)=5)*(ESTNA(EQUIV(B45;Fériés!$B$3:$B$30;0)))*(NB.SI($C44:$R44;$A$6)=1)*(NB.SI($C44:$R44;$A$7)=1)*(NB.SI($C44:$R44;$A$5)=1))+((JOURSEM($B44;2)>5)*(NB.SI($C44:$R44;"b")=0)*(NB.SI($C44:$R44;"c")=0)*(NB.SI($C44:$R44;$A$5)=1)*(NB.SI($C44:$R44;"o")=0))=1;SI(DECALER($B44;1;EQUIV($A$5;$C44:$R44;0))="";" ";"Er");"Er")
elle fonctionne très bien
elle identifie d'abord le jour de la semaine, puis cherche s'il fait partie de la feuille "Fériés" puis si la ligne contient les caractères voulus, puis si la cellule après un g est bien vide
la ligne d'erreur qui s'affiche en cas de cellule non vide après g n'est pas la bonne mais ce n'est pas si grave, elle affiche l'erreur sur la ligne du g qui est juste au dessus, donc le but recherche étant d'interpeler le rédacteur, ça le fait
les valeurs recherchées (b o c g) ont été remplacées par des références absolues de cellules en haut du document ou elles étaient inscrites (je n'avais pas pensé à m'en servir avant)

merci à tous de votre aide
bon week end
isa
0