Raccourcir un code
Bonjour à tous, j'ai un code tout simple qui c'est transformé en gros code dégelasse. j'aurais besoin de votre expertise pour m'aider. Je pense que je vais peut-être avoir besoin de me tourner vers le VBA...
Mon code au départ:
=SI(ET(A2=outil!A$2;outil!E$2=1);""&TEXTE(outil!B$2;"j mmm aaaa")&", ";"")&""
En gros, j'ai deux pages, "Outil" et "Tableau", dans outils j'ai une liste de nom, Jack, Jack, Marc, Jack, Alex, Alex et sa continue sur des centaine de ligne. Les noms sont dans la colonne A. dans la colonne B, Il y a les dates. dans la colonne E, il y a un 1 ou rien. Le tableau ressemble à ceci:
A B E
Jack 3 décembre 2014 1
Jack 5 décembre 2014
Marc 6 décembre 2014
Jack 6 décembre 2014 1
Alex 6 décembre 2014 1
Alex 8 décembre 2014
Dans le deuxième tableau, j'ai la liste des participants (Alex, Jack, Marc). Le code en haut inscrit la date si le nom est le même et qu'il il a un 1 dans la colonne E.
Jusque la tout va bien.
La ou ça se complique, c'est que pour aller voir dans les autres lignes, je dois répété le code:
=SI(F12=0;"";"")&""&SI(ET(A12=Outil!A$3;Outil!E$3=1);""&TEXTE(Outil!B$3;"j mmm aaaa")&", ";"")&""&SI(ET(A12=Outil!A$2;Outil!E$2=1);""&TEXTE(Outil!B$2;"j mmm aaaa")&", ";"")&""
Étant donné qu,il est possible que j'aie 1000 voir 10000 lignes à vérifier, le code devient énorme rapidement et ne rentre plus dans une case (Il y a une limite de caractères)
J'aimerais trouver une alternative, Excel ou VBA.
Merci d'avance.
bonjour
rem : il s'agit de formules et non de code (on parle de code pour évoquer VBA et toutes autres sortes de programmations)
peux-tu joindre un template et expliquer à quoi sert finalement ta longue formule ?
J'ai mit en pièce jointe un template avec une liste d'environ 200 entrées sur la page "Outil" et environ 20 personnes dans la page "tableau".
Comme vous pourrez le tester vous même, lorsque dans la page "outil" on inscrit un nom et que l,on met un 1 dans la colonne E par exemple, dans la page "Tableau", cette personnes reçoit un retard de plus (colonne F). [Le nom doit être présent dans la liste]
La grosse formule se trouve dans la colonne G de la page "Tableau". Vous y verrez dans la cellule G14 il y a deux dates car il y a eu deux retard. C'est parfait, il s'affiche même du plus récent au plus vieux. Par contre dans la cellule G24 il n'y a rien; simplement car la formule pour l'instant ne regarde que les 100 premières lignes de la page "Outil".
J'aimerais qu'au lieu d'y regarder uniquement les 100 premières, quelles les regardes toutes (ou jusqu'à n'en trouver un ligne vide.
Merci grandement de m'aider avec ce problème
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Ci-joint une proposition, à tester.
Les formules de la colonne G sont supprimées, remplacées par une macro.
Remarque 1 : il n'y a pas que la colonne G, les colonnes I, K, M sont similaires
Remarque 2 : on a des différences dans les noms de personnes entre les 2 onglets (la macro affiche dans ce cas un message d'anomalie)
Remarque 3 : on a des incohérences pour certaines lignes : la ligne "P.A." dans l'onglet Tableau ne mentionne aucune absence, alors qu'on en a une. (la formule comptant le nombre d'absences n'est pas tirée dans cette cellule)
Remarque 4 : la macro calcule le nombre d'absences, on pourrait donc supprimer les formules calculant le nombre, et inclure l'alimentation dans la macro
Remarque 5 : maintenant qu'on a une macro, on ne peut plus insérer des colonnes n'importe où, ceci nécessitera une révision du code
A plus
Bouben
bouben a écrit :Bonjour,
Ci-joint une proposition, à tester.
Les formules de la colonne G sont supprimées, remplacées par une macro.
Remarque 1 : il n'y a pas que la colonne G, les colonnes I, K, M sont similaires
Remarque 2 : on a des différences dans les noms de personnes entre les 2 onglets (la macro affiche dans ce cas un message d'anomalie)
Remarque 3 : on a des incohérences pour certaines lignes : la ligne "P.A." dans l'onglet Tableau ne mentionne aucune absence, alors qu'on en a une. (la formule comptant le nombre d'absences n'est pas tirée dans cette cellule)
Remarque 4 : la macro calcule le nombre d'absences, on pourrait donc supprimer les formules calculant le nombre, et inclure l'alimentation dans la macro
Remarque 5 : maintenant qu'on a une macro, on ne peut plus insérer des colonnes n'importe où, ceci nécessitera une révision du code
A plus
Bouben
Wow juste wow!
C'est vraiment magnifique merci énormément. Je vais pouvoir transféré le tout dans mon vrai tableau.
J'aimerais savoir si tu pouvais modifier quelques petites chose pour moi.
1) Inclure également les colonne U, V et W qui fonctionnaient sur la même formule.
2) Changer les messages "Personne inexistante" par "" (vide). Il est possible qu'une personnes n'aie pas de note à son dossier.
3) Trier les dates en ordre anti-chronologique (Du plus récent au plus vieux (également pour U, V et W).
Les colonnes (tableau) U, V et W affichait le texte de (outil) X s'il y avait un 1 dans la colonne (outil) U, V ou W. C'est en gros la même formule appliqué à différente colonne.
Merci encore pour ton aide incalculable! Il y a-t-il une place dans ce forum pour te donner un vote +1 ou une recommendation?
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Ci-joint une nouvelle version à tester.
Pour les colonnes U, V, W : j'ajoute le texte de la note (mais sans date). J'espère avoir bien compris ...
Merci pour ta gratitude, je ne suis pas sûr qu'il y ait des notes, tes remerciements me suffisent !
Bouben
bouben a écrit :Bonsoir,
Ci-joint une nouvelle version à tester.
Pour les colonnes U, V, W : j'ajoute le texte de la note (mais sans date). J'espère avoir bien compris ...
Merci pour ta gratitude, je ne suis pas sûr qu'il y ait des notes, tes remerciements me suffisent !
Bouben
Wow encore une fois milles merci!
J'ai vu que les dates sont en ordre inversé c'est génial. Je vois aussi que tu as tenter de le faire avec les messages, objectifs et démarches; ainsi la case U13 affiche "bbbbb,aaaaaa" mais lorsque j'essaie de le faire ca me marque "aaaaaa,bbbbbb".
Je dois avouer que le code que tu m'as donné mérite un 100%. Si tu as encore envie de m'aider a perfectionné quelques petits truc j'apprécierait beaucoup mais si tu as d'autres personnes à aller aider ne te gène pas je vais tenter de me débrouiller pour la suite.
A trouver une facons de mettre les colonnes U,V,W and le sens inverse et faire une fonction effacer tous les "messages" d'une personne. Pour ce faire je pensais faire tout simplement en sorte que lorsque l'on marque un 0 dans "outil U", cela regarde le nom de la personne et ôte tout les 1 dans la colonne U pour cette personne. (Je sais pas si c'est ce qui a de plus simple mais ca me semblait être une bonne idée)
Merci d'être mon sauveur ce mois-ci ^^
Comme tu peux voir dans le document ci-joint, "Tableau" U9 n'affiche pas "vieux" de "outil" X91 et "tableau" U22 affiche aaaaa,bbbbb au lieu de bbbbb,aaaaaa
Bon je viens de faire d'autre test, le aaaaa,bbbbbb c'est jusque c'était la même date donc c'est pas grave.
Pour le "vieux" "recent" je l'ai testé et resté et maintenant ca marche, je sais pas pourquoi ca marchait pas...
Hahaha bon je me parle tout seul mais c'est pas grave j'avance.
Le code est parfait, j'ai trouvé comment faire pour effacé les messages. Je ferme le topic Merci encore.
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Super si tout roule !
lamontagne.albert a écrit :Bon je viens de faire d'autre test, le aaaaa,bbbbbb c'est jusque c'était la même date donc c'est pas grave.
C'est bien ce qui me semblait ...
lamontagne.albert a écrit :Pour le "vieux" "recent" je l'ai testé et resté et maintenant ca marche, je sais pas pourquoi ca marchait pas...
En ligne 91, le nom "JD" comprenait un espace à la fin, donc la ligne n'était pas récupérée (les noms doivent être identiques entre les 2 onglets)
Bonne soirée
Bouben