Ah mais dans ce cas tu veux pas que les lecteurs voient la vue créé par l'éditeur, mais qu'ils créent leur propre vue filtrée ?
Ah mais dans ce cas tu veux pas que les lecteurs voient la vue créé par l'éditeur, mais qu'ils créent leur propre vue filtrée ?
Salut,
est-ce que quelqu'un connait une solution pour filtrer un TCD selon la valeur d'une cellule SANS passer par VBA ?
Mes recherches m'amènent toujours à du VBA sauf que je ne serais pas l'utilisateur final du fichier donc les macros...
En gros :
- L'utilisateur saisit un code dans une cellule
- Une recherche est faite sur cette cellule pour remonter le groupe du code
- Des TCD sont filtrés selon ce groupe
As usual, tu peux balancer un exemple du TCD que tu as avec des données anonymisées ? Parce que selon la complexité, ça peut changer la réponse.
Bon, la plupart des solutions d'envoi de fichier sont bloquées au boulot donc je teste via mon Cloud :
Fichier Excel démonstration
Dans mon exemple, si je remplace le contenu de la cellule I7 (saisie par l'utilisateur), alors la cellule I9 se met à jour et j'aimerais donc que le filtre des TCD soit également modifié.
Oui, je sais pour l'URL mais pas le choix.
OK si je comprends bien, quand tu changes le champ en I7, le group en I9 est récup à droite, et du coup tu voudrais que le TCD affiche la somme de Nb post avec le filtre concerné. C'est bien ça ?
Comme si t'avais cliqué sur "Rédaction" ou "Forum" dans le filtre "Groupe" du TCD.
Alors relis ces solutions si elles se basent sur Worksheet_Change. Toutes les fonctions en VBA ne sont pas des boutons à cliquer, tu peux faire des fonctions qui s'activent quand une case change.
Oui c'est effectivement le cas.
Mais je crains plutôt le truc où l'utilisateur fait une action sur le fichier qui, pour une raison ou une autre, fait que la fonction ne donnera plus le résultat attendu.
Oui, je pars du principe que ça va merder. Parce que les utilisateurs à qui c'est destiné ne sont pas toujours des habitués d'Excel...
Du coup, j'aurais aimé une autre solution. Mais ce n'est peut-être pas possible.
Je ne savais même pas qu'il y avait un topic sur Excel.
Du coup question, est-il possible de créer un planning aléatoire pour une équipe au travail ?
Contraintes :
- il y a 2 postes pour 6 personnes qui sont en 10h du lundi au samedi;
- ce qui fait une semaine en 30h et l'autre en 40h;
- et 2 personnes par poste sauf le samedi où c'est une par poste.
Dernière modification par Padawahou ; 04/06/2022 à 20h38.
Cordialement.
Comme dit par MP, il faut déjà que tu clarifies ce que tu veux : Ce qui se conçoit aisément, s'annonce clairement.
Ton message d'origine ne permet pas de comprendre ce que tu veux vraiment (sans même parler de code).
De ce que j'ai compris, ce que je ferai c'est :
- Pour chaque poste/jour, tu tires une personne au sort (le fameux random). En même temps, pour chaque jour, tu sors la personne tirée au sort du prochain tirage (qu'elle ne fasse pas deux shifts dans la même journée)
- Chaque personne a un compteur hebdomadaire, soit de 30, soit de 40. Soit tu fixes les personnes sur telle semaine en 40 et celles en 30, soit tu fais un random également (avec gestion des compteurs 2*30h et 2*40h)
De prime abord, ça ne me parait pas compliquer à faire (avec un peu d'habitude, bien sûr), si tu veux, je dois pouvoir te faire un fichier d'exemple
On a continué en MP avec Padawahou, j'ai fait un fichier d'exemple : https://webaccueil.com/ExemplePlanning.xlsm
La première feuille contient quelques paramètres :
La deuxième est effacée à chaque fois qu'on clique sur le bouton et réécrit un nouveau planning :
Le code derrière le bouton :
En truc intéressant que je ne savais pas, c'est que l'on peut utiliser des objets .Net dans du vbaCode:Sub Bouton1_Cliquer() 'On affecte à la variable planning la feuille avec le même nom Dim Planning As Worksheet Set Planning = ActiveWorkbook.Sheets("Planning") 'On la vide Planning.Activate Cells.Clear Dim Parametres As Worksheet Set Parametres = ActiveWorkbook.Sheets("Parametres") 'Parametres.Activate 'Là le truc ne sera pas modulaire, il faut qu'on décide du nombre de compteurs (d'agents) dans le code 'pour faire un truc modulaire, il faut compter le nombre de cases et se creuser un peu plus la tête Dim compteursAgents As Variant compteursAgents = Parametres.Range("B2:B7").Value2 Dim colonne As Integer colonne = 0 'Colonne en cours For s = 1 To 4 'Pour faire les 4 semaines For j = 1 To 7 'Pour les 7 jours par semaine Dim jour colonne = colonne + 1 jour = Parametres.Range("E" & j + 1).Value Cells(1, colonne).Value = jour 'On remplit la première ligne avec les jours de la semaine Set DotNetArray = CreateObject("System.Collections.ArrayList") 'On fait un tableau pour éviter de tirer deux fois le même numéro Dim nbShift nbShift = Parametres.Range("F" & j + 1).Value2 'On récupere le nb de shift sur la journée en cours For shift = 1 To nbShift 'Pour chaque Shift on va tirer au hasard un agent Dim agentTrouve As Integer agentTrouve = Int((UBound(compteursAgents) - LBound(compteursAgents) + 1) * Rnd + LBound(compteursAgents)) 'On genere un nombre aléatoire en 1 et 6 While (DotNetArray.contains(agentTrouve) = True Or compteursAgents(agentTrouve, 1) = 0) 'On a déjà tiré ce numéro ou le compteur est à 0, on va en chercher un autre agentTrouve = Int((UBound(compteursAgents) - LBound(compteursAgents) + 1) * Rnd + LBound(compteursAgents)) 'On genere un nombre aléatoire en 1 et 6 Wend DotNetArray.Add (agentTrouve) compteursAgents(agentTrouve, 1) = compteursAgents(agentTrouve, 1) - 1 'On enlève un sur le compteur de cet agent Cells(shift + 1, colonne).Value = Parametres.Cells(agentTrouve + 1, 1) 'On ajoute l'agent à la colonne en cours Cells(shift + 1, colonne).Interior.ColorIndex = Parametres.Cells(agentTrouve + 1, 1).Interior.ColorIndex 'On colorie avec la même couleur Dim totalCompteurs As Integer 'Si tous les compteurs sont à zero, on arrête totalCompteurs = 0 For nbCompteur = 1 To UBound(compteursAgents) totalCompteurs = totalCompteurs + compteursAgents(nbCompteur, 1) Next nbCompteur If totalCompteurs = 0 Then 'On vérifie que les compteurs ne soient pas à zero, sinon on tombe dans une boucle infinie MsgBox ("Tous les compteurs sont à zero") Exit Sub End If Next shift Next j Next s End Sub
Du coup, plutôt que me faire chier avec un array vba qui n'est pas très modulaire (c'est plus un tableau), j'ai utilisé une ArrayList .Net pour connaitre les tirages déjà sortis sur la journée.
C'est un premier jet, ça permet d'avoir des exemples de code, mais il manque pas mal de choses :
- Il faudrait déjà un compteur hebdomadaire, pour éviter qu'un agent travaille plus de 5 jours. Dans la logique, il faudrait même avoir 1 jour et demi de repos hebdomadaire.
- Egalement, plutôt que bosser avec des simples jours, il faudrait travailler avec un vrai calendrier. Ça permettrait de gérer les jours fériés et les congés payés. Ainsi, il faudrait remplir un calendrier avec les personnes potentiellement présentes pour que le tirage ne se fasse qu'entre elles.
- Sur le planning d'origine, il y'a des trous : c'est logique, il y'a plus de créneaux de boulots que de shifts disponibles (13*6=78<22*4=88). Faut voir fonctionnellement comment s'est géré (j'imagine qu'il y'a des shifts faits par les responsables)
- Si on ajoute un agent, il faut modifier le code pour augmenter le Range (compteursAgents = Parametres.Range("B2:B7").Value2) : Doit y'avoir moyen de faire un tableau de toute la colonne B (sauf le titre) en excluant ce qui est vide)
-Je n'ai pas trop compris pourquoi les valeurs dans mon tableau compteurAgents ont une longueur de 2 (type [,])
Dernière modification par deathdigger ; 21/06/2022 à 18h01.
Comme je l'ai dis, merci beaucoup à toi pour ton aide et ton travail !
Ce que tu as fais est plus qu'une simple ébauche à mes yeux.
Je ne comprends pas grand chose à ton dernier paragraphe mais bon ^^
Sinon j'ai vu qu'il y a des forums spécialisés sur Excel, je vais essayer de me renseigner également dessus.
Cordialement.
Je viens vers vous pour me faciliter la vie sur une petite fonction que je dois implémenter dans un fichier demain.
Il s'agit simplement de colorer une case en fonction de son approche d'une échéance.
Pas de soucis, j'ai trouvé comment faire, une simple suite d'événements en fonction des échéances souhaitées dans le menu des mises en formes conditionnelles.
Le problème, c'est que j'aimerais maintenant facilement reproduire la formule pour toutes les lignes du dessous, parce qu'il y en a quand même un certain nombre, et c'est pénible si je dois toutes me les coltiner à la main.
Et là, rien à faire, si je tire la case vers le bas pour recopier la formule sur les autres cases, cela ne fonctionne pas car s'il prend bien en compte que les cases cibles sont bien celles du dessous, en revanche la case de référence reste toujours celle inscrite dans la formule d'origine.
Exemple en comparant à la date du jour en A1 :
B5 en rouge si G5 < A1 + 30
Si je tire la formule vers le bas, j'obtiens :
B6 en rouge si G5 < A1 + 30
Donc, au final ça ne me sert à rien car ça ne fait que des doublons de la case d'origine, alors que j'aurais voulu avoir la formule appliquée sur G6, G7, G8, etc. (mais en conservant la référence sur B1 en revanche).
Je ne mets qu'une formule, mais j'ai en plus 4 formules conditionnelles dans chaque case pour chaque palier.
Vous sauriez s'il y aurait moyen d'automatiser ça pour que je n'aie pas à faire des modifications pour chaque ligne et que je ma formule sur G corresponde bien à sa ligne en B ?
J'ai même pensé rapidement à devoir passer une macro avant de me souvenir que je n'y panais pas trop grand chose depuis le temps que je n'y ai plus touché.
De mémoire faut jouer avec les $ dans les références des cellules pour ce genre de cas.
Exactement.
Dans ta première cellule, quand tu sélectionnes ta case de référence est par défaut de type $A$1. Tu peux modifier en mettant $A1 si c'est la ligne qui bouge par exemple. Et dans ce cas, en tirant vers le bas (ou simplement en collant le format, ça marche aussi ), la case de référence va bouger au fur et à mesure.
Ça fonctionne, c'était effectivement tout couillon, merci les coins.
Salut les canards, j'aimerais tenter un truc pour suivre un peu mes sousous, mais je coince sur une question.
Imaginons que je souhaite catégoriser mes dépenses/revenus en "Catégorie/objet" (l'objet n'étant rien d'autre qu'une sous-catégorie). Donc j'ai ma feuille où je veux saisir toutes mes dépenses et revenus et dans la colonne A je saisirai la catégorie de la dépense, et dans la colonne B l'objet. Dans une catégorie on retrouve plusieurs objets (mais pas l'inverse, un objet n'appartient qu'à une catégorie). Par exemple dans ma catégorie "Habitation" on va retrouver les objets "Loyer", "Assurance", "Equipement", "Entretien de la stargate dans mon armoire", etc. Dans la catégorie "Administration" on va retrouver "Internet", "Banque", etc. vous aurez compris l'idée.
Le fond de ma question est que j'aimerais au quotidien n'avoir à saisir que l'objet, et qu'Excel en déduise la catégorie à laquelle l'objet saisi appartient.
Donc j'ai une autre feuille "liste catégories et objets" où on retrouve colonne A mes catégories et colonne B mes objets.
Par exemple en A2 j'ai "Habitation", en B2 "Loyer". En A3 encore "Habitation" et en B3 "Assurance", etc. (tout ça pour dire que j'ai N lignes pour mes N objets, et que j'indique dans la colonne A la catégorie à laquelle appartient l'objet de la colonne B, quitte donc à répéter naturellement plusieurs fois la même catégorie puisqu'elle contient plusieurs objets).
Dans ma feuille initiale où je vais faire ma saisie quotidienne, je me contrains colonne B objet à choisir parmi une liste de choix déroulante un objet de la feuille "liste catégories et objets", ça n'est pas une saisie texte libre. J'aimerais éviter de saisir manuellement la catégorie pour gagner du temps, et donc qu'Excel déduise la catégorie de l'objet saisi.
Avec des fonctions SI j'y arriverais peut-être, mais ça me semble pas du tout élégant, vraiment bourrin, et peut-être qu'à l'avenir je voudrai étoffer la liste des catégories/objets. Bref j'aimerais connaître une fonction qui regarde mon objet saisi disons en B5, regarde dans ma feuille "liste catégories et objets" où se trouve cet objet dans la colonne B, note la catégorie à côté colonne A pour aller l'inscrire en A5 dans ma feuille initiale.
A votre bon coeur !
Tutos Youtube Dwarf Fortress, Dungeon Crawl Stone Soup, Cataclysm DDA et Aurora 4X : Gobbostream (synopsis et vidéos à télécharger ici). Chaîne Twitch. Chan CPC mumble Dwarf Fortress dans la section Divers
Ce qui serait cool à la limite c'est aussi dans l'autre sens : je saisis une catégorie colonne A, j'aimerais que la liste déroulante des objets colonne B soit restreinte à la catégorie saisie colonne A (je dis ça car ma liste des objets est longue).
Mais j'ai bien conscient qu'il faut faire un choix finalement entre les deux méthodes
Tutos Youtube Dwarf Fortress, Dungeon Crawl Stone Soup, Cataclysm DDA et Aurora 4X : Gobbostream (synopsis et vidéos à télécharger ici). Chaîne Twitch. Chan CPC mumble Dwarf Fortress dans la section Divers
Avec une RECHERCHEV ?
https://www.bonbache.fr/listes-derou...excel-128.html
Apparemment, faut utiliser aussi DECALER() (je ne connais pas)
Passe par une RECHERCHEV, c'est exactement ce que tu cherches.
Dans un onglet qui te servira de feuille de configuration, tu listes :
- En colonne A la donnée que tu voudras saisir manuellement dans ton onglet Dépenses/Revenus
- En colonne B la donnée que tu voudras voir saisie automatiquement
Ensuite dans ton onglet Dépenses/Revenus, tu saisis une formule de ce style :
=RECHERCHEV(B2;Config!A1:B11;2;0)
Où Config = ton onglet de configuration
- - - Mise à jour - - -
Passe par une RECHERCHEV, c'est exactement ce que tu cherches.
Dans un onglet qui te servira de feuille de configuration, tu listes :
- En colonne A la donnée que tu voudras saisir manuellement dans ton onglet Dépenses/Revenus
- En colonne B la donnée que tu voudras voir saisie automatiquement
Ensuite dans ton onglet Dépenses/Revenus, tu saisis une formule de ce style :
=RECHERCHEV(B2;Config!A1:B11;2;0)
Où Config = ton onglet de configuration
Nailed it, merci à vous deux pour le nom de la fonction magique
Tutos Youtube Dwarf Fortress, Dungeon Crawl Stone Soup, Cataclysm DDA et Aurora 4X : Gobbostream (synopsis et vidéos à télécharger ici). Chaîne Twitch. Chan CPC mumble Dwarf Fortress dans la section Divers
Salut,
question logique plutôt que pratique.
J'ai une base sous la forme suivant :
Article A - Quantité - DLC A
Article A - Quantité - DLC A
Article A - Quantité - DLC B
Article A - Quantité - DLC C
Article B - ... (vous avez compris)
Un utilisateur me demande de lui créer un code (bon, il a pas demandé un code mais je vois pas comment faire autrement) pour avoir le même tableau mais sous la forme :
Article A - DLC A - Quantité - DLC B - Quantité - DLC C - Quantité
Article B - ...
Pour le moment, ce que je fais, c'est de mettre la base sous forme de TCD (pour que les articles et surtout les DLC soient dans l'ordre).
Puis j'ai un tableau sur un autre onglet où je vais lire chaque ligne du TCD et regarder si l'article correspond à quelque chose de déjà écrit.
Si oui, je mets la quantité et la DLC à la suite.
Si non, je mets l'article, la quantité et la DLC sur la ligne suivante.
A priori, ça fonctionne.
Mais c'est lourd ! Donc je me demande s'il y a moyen de faire plus simple...
C’est lourd parce que ce n’est pas exploité avec les bons outils
Tu as une structure de donnée définie pour la perfo en bigdata.
Normalement ta table initiale elle devrait passer par un traitement de type groubBy sur l’article et pivot sur DLC A DLCB etc puis avoir la quantité.
Ton tableau serait lisible selon :
Nom. | DLC A. | DLC B
Article A. | x. | Y
Article B. | z. | ….
Etc…
L’outil dans Excel s’appelle Power Pivot et c’est un module à installer et du traitement de données avancées pour ce type de cas.
Sinon en externe reformatage sous Spyder via un peu de Pandas.
Mais faut connaitre…
Bref c’est ultra simple mais c’est l’approche qui n’est pas dans le bon contexte
Et je pense que l’utilisateur se complique la vie par rapport au format d’un tableau clair.