Quelle formule pour remplir les cellules H à L incluses ?
RésoluBUDGETS Messages postés 1704 Date d'inscription Statut Membre Dernière intervention -
Dans la feuille SM, selon le contenu de la cellule G6, existerait-il une formule qui permettrait de remplir automatiquement les cellules H à L incluses ? Dans l'affirmative, quelle serait-elle et combien de noms à définir éventuellement dans la feuille produits ? Dans la mesure du possible, je souhaiterais ne pas passer par rechercheH ni par Recherchev à moins que l'une de ces deux fonctions permettrait de remplir automatiquement (en une seule fois)les cellules H à L incluses.
D'avance merci pour votre aide.
https://cjoint.com/c/IHwtqQGMfr6
- Quelle formule pour remplir les cellules H à L incluses ?
- Formule si ou - Guide
- Organigramme a remplir word - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Formule mathématique - Télécharger - Études & Formations
53 réponses
L’échange porte sur le débogage et la mise à jour de procédures VBA (GénérerMenusMMR et GénérerMenusMVWE) destinées à régénérer les feuilles Menus MMR et MVWE, afin de garantir la cohérence des données et des années dans les tables BD Menus et Menus.
Les participants discutent d’ajouts de tests pour filtrer par type de menu et d’aligner les dates (2019 vs 2020), ainsi que de modifications des boucles pour copier les valeurs correspondantes entre les feuilles sources et cibles.
Des problématiques et corrections portent sur l’insertion des données (procédure InsérerDonnéesVWE, contrôle du Range), la gestion des modules (suppression/importation), et l’assurance que les menus générés s’adaptent aux structures VWE et MMR sans duplication d’années.
Aucune référence directe à la feuille SM ni à une éventuelle formule de G6 n’est fournie dans ces échanges, et aucune solution unique n’est présentée pour remplir H à L, le fil restant axé sur le débogage et les évolutions des macros.
Non, à ma connaissance il n’y a pas de formule qui permette de remplir en une seule fois une plage de cellules, il faut nécessairement saisir une formule par cellule, ou passer par du code VBA.
Cela dit, les fonctions de recherche (RECHERCHEV, INDEX et EQUIV) sont parfaitement adaptées pour ce genre d’action et on peut s’arranger pour les écrire de façon à pouvoir les copier vers la droite ou vers le bas sans avoir besoin de les modifier.
Cordialement
Très heureux de te retrouver.
Je ne sais pas si cela va répondre à tes remarques, j'ai modifié ton (mon) fichier MENUS.10 ALS35.xlsm que je te joints. Pour l'instant, je n'ai pas encore traité le code, cela viendra plus tard ni les autres feuilles. Pour l'instant, je m'occupe de la feuille shSM (et éventuellement de la feuille shProduits si nécessaire) en général, des colonnes B et des colonnes g à az en particulier. Pour ce qui est des colonnes g à az, j'ai pensé à supprimer les colonnes appelées code catégorie et nom catégorie. Je vais tenter de faire ceci cette après midi, à moins que tu penses que conserver ces colonnes soit utile.
Bonnes journée, continuation. Bon courage pour la reprise du boulot si tu es encore en activité professionnelle.
https://cjoint.com/c/IHAid1Vx2R6
Sur ta feuille SM, je ne comprends pas l'intérêt des colonnes G à AZ car apparemment tu aurais les mêmes informations dans les colonnes A et B. De plus tu vas chercher les infos dans la feuille Produits à l'aide de listes basées sur la fonction DECALER qui sont difficiles à mettre au point et pas très évolutives.
Je veux bien t'aider et te proposer quelque chose, mais il faut que tu me donnes le mode opératoire exact de ce que tu veux : quelles cellules sont à renseigner, à quoi correspondent des 3 types de menus, quels en sont les dépendances, ...
Cordialement
Menus midi retraite : ce que je mange le midi; Menus journaliers : ce que je mange le soir, le samedi midi et soir, le dimanche midi et soir; Menus viande weekend : la viande que je mande le samedi midi, le dimanche midi.
Les cellules G à AZ deviennent alors inutiles elle seront alors à supprimer mais le remplissage sera basé sur le même principe que les cellules de la colonne B. Je suis d'accord avec toi pour dire que le remplissage des cellules de la colonne B sont plus aisées que celles de des cellules G à AZ.
J'espère avoir éclairé ta lanterne.
De mon côté, je travaille sur notre fichier. J'ai été victime ce soir d'une tentative de destruction de mon système informatique. J'ai tout fermé, éteint mon ordinateur et redémarrer. Est-ce une cause à effet, mais je n'arrive plus à compléter le nom défini CodesViandes dans la feuille Produits. Regarde ce qui se passe dans fait référence à pour si sm B17 = "VWE". D'avance merci de me dire pourquoi il fait cela alors que pour VMR et VS cela fonctionne correctement.
Bonnes soirée, nuit et continuation.
Je te joins une première ébauche de ce que j'ai compris.
J'ai pas mal modifier les procédures, modules et noms pour pouvoir prendre en compte la création des menus
J'ai fortement restructuré les feuilles Accueil Menus et Saisie Menus
Pour le moment, seule la création MMR est en partie implémenté
Regarde tout ça pour voir si ça te convient, navigue dans le code et sur les formules
Dis-moi s'il y a quelque chose que tu ne comprends pas ou qui ne va pas
https://www.cjoint.com/c/IHCkkNouDXT
Bon appétit !!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'ai crée un nouveau menu midi retraite sans aucun problème. Que signifie BD MMR ? Dans la feuille Menus MMR, la colonne numéro menu se remplit automatiquement ? Là la colonne est remplie jusqu'à la fin du mois de janvier 2020 alors que certaines colonnes sont vides.
J'espère que cela ne t'ennuie pas que je te pose toutes ces questions. Pour moi, c'est une marque de politesse envers toi : je regarde ce que tu as fait et j'essaie de comprendre.
J(avais écrit un message (Signalement ou félicitations) dans lequel je me félicitais de t'avoir comme correspondant. J'espère que qu'il t'a été possible de le lire. Toujours est-il qu'il est toujours de rigueur et encore plus que le jour où je l'ai rédigé.
Ceci dit , bravo si la date du menu reste vide ou si elle est erronée (j'ai essayé de créer un menu midi retraite pour un samedi, j'ai eu un message comme quoi ce n'était pas possible. J'ai supprimé (sans le sauvegarder), le clearcontent des cellules devant être saisies, cela a ien donné le résultat escompté.
Ci-joint une version un peu plus avancée et dans laquelle j'ai pu tenir compte de tes remarques https://www.cjoint.com/c/IHCrf5FCnET
Le tableau Destination se trouve dans la feuille Référentiels car j'ai commencé à éclaté la liste CodeProduit en plusieurs petits tableaux beaucoup plus facile à gérer en créant les noms correspondant, je n'utilise plus les listes avec la fonction DECALER qui sont trop compliquées à modifier
Pour le moment le tableau JoursFériés (automatique selon l'année) me sert à renseigner automatiquement la cellule Observation quand on crée un menu pour un jour férié
La génération des dates dans le tableau Menus MMR est elle aussi automatique en fonction de l'année choisie (sauf erreur résiduelle)
J'ai fait un peu le forcing aujourd'hui car d'ici la mi septembre je ne vais être dispo que 2 jours en début de semaine prochaine alors profite de bien regarder cette version et pourquoi pas de l'améliorer et la compléter.
Dis-moi surtout si cela te convient et si je continue dans ce sens. il y a toujours des améliorations ou des évolutions à apporter.
Cordialement
shBDMenus.ListObjects("TableMMR").Sort.SortFields.Add2 _
Key:=Range("TableMMR[#All,[Date menu]]"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'Trier la table BD MMR selon les critères de tri renseignés précédemment
With shBDMenus.ListObjects("TableMMR").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
-Dans la nouvelle version, feuille saisie MMR, les cellules A5 (Intitulé menu) et A6 (Numéro création menu) n'existent plus. Je n'ai pas examiné les codes, la réponse y est peut-être.
BUDGETS
Ci-joint fichier qui devrait fonctionner
https://www.cjoint.com/c/IHCtG5JWHNT
J'ai remplacé Intitulé et n° création qui me semblait inutiles par Code menu et Nom menu qui serviront si on mets tous les menus dans la même BD
Cordialement
INDEX(TableProduits#Données;EQUIV(B$12;TableProduits[Code produit];0);EQUIV($A13;TableProduits#En-têtes;0));"-")
La syntaxe de la fonction INDEX est INDEX(Tableau; n° ligne;n° colonne), elle va chercher dans le Tableau la cellule située à l'intersection N° Ligne et N° Colonne, ici TableProduits#Données c'est toutes données de la TableProduits, soit de A2 à O146
EQUIV(B$12;TableProduits[Code produit];0) permet de connaître le N° de ligne du contenu de la cellule B12 dans la colonne Code produit de la table Produits soit de E2 à E146
EQUIV($A13;TableProduits#En-têtes;0) permet de connaître le N° de colonne du contenu de la cellule A13 dans la première ligne de la table produits (en tête) soit de A1 à O1
En imbriquant ces deux EQUIV dans INDEX on atteint la cellule souhaitée
Cela paraît compliqué mais on n'a plus à gérer de Listes avec la fonction DECALER
De plus en mettant correctement les symboles $ dans les cellules B12 et A13, on peut copier cette formule dans les différents emplacements sans avoir à la modifier. Magique, n'est ce pas?
Sur ce je vais me coucher, travaille bien, tu peux peux-être initialiser les feuilles Saisie MJ ou saisie MVWE sur le modèle de Saisie MMR et écrire le code correspondant ou tout autre chose.
A plus tard
Pour être franc, j'envisageais de travailler moi-même sur les feuilles concernant la saisie des menus journaliers et des menus viandes weekend. Je suis bien content que le grand maître me l'ait suggéré.
Il s'agit peut-être d'un problème de version d'excel.
Tu peux supprimer l'appel de la fonction TrierTableMenus en fin de procédure ValiderCréationMMR ou essayer de coder la procédure TrierTableMenus comme l'est la procédure TrierTableProduits.
Je n'ai pas le temps d'en faire plus.
Bon courage
D'avance merci .
Comme prévu, j'ai refait un fichier en partant du tien. Et là, j'ai découvert quelque chose de très intéressant : j'ai crée une feuille shRéférentiels;Dans dans cette feuille shRéférentiels, j'ai crée divers tableaux (20 au total) : quand j'ai voulu créé les noms définis, pour le premier, on m'a dit que ce nom existait déjà. Donc avec ta méthode, la création de petits tableaux individuels entraîne automatiquement la création des noms définis. À moins que, comme j'ai fait un copier-coller du contenu de chaque colonne à partir de ton fichier, les noms définis sont repris automatiquement.
D'avance merci de me donner ton avis.
Non, la mise sous forme de tableau, au sens Excel, ne génère pas automatiquement la création de noms définis, hormis celui du tableau. C'est probablement que tu as récupéré les noms déjà existants lors de ta copie.
Poste ton fichier et je ferai une vérification dessus.
Pour Modifier Menus et Supprimer Menus tu souhaites que j'initialise les feuilles, et/ou le code VBA ? De toutes façons il faut savoir quelle info va nous permettre de sélectionner le menu à modifier ou supprimer. moi je pense à la date mais comme il y aura beaucoup de menus (>100) une liste déroulante de me paraît pas adéquate. As-tu des idées ?
Comme je te l'ai dit, j'ai juste deux jours cette semaine et pas trop de temps.
Cordialement
Effectivement, il ne définit que le nom de tableau. Je m'en suis aperçu hier quand j'ai voulu créer une validation des données. J'ai compris comment faire à partir de ton fichier.
Pour la modification et la suppression des menus, initialise une feuille et son code (par exemple menus midi retraite);à partir de celle-ci, je ferai les deux autres (cela m'apprendra et me permettra de comprendre le code). La modification et la suppression pourront se faire à partir de la feuille BD Menus (et se répercuter dans les feuilles Menus MMR, Menus MJ et enfin Menus VWE);Je pensais créer une colonne Intitulé (Code produit + numéro menu), la colonne à modifier devra être à oui et cela modifiera ou supprimera une ligne complète.
Ci-joint une proposition pour tout ce qui concerne les menus midi retraite.
J'ai vérifié qu'elle fonctionnait avec Excel 2010.
Teste cette version, il peut encore y avoir des bugs ou des disfonctionnements, et dis-moi ce que tu en penses.
(Tiens d'ailleurs, je me rends compte à l'instant que je n'ai pas traité le oui ou le non dans la colonne "A modifier" )
https://www.cjoint.com/c/IIeo4BrRVuj
Finalement j'ai encore un peu de dispo cette semaine, mais pas du tout la semaine prochaine.
Cordialement
Merci d'avoir consacré du temps à notre fichier. J'ai testé la modification (j'ai eu un peu de mal au début puis je me suis rendu compte que dans la feuille Accueil menus on pouvait modifier la date) et, à partir de là, cela a été le nirvana : possibilité de modifier un légume, une viande et répercussion dans les feuilles BD MENUS et MENUS MMR. Même chose pour la suppression. Par contre, je n'ai pas compris ce que tu as voulu dire pour ce qui concerne la colonne à modifier : j'ai fait un essai à modifier Oui, puis un autre à modifier à Non, et cela a fonctionné aussi.
Hier soir, j'ai fait trois découvertes : feuille Menus MMR : colonne Numéro menu : la formule (que je n'ai d'ailleurs pas compris dans sa totalité) implémente automatique le nouveau numéro menu; deuxième découverte : concernant toujours la colonne numéro menus, en survolant la cellule G5 avec la souris, un commentaire apparaît dans un encadré au fond jaune. Pourquoi les premiers A5 sont en référence absolue, que le second A5 (et ainsi de suite, il s'implémente de 1 à chaque ligne) n'est ni en référence absolue ni en référence relative Troisième découverte : le même phénomène se produit avec la cellule F5 en ce qui concerne l'explication.
Pour ce qui est du tri table MMR : je n'ai plus de message d'erreur : j'ai comparé avec les instructions de TrierTableauProduits : j'ai constaté quelques mots qui n'existaient pas dans ces instructions. Je les ai supprimées de tri table MMR et je n'ai plus eu d e message d'erreur.
J'ai recommencé un nouveau fichier : penses-tu qu'il soit possible de créer la feuille produits sur le même principe que pour les menus midi retraite : en gros, j'aurai une feuille saisie Desserts (avec Dessert midi retraite, dessers soir, desserts weekend) au lieu de Légumes, viandes, dessert, une feuille saisie légumes, une feuille saisie viandes et, dans chaque feuille, un bouton général Validation Création ou, pour les desserts en exemples, un bouton Validation création dessert midi retraite, un bouton validation création desserts weekend ? Les renseignements saisis iront dans une feuille unique Produits. Pour la feuille Référentiels, je l'ai crée avec des tableaux à deux colonnes (code, nom).
Désolé pour le manque d'infos mais je voulais te faire parvenir le fichier au plus vite.
Ci-joint quelques explications ainsi que le fichier corrigé des quelques erreurs indiquées.
https://www.cjoint.com/c/IIfjQiub5RL
https://www.cjoint.com/c/IIfjSbIAo2L
Je n'ai pas trop compris ce que tu voulais faire sur la feuille Produits. Tes produits sont déjà créés, alors restructurer les feuilles Accueil, Saisie et Modification produits risque de d'entraîner dans pas mal de soucis.
Mais tout est possible avec du temps !
Cordialement
Bonnes soirée, nuit et continuation.
J'ai compris pas mal de choses mais pas tout.
Pour l'instant, je voudrais savoir ceci : l'écriture des codes des feuilles concernées et des modules :
1) Écrire d'abord le code des feuilles qui en ont un et ensuite celui des modules ou d'abord celui des modules et ensuite celui des feuilles qui en ont un ?
2) Pour les feuilles et les modules, quel ordre suivre : en premier le code de la feuille (son nom), ensuite celui de telle feuille (donner son nom) et ainsi de suite jusqu'à la dernière feuille. Même chose pour les modules.
Merci pour ta réponse.
Bonnes soirée, nuit et continuation.
Dans ton cas l'ordre d'écriture des procédures n'a pas vraiment d'importance, tout dépend de la fonctionnalité que tu veux implémenter (et tester !).
Les procédures dans les modules sont celles qui seront déclenchées par un bouton d'action (exemple validation création menu) tandis que celles des feuilles sont les procédures évènementielles qui seront déclenchées par un évènement (exemple le changement de valeur d'une cellule, le choix dans une liste).
Par contre il vaut mieux que tu nommes proprement tes feuilles avant de coder, ce sera plus facile.
Et surtout, teste ton code dès que tu as écrit une procédure partiellement ou totalement, sinon la mise au point sera plus difficile.
Cordialement
Nous partageons les mêmes convictions : je crée toutes mes feuilles et les remplis manuellement avant de coder, ce qui permet d'avoir une liste déroulante automatique quand cela est nécessaire. Je fais souvent Compiler VBAProject pour démasquer les éventuelles erreurs puis je teste ensuite.
J'ai travaillé sur les menus viandes weekend. J'ai crée les feuilles d'après ce que tu as fait pour les menus midi retraite;j'ai créé ensuite les modules selon le même principe que pour les menus midi retraite. Ensuite, j'ai examiné le code des feuilles (si il y en avait un) et si j'ai compris, j'ai fait un copier coller vers la feuille correspondante pour menus viandes weekend en modifiant, si nécessaire, les références menus midi retraite en menus viandes weekend. Même principe pour les modules. Hier j'ai compris, enfin presque compris, le module ModuleMR.GénérerMenusMMR. Aujourd'hui, je vais créer le code de ce module pour les menus viandes weekend. Par contre, pour certains modules, pour l'instant, je n'ai rien compris quant au code. Ce soir, je t'enverrai mon fichier pour que tu examines mes commentaires que j'ai créés moi-même car absents dans ton fichier.
Bonne journée et continuation.
Feuille shRéférentiels : création d'un nouveau tableau à deux colonnes (TableauJours : Numéro jour, Noms jours) avec les noms définis adéquats.
Feuilles shAccueilMenus : validation des données dans les cellules C7, C11, C15, D7, D11, D15, I7, I11, I15, J7, J11, J15, O7, O11, O15, P7, P11, P15; Création de la formule ='Accueil Menus'!D1 dans les cellules E7, E11, E15, K7, K11, K15, Q7, Q11, Q15.
Création de deux menus midi retraite en date des 15 et 16 avril 2019 (le tri tableau s'est bien effectué).
Code de la feuille shAccueilMenus : je n'ai rien modifié (si une modification est nécessaire, me dire laquelle).
ModuleMR_générerMenusMMR : voir la question posée concernant le dim.
ModuleVW_CréerMVWE (code) : les procédures ont été créées (pas d'erreur lors de la compilation).
ModuleVWE_ModifierMVWE : les procédures ont été créées (pas d'erreur lors de la compilation).
Les commentaires sont ceux des feuilles correspondantes à MMR et que tu as écrits toi-même.
Dernière demande : j'ai créé les feuilles VWE et les modules VWE d'après ceux MMR : sauf erreur ou omission de ma part, j'ai repris le même système d'attribution des noms (si tu constates une erreur (ou plusieurs), merci de me la (les) signaler. J'ai mis dans chaque module les mêmes procédures telles qu'elles figurent dans les modules MMR.
Pour les autres modules, je verrai cela demain. Si un module me pose problème, je te demanderai des explications (si tu es d'accord) avant d'écrire le code VWE concerné. Je crois en avoir vu un dans lequel des lettres E et H sont utilisées alors que dans une feuille ces colonnes sont vides.
Bonnes soirée, nuit et continuation.
https://cjoint.com/c/IIqsmDPeq26
C'est un début !
Quelques remarques :
Tu as des erreurs de compil. (shSaisieVWE au lieu de shSaisieMVWE)
Tu as saisi ta liste des jours (1 à 31) sous forme de texte, c'est embêtant, il vaudrait mieux le mettre sous forme de nombre et l'afficher avec un format personnalisé 00
Dans la feuille Menus VWE tu as saisi les dates apparemment à la main, c'est fastidieux, on peut mettre des formules pour les générer automatiquement
Attention dans la procédure Créer VWE les cellules de date à tester sont dans les colonnes O, P Q et non plus C, D, E
Dans la feuille BD Menus supprime les lignes de l'année 2020 si tu veux faire les tests sur l'année 2019 (mélange d'années pas prévu)
Et peut-être d'autres choses après ...
Surtout bien mettre au point la création VWE avant de passer à la suite, suppression, modification, ...
Si tu veux je peux te faire ces modifs et te renvoyer ton fichier
Cordialement
Oui, je veux bien que tu fasses les modifications et me renvoyer mon fichier. Merci pour ton aide. Bonnes journée et continuation.
Feuille Menus vwe : ce n'était qu'un projet. C'est pour cela que les dates étaient manuelles.
Dans le moduleMR_GénérerMenusMMR, peux-tu me donner les explications demandées ? D'avance merci.
Que représentent IciBis, I et J ? I représenterait la colonne date de la feuille shBDMenus, J serait affecté à la colonne Date de la
'feuille shMenusMMR ou au contenu de la cellule A3, A30, etc. de la feuille shMenusMMR; IciBis : je ne sais pas. En tout état de cause cela devrait être des nombres entiers
'puisqi'ils sont de type long. Pourquoi utiliser toujours I et J dans les formules (j'ai plusieurs livres où c'est toujours I et J qui sont utilisés. Pourquoi pas une ou plusieurs autres
'lettres ?)
Liste des jours : j'ai juste transformé en format nombre et mis un format personnalisé uniquement sur la feuille Accueil Menus car c'est là qu'ils sont utilisés
ModuleMR_GénérerMenusMMR : je n'avais pas vu tes commentaires, la syntaxe de la collections Cells est Cells (n° ligne, n° colonne). Donc dans la procédure I représente la ligne courante dans la feuille BD menus et J représente la ligne courante dans la feuille menus MMR, en gros pour chaque ligne (colonne date) de la feuille BD Menus on boucle sur toutes les lignes (colonne date) de la feuille Menus MMR jusqu'à trouver une égalité de dates. IciBis représente alorsla ligne de la feuille Menus MMR dans laquelle on va insérer les éléments.
Ces variables sont de type Long entier allant jusqu'à 2 147 483 648 pour pouvoir atteindre toutes les lignes de la feuille (1 048 576), mais un Integer entier allant jusqu'à 32 767 aurait largement suffit.
On utilise très souvent les indices I, J, K dans les tableaux ou les boucles comme en mathématique mais n’importe quel autre nom ferait aussi bien l'affaire, c'est plus une convention.
Cordialement
Tu as raison d'insister, j'ai fait vite et je n'ai mis ce format personnalisé que sur les cellules O7, 11 et 15 de Accueil Menus !
Il faut prendre le format personnalisé et dans Type mettre 00 pour les cellules C7, 11 et 15 et I7, 11 et 15.
Pour que ce format soit appliqué dans la liste déroulante il faut également le mettre dans le tableau Liste jours.
00 signifie afficher les nombres avec deux chiffres minimum et afficher un zéro sur les chiffres non significatifs, en clair 1 est affiché 01, mais c'est réellement un nombre et non pas du texte?
Pour accéder directement à la fenêtre Format Nombre tu peux utiliser la petite flèche en bas à droite du groupe Nombre de l'onglet Accueil (et qui s'appelle Lanceur de boites de dialogues)
Cordialement
J’ai plusieurs autres remarques :
Si tu ajoutes des feuilles dans le fichier, il va falloir différencier les noms des feuilles Accueil (Produits et Menus) et modifier le code VBA en conséquence.
Ta gestion du nom CodesLégumes avec la fonction DECALER est risquée car elle nécessite que la feuille Produits soit triée correctement, sinon elle est fausse, de même si tu ajoutes ou supprimes un produit dans la table Produits
Je suppose que tu veux créer une table des menus sur une autre feuille et pas simplement sur les colonnes H à L de la feuille SM, il serait bien que tu précises les colonnes constituant cette table.
Sur ta feuille SM, quels sont les codes (légumes, viande, dessert) qui dépendent des codes menus CD01, CD02, CD03, que tu as appelé destination dans les feuilles Référentiels et Produits.
En clair, précise le mode opératoire que tu veux mettre en œuvre.
Cordialement