Signaler

Type de variables et quels objets ?

Posez votre question BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - Dernière réponse le 24 avril 2017 à 09:11 par BUDGETS
Bonjour à toutes et à tous,

Dans le fchier joint, je vous expose mon projet et les questions qu'il m'impose.
D'avance merci de votre aide précieuse.

http://www.cjoint.com/c/FKlqnng6CgJ

Les modèles de fichiers :
http://www.cjoint.com/c/FKlqXSdfxdJ
http://www.cjoint.com/c/FKlqYG8wmEJ


Afficher la suite 
Utile
+1
plus moins
Bonjour,

Je veux bien continuer à t'aider mais je ne comprends pas du tout ton raisonnement et j'ai assez de mal à cerner en quoi consiste exactement ton projet.

J'ai bien quelques bribes d'informations :
- « J'envisage de créer des formulaires afin de prévoir mes menus 2017 »
- « afin de ne pas avoir à recommencer tout d'une année à l'autre »
- « quand je tape un code légume, que tout le reste puisse s'inscrire directement »

Pour t'«éviter de recommencer continuellement la même chose » il faudrait que tu définisses clairement et en détail quels sont les objectifs de ton application et quels sont les différents modes de fonctionnement attendus.

D'après le peu que j'en ai compris après nos nombreux échanges :
- Tu veux réaliser ton projet avec Excel et du VBA.
- Tu voudrais un formulaire pour définir la composition, planifier et historiser des menus alimentaires pour un ou plusieurs destinataires. Ces menus sont composés d'un ou deux légumes, d'une viande et d'un dessert.
Un code, associé à chacun de ces éléments, permet de définir sa destination, les jours, les quantités, ... Il serait utilisé pour faciliter la saisie de la composition.
- Tu voudrais un autre formulaire pour définir les codes.

Pour ça, je t'ai dit que ton projet VBA pourrait contenir entièrement dans un seul fichier qui contiendrai les formulaires et la ou les bases de données (sous Excel, une base de données = un ou plusieurs tableau).

Mais il reste des questions fondamentales, notamment est-ce que la composition des menu et la planification sont dissociées.
Il est probable qu'au final il faudra deux fichiers, un pour les outils et l'autre pour historiser la planification.

Avant de se lancer dans la création des macros et des formulaires, il faudrait commencer par réaliser le ou les tableaux résultats attendus (avec des exemples des données). De là en découleront les autres tableaux nécessaires et l'architecture des formulaires et finalement les macros.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 16 nov. 2016 à 11:10
Bonjour Patrice,

J'espère que tu vas bien.
En pièce jointe, le fichier Menus 2015 avec les différents onglets. La feuille Liste de choix permet de définir tous les codes, noms , etc. qui sert à remplir la feuille saisie des menus. Les champs de cette feuille remplis, je clique sur Valider. Et selon les instructions de if.then, les données validées sont transférées soit dans la feuille Menus midi retraite, soit dans menus journaliers ou menus viandes week-end. Les feuilles menus midi retraite, menus journaliers et menus viandes week-end servent, grâce à la fonction somme.si, à remplir les feuilles quantités. Pour 2016, je me suis servi de la fonction somme.si.ens

http://www.cjoint.com/c/FKqj4M7ShtU

Je pense que ce fichier va t'aider à connaître les réponses aux questions que tu te poses et que tu me poses.
1) Avec les formulaires, créer un module et un UserForm qui corresponde à la liste de choix.
2) À partir de ce module et de cet UserForm, créer une liste de choix pour chaque article (sans les quantités et sans les mois concernés)
3) À partir du 2), saisir les données pour les menus 2017 dont les données iront soit dans un fichier unique à trois ou quatre feuilles, soit dans des fichiers individuels (menus journaliers;menus midi retraite, menus viandes week-end);Personnellement je préfère le fichier unique.
Par formulaires, je pense que tout pourrait être contenu dans deux fichiers.xlsm : classeur menus.xlsm avec plusieurs onglets, Menus.xlsm avec plusieurs modules et UserForm. Si j'emploie la fonction somme.si.ens, le classeur sera d'extension xlsx;si je le fais par macro (pour les quantités et l'impression), il sera alors d'extension xlsm.
Bonnes journée et continuation.
Merci pour ton aide.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Le type des variables doit être choisi en fonction de ce qu'elles représentent:
- chaine de caractères : String
- date : date
Pour le nombres, selon la valeur maximum de la variable :
- décimal avec 2 décimales : Single, Double ou Currency
- nombre entier : Byte, Integer ou Long
Voir ici:
https://msdn.microsoft.com/fr-fr/library/office/gg251528.aspx
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 15 nov. 2016 à 18:36
Bonjour Patrice,

J'espère que tu vas bien.
Une question : j'ai, dans mon programme, private sub cmdAjoutParamètres_click
J'y ai déclaré toutes mes variables.
J'ai public sub RemplacerParamètres()
J'y ai de nouveau déclaré toutes mes variables.
Ma question est celle-ci : si j'ai bien compris la différence entre public et private, mettre public sub cmdAjoutParamètres_click m'éviterait d'avoir à déclarer de nouveau mes variables puisque le code se trouve dans le même UserForm ? Je n'aurai plus à les déclarer dans RemplacerParamètres et CréerParamètres.
Ou bien faut-il les déclarer dans un module (ici Listedechoix) et sous quelle forme pour qu'elles soient utilisables dans tout le classeur ?
Bonnes soirée et continuation.
Merci pour ton aide.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonsoir Patrice,

Décision prise : un seul fichier xlsx (Classeur liste de choix avec trois feuilles) et un seul fichier de création (Menus.xlsm) avec deux modules et deux userform.
Pour m'éviter de recommencer continuellement la même chose, j'espère compter sur toi pour me donner ton avis à chaque chose faite.
donc je te joins les deux fichiers pour que tu me dises 1) ce que tu en penses; 2) pour m'indiquer où je dois déclarer les variables (certainement dans le module ListeDeChoix) puisque pour l'instant je ne travaille que sur la liste de choix.
http://www.cjoint.com/c/FKlu14ajxVJ
http://www.cjoint.com/c/FKlu2TP1H8J

J'ai rectifié classeur menus.xlsx par classeur liste de choix.xlsx dans le module Listedechoix.
Merci pour ton aide précieuse.
Bonnes soirée et continuation.

Donnez votre avis
Utile
+0
plus moins
Bonjour,

Effectivement avec ce fichier je comprends un peu mieux ce que tu voudrais faire :
- planifier 3 types de menus : journalier, midi retraite et viande week-end.
- éditer la planification mensuelle ou semestrielle selon le type
- calculer les quantités annuelles de légumes, viandes et desserts

Est-ce bien cela, y a-t-il d'autres besoins ?

Pour cela j'utiliserais :
- un formulaire de saisie des menus (onglet ou userform)
- un onglet pour la base de données des options de saisie (listes de choix)
- un onglet (un seul) pour mémoriser les saisies (un peu comme ton janvier)
- un onglet pour éditer la planification
- un ou plusieurs onglets de calcul

Au vu de ton exemple je me pose un certain nombre de questions :
- pourquoi demander la date et le mois ou le trimestre, peuvent ils être différents ?
- la liste de choix est-elle exhaustive ? par exemple, le cassoulet c'est toujours Lundi ou Mardi ?
- l'utilisation d'un code légume est-elle plus simple que le choix d'un légume (ou viande ou dessert) ?

Dans code VBA du module, je constate que :
- le module ne commence pas par Option Explicit
- aucune variable n'est déclarée
- le code n'est pas indenté
- tu utilises Select et ActiveCell
Pourquoi tu donner des conseils si ne les respectes pas ?
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 16 nov. 2016 à 16:46
Bonjour Patrice,

L'exemple que je t'ai envoyé a été fait à partir d'un livre (Vos tableaux Microsoft Excel en quelques clics de Pierre Polard) et il n'y aucun formulaire, d'où l'absence d'option explicit, de déclaration de variable. Pour Select et activecell, j'ai repris l'exemple du livre. Pour Indenter, je ne connaissais pas ce terme, donc je ne risquai pas de le faire d'une part et, je ne connais pas trop les critères pour indenter : une ligne au début, sur quoi se baser pour décider que la seconde sera en retrait et ainsi de suite.
Un lundi et le lendemain; ce sera du cassoulet, le lundi et mardi suivant de la choucroute et ainsi de suite jusqu'à l'épuisement de la liste des légumes des lundis et mardis
;même principes pour les mercredi et jeudi, le vendredi, le samedi et le dimanche. Même principe pour les menus midi retraite, les viandes week-end.
Pas compris la question date ni l'utilisation d'un code.
Pour la partie "Pour cela j'utiliserai" dont tu parles, un exemple me serait plus parlant car j'avoue ne pas avoir bien compris (toujours pareil : je comprends vite mais il me faut expliquer longtemps).
Avec l'utilisation des formulaires, j'ai prévu une partie qui correspondrai à la liste de choix, une autre pour la saisie (avec l'utilisation de la partie liste de choix), un ou plusieurs classeurs pour recevoir les données validée et, enfin, une partie pour le calcul des quantités et pour l'impression (quantités avec des fonctions mais pas obligatoirement par macro, impression avec macro (j'ai un exemple dans un livre que j'envisage de modifier pour répondre à mes besoins).
J'espère avoir répondu, pas forcément au mieux, à tes interrogations.
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 16 nov. 2016 à 20:04
Re,

Je ne connais pas ton livre de chevet mais s'il est farci de mauvaises méthodes, il faut le laisser tomber.

Dans l'apprentissage du VBA (et des autres langages), il est primordial d'acquérir les bonnes méthodes dès le début. Ce n'est que bien plus tard, avec l'expérience, que l'on pourra choisir de s'en passer.

Les bonnes méthodes sont indiquées dans le cours que je t'ai conseillé.
Il ne faut pas mettre la charrue avant les bœufs : dans ce cours la chronologie d'apprentissage est respectée : on ne commence pas par les objets avant de savoir utiliser les variables, les opérateurs, les procédures et le fonctions.

Pour Option Explicit c'est chaque fois que tu écrit du VBA, pas seulement pour les formulaires !!!!

Quand je demande si « le cassoulet c'est toujours Lundi ou Mardi ? » je m'attend pas à ce que tu me parles de choucroute mais plutôt que tu tu dises si il est possible d'avoir du cassoulet mercredi jeudi ou vendredi ou samedi ou dimanche. Cela renseignerait sur l’exhaustivité ou non de ta liste !

Question date : dans ton formulaire, tu demandes deux informations qui me semblent redondantes et donc source d'erreur : la date du menu et le mois concerné. Ma question : « peuvent ils être différents ? » par exemple date du menu = 01/05/2016 et mois concerné = Novembre. Si le mois concerné est lié à la date du menu (comme c'est la cas dans la macro) c'est une source d'erreur que demander le mois concerné !

Question code légumes : quand tu saisiras les menus n'est-il pas plus simple de choisir un légume plutôt que choisir un code légume (sous entendu, connaitras-tu par cœur tous les codes légumes pour savoir à quoi ils correspondent) ?
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 16 nov. 2016 à 20:50
Non, il ne peut pas avoir de choucroute un mercredi, un jeudi, un vendredi, un samedi ou un dimanche. Uniquement un lundi et un mardi toutes les 14 semaines environ.
La date du menu et le mois concerné ne peuvent pas être différents. Le mois concerné me permet de vérifier que si la date est 16/11/2016 et le mois concerné Novembre, c'est qu'il n'y a pas d'erreur cela me sert de donner un nom qui sert pour l'impression. La date sera de forme jj/mm/aaaa ou jjjj (pour les jours), jj (pour le quantième du mois), mm, aaaa tandis que le mois concerné sera une chaîne de caractères (novembre ou novembre 2016).
Codes légumes : il sert à différencier les légumes lundi-mardi, mercredi-jeudi, vendredi, samedi, dimanche d'une part, et les menus journaliers des menus midi retraite (ceux-ci étant égaux aux menus légumes du vendredi partiellement). LLM = légumes lundi-mardi;LMJ = légumes mercredi-jeudi;LV = légumes vendredi;LS = légumes samedi;LD = légumes dimanche; D = dessert; V = viandes; LMR = légumes midi retraite; DMR = dessert midi retraite (il y en a qu'un);vmr = viandes midi retraite (il en a cinq). tout ce qui est légume deux, il y en qu'un (1 seul code, 1 seul nom (Asperges), jour dimanche : 1 seul jour (dimanche soir), conditionnement légume deux : 1 seul conditionnement (1 boîte pour 1 repas), destination légume deux : 1 seule (menus journaliers). Quant à connaître tous les codes par cœur, oui c'est presque cela mais j'ai imprimé tous les codes en cas de perte de mémoire..
Toi et bien d'autres, vous m'avez donné des exemples de programmation que je n'ai trouvé dans aucun livre : par exemple, toi tu m'as donné deux exemples de programmation de module et j'avoue que je ne sais pas lequel est le plus approprié : le plus court ou le plus long ?
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 20 nov. 2016 à 21:37
Bonjour Patrice,

J'espère que tu vas bien et que tu as passé une bonne journée.

Je reprends donc tout à zéro en tenant compte de tes modèles que j'ai imprimés.
Dans Menus.xlsm, partie cmdAjoutCodesLégumes, for ligne = 2 to., à l'exécution l'erreur dépassement de capacité apparaît. Comme toujours, les messages sont incompréhensibles.
Merci pour ton aide. Une fois ça fonctionne, la fois d'après, rien ne va plus. Je trouve cela emmerdant !
http://www.cjoint.com/c/FKuuJuz5BwW
http://www.cjoint.com/c/FKuuJ4SPGbW

Comme tu pourras le remarquer, je me sers de with et and with puisque j'ai compris à quoi cela sert.

Bonnes fin de soirée et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Tes fichiers corrigés en retour :
http://www.cjoint.com/c/FKux2Lupghe

J'ai remplacé « Classeur menus.xlsm » par « Classeur menus.xlsx » puisqu'il n'y a pas de macro dans ce fichier.

J'ai indenté le code, j'espère que tu comprendra :
- Une dent à partir de la première instruction d'une procédure (après les Dim) jusqu'à la dernière (avant le End Sub)
- Une dent supplémentaire après le With jusqu'au End With
- Une dent supplémentaire après le For jusqu'au Next
- Une dent supplémentaire après le If jusqu'au End iF
En d'autre termes, on ajoute une dent chaque fois qu'on écrit un groupe d'instructions situé entre une instruction de début qui nécessite une instruction de fin et cette instruction de fin.

Ton problème de dépassement de capacité vient du fait :
- d'une part que tu as déclaré Ligne comme entier (integer) et donc que sa valeur maximum est 32767.
- d'une part que l'instruction : .Range("A1").End(xlDown).Row donne pour résultat 1048576 (la dernière ligne de la feuille).

Tu peux vérifier cette dernière instruction manuellement :
- Ouvres le fichier Classeur menu
- Sélectionne A1
- Appuis sur les touches ctrl + flèches vers le bas
Quand il n'y a rien en A2, tu te retrouve ligne 1048576 !!!

La solution c'est :
- Sélectionne A1048576 (la dernière cellule de la colonne)
- Appuis sur les touches ctrl + flèches vers le haut
Et là tu est sur la dernière ligne utilisée

J'ai donc corrigé ces deux erreurs dans cmdAjoutCodesLégumes_Click (et dans les autres procédures):
Dim Ligne as Long
' au lieu d'Integer
et
For Ligne = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
.

D'autre part, plutôt qu'utiliser CreateObject qui pose un problème avec mes versions d'Excel, je préfère ouvrir le fichier avec Workbooks.Open().
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 21 nov. 2016 à 20:42
Bonsoir Patrice,
J'ai plusieurs modules et formulaires. Pour le formulaire CodesLégumes, la transmission des données dans le classeur menus ne pose aucun problème. Pour le formulaire Légumes, cela sort une erreur : nom ambigu détecté et classeurmenus est encadré de bleu. Comment y remédier en sachant que je souhaite, dans la mesure du possible, n'avoir qu'un seul classeur à plusieurs feuilles.
D'avance merci de ton aide.
Bonnes soirée, nuit et continuation.
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 22 nov. 2016 à 08:59
Bonjour,

Sans les fichiers, c'est pas facile d'examiner le code VBA !
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 22 nov. 2016 à 09:35
En attendant les fichiers ...
Pour éviter ce genre de problème (nom ambigu) il est conseillé de respecter un minimum de règles typographiques notamment par l'emploi d'un préfixe comme expliqué ici : http://argyronet.developpez.com/office/vba/convention/
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 22 nov. 2016 à 19:54
Bonjour Patrice,

Il m'a été donné des informations pour tous mes problèmes. Les rectifications effectuées, cela fonctionne correctement. Je te joins les deux fichiers.
http://www.cjoint.com/c/FKws1tnN5CW
http://www.cjoint.com/c/FKws2clnM5W
Bonnes soirée et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 22 nov. 2016 à 09:43
Bonjour Patrice,
J'espère que tu vas bien.
voici les deux fichiers (à la date du 21 novembre 2016).
http://www.cjoint.com/c/FKwiKEiAejW
http://www.cjoint.com/c/FKwiLtf08lW
C'est dans le fichier Menus.xlsm que l'erreur "Nom ambigu détecté" apparaît : dans la feuille1 dudit fichier, je clique sur créerlégumes: le formulaire frmLégumes apparaît : dans le combobox, je tape Cassoulet : je clique sur AjoutLégumes : l'erreur apparait : dans le débogage, dans la partie Private sub cmdAjoutLégumes_click, à la ligne with classeurmenu.sheets("Paramètres"), l'expression Classeurmenus s'entoure de bleu.
Merci pour ton aide précieuse.
Bonnes journée et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Voici un exemple de ce que j'aurais fait pour gérer les codes légumes (et les autres) :
http://www.cjoint.com/c/FKxlXAF7Jze

Tout dans le même fichier, essaies-le , tu comprendras facilement le fonctionnement.
Si ça te convient, je te laisses analyser le VBA pour terminer la partie concernant la destination des légumes.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 10 déc. 2016 à 18:41
Bonjour Patrice,

J'espère que tu vas bien. Je pense souvent à toi pour le travail que tu as fait. J'ai fait des essais concluants en ce qui concerné les légumes. Il y a un petit problème : les boutons de commande Ajouter ce code, supprimer ce code, retour fonctionnement correctement. Mais le bouton de commande modifier ce code reste inerte, grisé : impossible de le faire fonctionner. Pourrais-tu m'expliquer la manière de m'en servir : peut-être est-il nécessaire de faire quelque chose avant de cliquer dessus.
Encore merci pour ton aide passée et à venir.
Bonnes soirée et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour Patrice,

Merci pour ton aide. Le peu que j'en ai vu du travail que tu as fait me convient. Je vais imprimer les codes et la (les) feuille(s) formulaires et étudier cela sérieusement. Encore un grand merci.
Sans vouloir t'offenser ni t'offusquer, dis-moi sincèrement si tu veux que je te paie quelque chose pour ce laborieux travail effectué. Dans l'affirmative, je me mettrai en relation avec ma curatrice pour les modalités de paiement (je suis en curatelle renforcée par décision judiciaire).
Bonnes journée et continuation.

Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 23 nov. 2016 à 14:09
Re,

Sur ce forum, nous sommes tous bénévoles.

En plus l'exemple ci-dessus n'est qu'une ébauche de ton projet.

Ce que j'espère surtout, c'est que tu comprennes comment ça fonctionne pour que tu puisses terminer cette première étape.
Mettre en œuvre le dernier cbo ne sera pas très compliqué, mais il ne suffit pas d'ajouter les procédures correspondantes, il va te falloir étudier chaque procédure existante pour modifier la partie concernée par cet ajout.

Bon courage
Patrice
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Absent depuis quelques jours, je viens de voir ta question : « le bouton de commande modifier ce code reste inerte, grisé : impossible de le faire fonctionner. Pourrais-tu m'expliquer la manière de m'en servir : peut-être est-il nécessaire de faire quelque chose avant de cliquer dessus. »

Pour que le bouton "Modifier ce code" soit activé, il faut remplir 2 conditions:
- avoir sélectionné le code à modifier avec la liste déroulante "code légume"
- avoir modifié une ou plusieurs des données correspondant à ce code (c'est-à-dire modifier Légume, Jours légume, ou/et Conditionnement légume).
Dans ce cas, l'action sur "Modifier ce code" aura pour effet de modifier les données correspondant à ce code dans la base de données.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 5 févr. 2017 à 21:53
Bonsoir Patrice,

J'espère que tu vas bien.

Je vais travailler sur le travail que tu m'as fait. Merci de me répondre à la proposition suivante : un fichier unique avec plusieurs modules et formulaires. Lecture des données dans un onglet unique à plusieurs parties (partie menus retraite, partie menus journaliers, partie menus viandes weekend, partie quantités légumes, partie quantités viandes, partie quantités desserts) ou dans différents onglets (onglet menus retraite,onglet menus journaliers, onglet menus viandes weekend, onglet quantité légumes, onglet quantités viandes, onglet quantité desserts). Ta réponse : un seul onglet oui non; Plusieurs onglets : oui non.
D'avance merci pour ta réponse.
Bonnes fin de soirée, nuit et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Merci pour ta réponse je vais essayer.
Donnez votre avis
Utile
+0
plus moins
Bonsoir Patrice,

J'espère que tu vas bien.

Je viens d'essayer ta manipulation ci-dessus et cela a fonctionné correctement. L'année prochaine, j'étudierai en détail tout ce que tu m'as fait. J'ai déjà lu (après l'avoir imprimé, c'est plus facile) ton code. J'ai compris certaines choses, d'autres non. Une très bonnes idée d'avoir prévu modifier et supprimer. Félicitations. Je n'aurai jamais été capable d'écrire un tel programme.
Bonnes soirée, nuit et continuation.
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Avant de parler de menus, as-tu terminé le développement du premier outil qui permet de créer, modifier et/ou supprimer les "codes" (chacun son langage mais moi j'appellerais ça des références plutôt que des codes), que ce soit pour les légumes, pour les viandes ou pour les desserts ?

L'idée c'est d'utiliser un formulaire unique pour cela avec toutes les données dans un même onglet. La base de travail est le fichier que je t'avais fourni dans ce post le 23 Nov 2016 à 12h52.

Quand cet outils fonctionnera, mais pas avant, tu pourras envisager, dans le même classeur, un autre outil (un autre formulaire) pour créer les menus, qui seraient enregistrés dans un ou plusieurs autres fichiers, pour une historisation, c'est-à-dire des simples fichiers de données sans aucune macro.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 6 févr. 2017 à 17:22
Bonjour Patrice,

J'espère que tu vas bien.

Merci pour ta réponse. J'ai créé la feuille Accueil, l'onglet Données, je suis en train de créer le formulaire dont le nom est devenu frmRéférencesLégumes (vu ce que tu as fait, c'est beaucoup plus explicite), le module MRéférencesLégumes, le module MCommun (pour lequel je n'ai pas compris grand chose). Quand mon formulaire sera entièrement construit, quel code devra être écrit en premier : le code de MCommun ? le code de MRéférencesLégumes ? le code du formulaire frmRéférencesLégumes ?
D'avance merci pour ta réponse.
Bonnes soirée et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 6 févr. 2017 à 22:04
Onglet Accueil : clic droit, visualiser le code :
1) Les commentaires ont été tapés par toi ou sont-ils sortis automatiquement ? Si sortie automatique, comment procéder ?
2) mcodes (nom du module). Quand on tape le point, une liste déroulante apparaît avec le nom des différents boutons de commande de l'onglet accueil.Comment cette liste déroulante se construit-elle ? Dans mon nouveau fichier; je n'ai pas de liste déroulante.je viens d'avoir une petite idée : j'attends ta réponse pour voir si elle correspond à mon idée que je vais aller vérifier.
Bonnes fin de soirée, nuit et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
1) Dans le code VBA, les commentaires sont écrits par le concepteur

2) « mcodes (nom du module). Quand on tape le point .... » cela s'appelle l'intellisense : ça marche bien mieux lorsqu'on utilises Option Explicit en début de module car toutes les variables sont déclarées et donc connues du VBA qui peut proposer les méthodes et les propriétés correspondantes.

«le formulaire dont le nom est devenu frmRéférencesLégumes» Pourquoi ne fait-tu pas plus simple : frmRéférences qui servirait aussi bien pour les légumes que pour les viandes ou les dessert !

Un exemple à développer :
http://www.cjoint.com/c/GBgw6NwtcUK
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 9 févr. 2017 à 15:51
Bonjour Patrice,

module MCodes : public sub triCodesLégumes()
with shDonnées : sur cette ligne, erreur : variable non définie.
Merci de me répondre franchement car jusqu'ici tu ne m'as pas répondu à mon interrogation : aucune variable n'est définie dans tes différents codes.Je n'ai pas encore taper le code du formulaire, peut-être est-ce une cause à effet.
Bonnes fin de journée et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 9 févr. 2017 à 22:34
1) Peut-être as-tu employé intentionnellement SHDonnées pour m'obliger à utiliser le terme exact (with workbooks("Nom du fichier").sheets("Données) ?
2) Formulaire frmCodesLégumes : autres procédure du module : private sub Initialise_cboLégumes : dim dic as new dictionary : après as, j'ai bien la liste déroulante avec comme entre autres choix, New, après new j'ai bien une liste déroulante dans laquelle dictionary est absent.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 12 févr. 2017 à 16:42
Bonjour Patrice,
J'espère que tu vas bien.
Exécution : new dictionary : type défini par l'utilisation non défini. Voir mes précédents messages ci-dessus
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 13 févr. 2017 à 10:13
Bonjour Patrice,

J'espère que tu as bien.
Je l'ai vérifié sur mon pc de bureau mais pas sur mon portable : dictionary n'apparait pas dans ma liste déroulante; motif : dans outils, références, microsoft scripting runtime n'est pas coché; sur mon pc de bureau, j'ai décoché cette case, j'ai repris ton fichier et sur dim dicliste as new la liste déroulante apparait mais sans dictionary. J'ai répété l'opération en cochant la case et là dictionary est bien apparu. J'ai travaillé à partir du premier fichier que tu m'as envoyé qui est un peu différent du second (voir post 21 et 32).
Bonnes journée et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 13 févr. 2017 à 16:58
Bonjour Patrice,

ci-joint le fichier. Dis-moi si tu peux l'exécuter. Moi, impossible de l'exécuter : Microsoft Excel Menus Patrice ne répond pas.
Confirmation de ce que j'ai écrit ce matin : il faut bien cocher la case Microsoft scripting runtime.
À la lecture du code de ton second fichier (post 32), tu envisages un seul formulaire pour créer tous les articles, qu'ils soient légumes, viandes ou desserts. Une question : le transfert dans la feuille données pourrait-il se faire en différenciant ces trois produits (légumes dans toutes les colonnes Légumes, viandes allant dans les cellules viandes, les desserts atterrissant dans les colonnes adéquates) ? On pourrait prévoir un if thenn du genre if Produit = "Viandes" then aller dans la première colonne viandes (codes viandes).
Merci, dans la mesure du possible, de me répondre rapidement car je vais être obligé de refaire tout à partir du modèle du fichier du post 32.
Bonnes fin de journée et continuation.
http://www.cjoint.com/c/GBnp73gzRF8
Enfin, ça fonctionne. Dans le module MCommun, j'avais fait une erreur sur la ligne if p < au lieu de < et également sur la ligne loop while (même erreur de frappe)..Pourquoi avoir prévu une saisie produits ? Les mots de passe sont MENUS PATRICE et ensuite MENUS PATRICE
Impossible de saisir le nom du légume : impossible de lire la propriété List Argument non valide (dans MiseÀJourCodesLégumes)
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonsoir,

Mon antivirus détecte un virus dans le fichier que tu as mis sur ci-joint
à http://www.cjoint.com/c/GBnp73gzRF8

Je ne peux donc pas le charger pour te répondre.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 13 févr. 2017 à 22:04
si c'est une farce, elle est de très mauvais goût ! J'ai repris presque tout de ton fichier sauf l'expression idx que j'ai changée en codeslégumes et dont j'ai tenu compte dans le code ça ne marche pas. j'ai remplacé codeslégumes par idx (comme toi), ça ne marche pas. Je suis emmerdé depuis une semaine avec Internet qui fonctionne très mal et là la cerise sur le gâteau, mon fichier est virusé selon toi c'est le pompon !! Chez moi, je viens d'analyser les fichier : aucune menace détectée
je te le renvoie (toujours aucune menace détectée) http://www.cjoint.com/c/GBnvBuTuiuy
le même fichier non compressé (aucune menace détectée) :http://www.cjoint.com/c/GBnvCOUYPfy
Rappel des mots de passe : MENUS PATRICE MENUS PATRICE
Répondre
Donnez votre avis
Utile
+0
plus moins
Re,

J'ai toujours le problème de virus (ou de malware) avec le zip.
Pas avec le fichier non compressé.

1. je constate que tu persiste à enregistrer tes macros dans un fichier de type modèle (xltm) alors qu'il n'y a aucune raison de le faire !!!
C'est déjà une première source d'erreur, envoie tes prochains fichier au format xlsm.

2. Pour désigner le classeur qui contient la macro, il est préférable de le désigner par ThisWorkbook plutôt que par son nom : Workbooks("MENUS PATRICE.xltm") : corriges tes macros.

3. Dans ton formulaire la liste des légumes se trouve dans le cbo codes légumes au lieu du cbo légumes d’où le problème de List.

4. « Une question : le transfert dans la feuille données pourrait-il se faire en différenciant ces trois produits (légumes dans toutes les colonnes Légumes, viandes allant dans les cellules viandes, les desserts atterrissant dans les colonnes adéquates) ? On pourrait prévoir un if thenn du genre if Produit = "Viandes" then aller dans la première colonne viandes (codes viandes). » C'est à peu près l'idée.
Il faut revoir l'ensemble du code pour remplacer les références explicites aux emplacements des données par une ou plusieurs variables.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 14 févr. 2017 à 10:48
Bonjour Patrice,
J'espère que tu vas bien.
2. Dans les deux fichiers (post 21 et 32), tu mets shDonnées pour designer l'onglet (la feuille) réceptrice. Et cela fonctionne (je fais des essais tant avec mon propre fichier qu'avec les tiens). Or chez moi, ça me sort variable non définie. D'où l'utilisation de workbooks, (je ne sais pas utiliser this workbook) et cela ne provoque plus l'erreur de variable non définie. Tout cela a été fait avant que je ne coche la case Microsoft Scripting Runtime. Maintenant que cette case est cochée, penses-tu que je pourrais utiliser shdonnées sans problème ? (je n'ai pas encore essayé).
3. Je n'ai pas compris. En écrivant le code du formulaire, j'aurai fait une erreur entre cboCodesLégumes et cboLégumes qui entraînerait ce problème ?
.4. Je vais essayer pour voir ce que cela va donner. pas compris il faut revoir l'ensemble du code ... etc.
Un technicien d'Orange vient cette après-midi pour régler mes problèmes Internet (enfin j'espère) car là, sur mon portable et mon pc de bureau, je n'ai plus accès à mon réseau personnel donc impossible de travailler sur les deux ordinateurs en même temps.
Bonnes journée et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 15 févr. 2017 à 23:01
Bonsoir Patrice,

J'espère que tu vas bien.

Je travaille sur plusieurs projets de programmation. À toutes fins utiles, afin que tu puisses répondre, dans la mesure du possible, à temps à mes messages, voici les jours où je travaille sur Mes fichiers/tes fichiers : le lundi, le jeudi et le dimanche. Donc demain, jeudi 16 février 2017, je travaillerai sur nos fichiers et essaierai de voir cette histoire de mauvais emplacement pour List.
Bonnes fin de soirée, nuit et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 16 févr. 2017 à 18:10
Je n'ai pas compris le point 3 de ton post 41. J'ai relu tout le code et je n'ai pas trouvé d'erreur. Quant au formulaire, je ne vois pas où est l'erreur. J'ai modifié le code name de la feuille (shDonnées) et modifié le code en conséquence, il n'y a plus de variable non définie. Dans ton fichier, à partir du quel j'ai fait le mien, je vois que chaque cbo a une value : moi, je n'en ai pas mis. Est-ce cela que tu appelles que tu appelles que la liste des légumes se trouve dans le cbocodeslégumes ? Les modifications de shDonnées effectuées, à l'exécution j'ai toujours l'erreur de la liste. Je vais essayer de mettre une value à chaque cbo pour voir la réaction mais j'avoue queje ne comprends rien car pour moi il n'y aucune erreur ni dans le code ni dans le formulaire.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

2. Pour désigner une même feuille dans le code VBA, il y a plusieurs syntaxes possibles, les différences ont des conséquences sur le code, exemple dans ton cas :
2.1. Workbooks("MENUS PATRICE.xltm").Sheets("Données")
C'est la feuille "Données" du classeur "MENUS PATRICE.xltm" qui est ouvert. La feuille peut être soit une feuille de calcul, soit une feuille graphique, soit une feuille de macro Excel 4. Le classeur doit être ouvert, mais il ne contient pas obligatoirement la macro.

2.2 Workbooks("MENUS PATRICE.xltm").Worksheets("Données")
C'est la feuille de calcul "Données" du classeur "MENUS PATRICE.xltm" qui est ouvert. Cette syntaxe est préférable à la précédente car elle désigne une feuille de calcul plutôt qu'une feuille quelconque.

2.3 Workbooks("MENUS PATRICE.xltm").Worksheets(2)
C'est la 2° feuille de calcul du classeur "MENUS PATRICE.xltm" qui est ouvert. L'avantage par rapport à la précédente est que la macro fonctionne quel que soit le nom de la feuille, l'inconvénient c'est qu'on ne peut pas insérer de feuille avant.

2.4 ThisWorkbook.Worksheets("Données")
C'est la feuille de calcul "Données" du classeur qui contient la macro. L'avantage par rapport à la syntaxe 2.2 c'est que que la macro fonctionne quel que soit le nom du classeur.

2.5 Feuil1 (ou dans mon cas shDonnées)
C'est la feuille dont le nom de code (CodeName) est Feuil1 du classeur qui contient la macro. L'avantage, c'est que ça fonctionne quels que soient le nom du classeur et celui de la feuille.

Dans l'explorateur de projet, on voit les feuilles désignées sous la forme CodeName(Name), par exemple Feuil1(Données) c'est à dire que le nom de code de la feuille et Feuil1 et, entre parenthèses Données, qui est le nom de l'onglet. Pour définir le nom de code d'une feuille c'est là (en rouge):



Bien évidemment, pour désigner la feuille il faut employer le véritable nom de code de la feuille, pas un autre nom de code comme shDonnées quand la feuille s'appelle Feuil1, c'est pour ça que tu avais une erreur.
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Je vois que tu as choisi d'ignorer les conseils que je te donne, entre autres, respecter un minimum de règles typographiques (au post # 18)

En conséquence, bien ce ce soit une pale copie de nom code, j'ai du mal à lire ce que tu as écris !!! Alors pour déboguer je te dis pas ...

Quelques pistes :
- ton cboCodesLégumes est différent du mien.
- .Range() et Range() c'est pas pareil !!!
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 17 févr. 2017 à 09:59
Tu peux faire des copies d'écran des propriétés des cbo pour les comparer,
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 17 févr. 2017 à 10:16
Deux questions : 1) Si le tableau Données est vide quand je fais une première exécution, cela pourrait-il être l'origine de l'erreur ? 2) J'ai rempli les colonnes du tableau de l'onglet Données et supprimer toutes les colonnes se rapportant à légume deux. Résultat : ligne private sub initialise_cboLégumes() : incompatibilité de type. Si la réponse à la question 1) est oui, c'est bien ce que je pensais : les erreurs annoncées n'ont aucun rapport avec la réalité. Dans ce cas, il serait mieux de dire tableau données vide, ça serait beaucoup plus compréhensible !
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 17 févr. 2017 à 13:51
Il très exceptionnel que les codes d'erreur ne soient pas en rapport avec la réalité !!!

Pour déboguer le code, il suffit de placer un ou plusieurs points d'arrêt dans le code et à chaque arrêt de vérifier si tout s'en bien passé et si les variables ont la valeur attendue. Si tu ne sait pas où placer les point d'arrêt, tu peux aussi exécuter le code en mode pas à pas (arrêt à chaque instruction) pour trouver le moment où l'erreur se produit.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 17 févr. 2017 à 18:33
Deux questions : 1) Si le tableau Données est vide quand je fais une première exécution, cela pourrait-il être l'origine de l'erreur ? 2) J'ai rempli les colonnes du tableau de l'onglet Données et supprimer toutes les colonnes se rapportant à légume deux. Résultat : ligne private sub initialise_cboLégumes() : incompatibilité de type (sur la ligne table Lboud et Uboun)
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 18 févr. 2017 à 23:42
Bonsoir Patrice,

J'espère que tu vas bien.

J'ai essayé mais cela ne donne rien de spécial. Cela ne m'aide pas pour savoir quelle est l'erreur. Je te joints le fichier modifié. exécutes-le : tu devrais avoir l'erreur incompatibilité de type sur Private sub initialise_cbolégumes, ligne for compteur LBound(table) to UBound(table). Merci de me répondre à la question 1) du post 53.

Je ne demande pas la lune : tu lis le code de ton fichier du post 21 : tu lis le code de mon fichier : tu me dis Christian, dans telle partie, sur telle ligne, tu as mis caca au lieu de pipi, sur cette autre ligne, tu as mis bonjour au lieu de bonsoir, etc. J'ai crû comprendre que avec scripting runtime,, les variables ne sont plus à définir puisque maintenant je n'ai plus cette erreur. Les légumes sont de type string, donc si je tape asperges, aucune erreur ne devrait sortir.Table normalement est un mot clé d'Access, donc peut-être que dans outils, options, références devrais-je cocher une case faisant référence à Access. J'ai comparé ton fichier avec le mien, et à ce niveau, les mêmes cases sont cochées. Donc, incompréhension quant au message d'erreur surtout que, je te le répète encore pour la unième fois, je ne suis pas un professionnel de la programmation de l'analyse et que je ne me considère pas comme une personne super intelligente ni à la déduction facile. Si je n'arrive pas à savoir la raison de cette erreur, je tout abandonner et me démerder avec le programme par clics qui lui ne me sort pas d'erreurs incompréhensibles !
http://www.cjoint.com/c/GBswLKjVMIl
Merci pour ton aide.
Bonnes fin de soirée, nuit et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Je ne demande pas la lune ... Un petit peu quand même !

Tu ne respectes pas les conseils que je te donne et c'est moi qui dois faire l'effort de comprendre pourquoi ton code ne fonctionne pas ???
C’est simple : il s'agit d'une mauvaise copie d'un code qui fonctionne bien !!!

Comme je t'ai déjà dit, il faudrait que tu définisses clairement et en détail quels sont les objectifs de ton application et quels sont les différents modes de fonctionnement attendus (post #4).
A défaut de définition contraire, pour le code que j’ai écrit fonctionne correctement, il faut au moins 2 lignes de données dans les tableaux. En effet, varTable est une variable de type variant sensée représenter une table de données. Pour que ce soit le cas, il faut lui fournir un tableau, donc au moins 2 valeurs. Lorsqu'il n'y a qu'une valeur, ce ne sera pas un tableau mais une chaine de caractères (String) d'où l'incompatibilité de type quand on cherche les limites du tableau (LBound et UBound).

Comme je t'ai déjà dis, tu persiste à enregistrer tes macros dans un fichier de type modèle (xltm) alors qu'il n'y a aucune raison de le faire. Envoie tes prochains fichiers au format xlsm (post #41)

Comme je t'ai déjà dis, ton code est très difficile à lire parce que tu ne respecte pas les règles typographiques (post # 18 et post #46). Non seulement ces règles facilitent la lecture par tous, y compris ceux qui ne les utilisent pas, mais elles permettent un débogage plus facile.
Par exemple dans la procédure cboCodesLégumes_Change, quand tu écris cboCodesLégumes à la place de CodesLégumes ça ne saute pas aux yeux mais ça génère une incompatibilité !
Remplacer le nom de la variable lngIndex (une variable long qui représente un Index) par CodesLégumes est déjà une source d'erreur : dans ta feuille « Données », les CodesLégumes sont de type String. Pour faciliter la compréhension du code, il faut éviter ce genre d’ambigüité. La variable lngIndex ne représente pas un code légume mais l'index du code légume dans la liste des codes légumes, si lngIndex ne te semble pas suffisamment précis, tu pourrais l'appeler lngIndexCodesLégumes. Mais trop de précision peut aussi nuire à la lecture du code, ce qui est important c’est qu’il s’agit d’un index de type long. Préciser lngIndexCodesLégumes dans une procédure et lngIndexCodesViandes dans une autre génère des codes différents alors qu’ils sont similaires.

En résumé, appliques-toi à respecter les conseils qu'on te donne, tu auras moins de problèmes et pour nous ce sera plus facile de t'aider.
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 19 févr. 2017 à 15:19
J'ai maintenant deux fichiers menus Patrice, l'un en xltm, l'autre en xlsm. Comme je le pensais, l'erreur n'était pas à l'endroit indiqué. Premièrement, dans la table, j'ai créé, comme tu l'as suggéré, deux lignes. J'ai repris mon code et comparé avec le tien. L'erreur était dans le private sub Miseàjourcode légumes, à la ligne if me.cbolégumes au lieu de cbocodeslégumes. Rectification faite, la saisie s'est passée normalement et la table s'est bien enrichie de ma nouvelle création. Et cela dans les deux fichiers. Ce point résolu, je vais créer un fichier comparable à celui du post 38 qui est différent un peu de celui du post 21 (il permet, si j'ai bien compris, de créer tous les codes et ce qui en découle sans qu'on fasse une distinction entre codes légumes, codes viandes, codes desserts, etc.)
Voir fichier Word 2010 joint pour la suite du travail.
http://www.cjoint.com/c/GBtppICl7xl
Bonnes après-midi et continuation..
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 19 févr. 2017 à 15:59
J'ai l'impression que tu ne sait plus où tu en est...
Dans le dernier fichier que tu as mis au post #54, il n'y a pas l'erreur que tu signales ci dessus :
« L'erreur était dans le private sub Miseàjourcode légumes, à la ligne if me.cbolégumes au lieu de cbocodeslégumes. »
Il n'y a pas de
private sub Miseàjourcode légumes
, mais une procédure :
Private Sub MiseÀJourIndexCodesLégumes
et dans cette dernière il n'y a pas de
 If me.cbolégumes
, mais bien des
If Me.cboCodesLégumes
.
Elle est déjà corrigée !!!


Par contre il y a bien l'erreur à l'endroit que je viens de t'indiquer dans la procédure :
Private Sub cboCodesLégumes_Change()
.

il y a :

  Else
    Me.cboLégumes.Value = Me.cboCodesLégumes.List(cboCodesLégumes, 1)

alors qu'il devrait y avoir :
  Else
    Me.cboLégumes.Value = Me.cboCodesLégumes.List(CodesLégumes, 1)
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 19 févr. 2017 à 16:23
Comme j'ai rectifié, je ne sais plus où était l'erreur mais tu as raison, maintenant que tu le dis, c'était bien là.Voir fichier Word 2010 joint pour la suite du travail.
http://www.cjoint.com/c/GBtppICl7xl
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 19 févr. 2017 à 17:49
Compte tenu de mon post 58, quelle est la meilleures solution : créer un formulaire unique ou créer un formulaire Codes légumes, un formulaire Codes viandes, un formulaire Codes desserts, un formulaire Codes observations, un formulaire Période concernée, un formulaire Saisie menus, etc. ? J'attends ta réponse pour continuer la création de mon nouveau fichier Menus?
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 19 févr. 2017 à 21:23
Voila tous mes codes légumes sont créés avec une erreur involontaire. J'ai tenté de modifier (il s'agit du code LLM13, Quenelles, Lundi et mardi soirs, 25 grammes par repas, Menus journaliers). Il faut remplacer 25 grammes par repas par 1 boîte pour 2 repas.
Private sub cmdModifiercetteRéférence : l'erreur est sur la ligne cellule.offset(0,1).value=me.cboLégumes.text
Private sub cmdSupprimercetteréférence : l'erreur est sur la ligne cellule.resize(1,5).delete xlshiftup
Mon fichier.
http://www.cjoint.com/c/GBtuw0f2s2l
Répondre
Donnez votre avis
Utile
+0
plus moins
Re,

« Compte tenu de mon post 58, quelle est la meilleures solution : créer un formulaire unique ou créer un formulaire Codes légumes, un formulaire Codes viandes, un formulaire Codes desserts, un formulaire Codes observations, un formulaire Période concernée, un formulaire Saisie menus, etc. ? J'attends ta réponse pour continuer la création de mon nouveau fichier Menus? »

Pourquoi attendre une réponse que je t'ai déjà donné : relis le post #29 (sans oublier le dernier paragraphe pour ce qui est du post 58).
Je t'ai aussi donné un exemple à développer au post 32

PS : Pour ton post 60, le fichier n'est pas le bon.

BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 20 févr. 2017 à 09:59
Bonjour Patrice,

le bon fichier ci joint.
http://www.cjoint.com/c/GBui6TuqhIl
Conclusion : un fichier unique avec un formulaire unique. Question résolue provisoirement. Voir le fichier de mon post 58 pour confirmer le fichier unique avec formulaire unique pour ce qui est des références. Tout ceci concerne premier fichier du post 21 ou 22. Quand cette partie sera définitivement réglée (voir post 60), je programmerai à partir de ton fichier du post 32.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 20 févr. 2017 à 20:37
Je t'envoie un renseignement important dans ce fichier Word 2010.
Je continue de travailler sur ton premier fichier et je m'occupe des codes viandes. Quand j'aurai fini tout sur ce fichier, et si j'ai obtenu tes réponses à mes questions précédentes, je travaillerai sur ton fichier du post 32 je crois.
Bonnes soirée, fin de soirée, nuit et continuation.
fichier supprimé contient adresse mail en clair Modération CCM
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour

Post 62 : Le fichier n'est pas au bon format donc je ne l'ouvre pas.
Post 63 : L'intérêt d'un forum c'est que tout le monde peut y participer et y trouver des réponses, c'est pourquoi il est interdit de fournir une adresse mail personnelle !
Cordialement
Patrice
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 21 févr. 2017 à 16:26
http://www.cjoint.com/c/GBvpzfp23Q0
Je t'envoie un fichier xlsm en zip car ce n'est pas sûr qu'il puisse passer en xlsm
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 21 févr. 2017 à 18:00
Re,

C'est mieux !

J'ai noté quelques différences ou erreurs (il y en a peut-être d'autres) :

1. En rapport avec le pb du post #60 dans les 2 procédures suivantes :
- cmdModifierCetteRéférence_Click
- cmdSupprimerCetteRéférence_Click
tu as écrit :
        With .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp))
au lieu de :
        With .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).Row)

2. Pour le code LD03, Menus journliers au lieu de Menus journaliers

3. La largeur de la liste déroulante (propriété ListWidth) du cboCodesLégumes n'est pas prédéfini (0) alors que dans le modèle elle est de 741.
Comme ton formulaire n'est pas identique à l'original, il faut ajuster sa valeur à ton formulaire (924 au lieu de 721) et il faut aussi ajuster celles de chaque colonne.
Pour pallier cet oubli, on peut les définir dans Sub Initialise_cboCodesLégumes, remplace :
Me.cboCodesLégumes.ColumnCount = 5
Me.cboCodesLégumes.ColumnWidths = "78;204;162;162;100"
par :
Me.cboCodesLégumes.ColumnCount = 5
Me.cboCodesLégumes.ListWidth = "924 pt"  'largeur de la liste
Me.cboCodesLégumes.ColumnWidths = "121 pt;246 pt;198 pt;198 pt" 'largeur colonnes

Cdlt
Patrice
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 21 févr. 2017 à 20:39
J'ai fait mon fichier d'après celui que tu m'avais envoyé dans le post 21 ou 22 dont tu trouveras la copie ci-dessous lequel est resté dans son état, je ne lui ai fait subir aucune modifcation. Pour la modification et la suppression, ROW est absent. Pour la les chiffres, j'ai repris ceux y figurant, n'ayant pas compris à quoi ils correspondaient. Ni dans l'onglet Données, ni dans le formulaire, je n'ai trouvé de chiffres s'y rapprochant.
http://www.cjoint.com/c/GBvtMEqCyE0
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 22 févr. 2017 à 22:47
Bonsoir Patrice,

Demain jeudi, c'est la journée qui t'est consacrée. Je me pencherai donc sur ton post 68 et ne manquerai pas de te tenir au courant.
Bonnes soirée, nuit et continuation.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 23 févr. 2017 à 20:12
Bonsoir Patrice,

J'ai modifié le code sans obtenir le résultat escompté. le bouton Modifier reste gris ainsi que Ajouter. Supprimer est bien actif mais la suppression ne se fait pas.
Réponds-moi clairement afin que je comprenne car pour l'instant c'est du chinois : List widht et columnwidth : d'où sortent ces chiffres ? Que ce soit dans ton fichier initial ou dans le mien, columwidth est vide. La propriété width est bien remplie (enfin dans mon fichier, je n'ai pas vérifié dans le tien) pour chacun des objets mais le chiffre indiqué ne correspond pas à ceux de ton post. ColumnCount doit correspondre au nombre d'objets, ici à 5 cbo (cbocodeslégumes, cbolégumes, cbojourslégumes, cboconditionnementlégumes,cbodestination légumes).
Modifier fonctionne : il faut que je tape uniquement le code, les cbo se remplissent et Modifier cette référence devient actif et en cliquant dessus, la modification est prise en compte. Par contre, supprimer devient actif mais la suppression ne se fait pas. J'ai essayé de faire une deuxième modification, mais cela ne marche plus. C'est vraiment le merdier. C'est le genre de situation qui me met hors de moi !
D'avance merci pour ton aide aussi longue que possible afin que je comprenne ta pensée.
Bonnes soirée, nuit et continuation.
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

1. En appliquant les corrections proposées au post #68 dans ton fichier du post #67 : Il n'y a plus d'erreur au démarrage du formulaire, mais je te l'ai dis : il y en a peut-être d'autres

Effectivement, quand j'effectue ces modifications :
- la modification des données pour une référence devient possible ;
- il reste une erreur qui empèche de saisir un code légume ;
- il reste une autre erreur qui rend la commande supprimer inactive.
C'est à dire que :
- le bouton Modifier remplit son rôle parfaitement ;
- le bouton Supprimer n'a aucune action ;
- il n'est pas possible d'écrire un nouveau code légume et
donc le bouton Ajouter n'est jamais activé.

Au post #52, je t'ai donné la méthode pour trouver par toi-même d'où viennent les problèmes : il suffit de placer un ou plusieurs points d'arrêt dans le code et à chaque arrêt de vérifier si tout s'en bien passé et si les variables ont la valeur attendue.

Ton dernier fichier avec les corrections ci-dessus et des points d'arrêt avec des commentaires sur les deux problèmes qu'il te reste à résoudre :
http://www.cjoint.com/c/GBynBvaPvVe

2. Explications du code :
-
Me.cboCodesLégumes.ColumnCount = 5

Sert à définir le nombre de colonnes qui apparaissent dans la liste déroulante du cboCodesLégumes.
J'ai choisi 5 colonnes pour pouvoir afficher les 5 informations qui correspondent à un code légume (code, légume, jours, conditionnement et destination).

-
Me.cboCodesLégumes.ListWidth = "924 pt"

Sert à définir la largeur de la liste déroulante du cboCodesLégumes.
J'ai déterminé la valeur approximative visuellement mais j'aurais aussi pu le faire de façon plus précise par calcul :
cboDestinationLégumes.Left + cboDestinationLégumes.Width - cboCodesLégumes.left
soit 768 + 165 - 6 = 927 pt

-
Me.cboCodesLégumes.ColumnWidths = "121 pt;246 pt;198 pt;198 pt"

Sert à définir la largeur de chaque colonne de la liste déroulante du cboCodesLégumes. Comme ci-dessus, j'ai déterminé les valeurs approximatives visuellement mais j'aurais aussi pu calculer chaque valeur de façon plus précise :
1° cboLégumes.Left - cboCodesLégumes.left
soit 126 - 6 = 120 pt
2° cboJoursLégumes.Left - cboLégumes.left
soit 372 - 126 = 246 pt
3° cboConditionnementLégumes.Left - cboJoursLégumes.Left
soit 570 - 372 = 198 pt
4° cboDestinationLégumes.Left - cboConditionnementLégumes.Left
soit 768 - 520 = 198 pt
Il n'est pas utile de définir la 5° valeur, elle occupera la place restante soit 927-768 = 159 pt
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 1 mars 2017 à 00:23
« 2)Dans la fenêtre propriétés, pour chacun des objets, le width ne correspond pas à ceux indiqués dans la procédure »
.
Pour ListWidth et ColumnWidth tu as toutes les explications très détaillées dans le post 72 avec la méthode de calcul à utiliser pour trouver les valeur qui sont définies par programme !

Dans cette explication, toutes les valeurs des propriétés utilisées pour les calculs (Left et Width) sont les propriétés initiales des objets correspondants situés dans ton formulaire que tu peux voir avec l'éditeur VBA. C'est le formulaire de ton fichier que je t'ai retourné dans ce même post 72.

Bien évidemment les deux propriétés ListWidth et ColumnWidth n'ont pas les mêmes valeurs initiales, c'est inutile puisque c'est la macro qui défini leur valeur lors de l'initialisation du formulaire.

PS : « Conclusion : merci de m'indiquer les nombres à taper d'après mon formulaire ». Non, il n'est pas question que je fasse le travail à ta place, je t'ai donné des explications très détaillées et je veux bien te donner des informations complémentaires, à condition que tu expliques en détail ce que t'a pas compris (un simple "j'ai absolument rien compris" n'est pas très productif)..
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 2 mars 2017 à 15:56
Bonjour Patrice,

J'espère que tu vas bien.
Je suis en train de travailler sur ton deuxième ficher. Je suis à la recherche de ton fichier dans lequel la feuilles données contenait toutes la liste des codes, désignation, jours, conditionnement, etc. il était rempli en totalité. Pourrais-tu m'indiquer le post dans lequel il était joint ? D'avance merci.
Bonnes fin de journée et continuation.
Répondre
Patrice33740 5604Messages postés dimanche 13 juin 2010Date d'inscription 24 avril 2017 Dernière intervention - 2 mars 2017 à 17:22
Bonjour,

« Je suis à la recherche de ton fichier dans lequel la feuilles données contenait toutes la liste des codes » Je n'ai aucun fichier qui contient tous les codes, par contre, tu avais posté tous tes anciens fichiers dans ce message :
http://www.commentcamarche.net/forum/affich-34050279-incompatibilite-de-type#26 c'est le post 26.
Tu devrais y retrouver tous les codes que tu cherches.
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention - 2 mars 2017 à 19:29
Bonsoir Patrice,

le fichier menus Patrice, frmLégumes fonctionne correctement. Par contre frmViandes me sort une erreur dans Private sub cboCodesViandes_Change(), ligne else me.cboViandes.value=me.cboCodesviandes.list(idx, 1) : Impossible de lire la propriété List. Argument non valide. Merci de tenter la création de V01, Bifteck haché de bœuf, Lundi à dimanche soirs, 1 paquet pour 2 repas, menus journaliers et de mettre sur la voie pour l'éventuelle erreur qui setrouve peut-être ailleurs mais influant sur cette ligne de procédure.
http://www.cjoint.com/c/GCcsCvggO0F
Mots de passe : MENUS PATRICE MENUS PATRICE
Répondre
BUDGETS 254Messages postés samedi 19 juillet 2014Date d'inscription 24 avril 2017 Dernière intervention Patrice33740 - 2 mars 2017 à 21:20
Ce post fait suite au post 93 qu'il ne m'a ps été possible de modifier (apparemment, il doit avoir un temps limite pour pouvoir modifier).
Apparemment, les colonnes vides ne sont pas acceptées. J'ai donc supprimer les colonnes vides, modifié les colonnes en conséquence là ou cela était nécessaire (codes viandes est devenu colonne F au lieu de H et ainsi de suite) mais l'erreur persiste. je crois avoir modifié aussi une ligne dans laquelle un as string avait été omis involontairement. Si tu vois d'autres erreurs, dis-le moi car je perds mon temps à t'écrire parce que ce formulaire identique au formulaire frmLégumes ne veut pas fonctionner !!!!!!!!!!!!!!! avec des causes d'erreurs incompréhensibles et que l'aide ne reconnait pas cette erreur (appuyer sur aide : mon cul)
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !