Type de variables et quels objets ?

Résolu/Fermé
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 - Modifié par BUDGETS le 11/11/2016 à 17:50
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 - 31 mai 2017 à 17:04
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.

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

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


BUDGETS

44 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
16 nov. 2016 à 10:29
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.
1
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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

https://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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
11 nov. 2016 à 20:14
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://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/data-type-summary?redirectedfrom=MSDN
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 15/11/2016 à 18:44
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 11/11/2016 à 22:05
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.
https://www.cjoint.com/c/FKlu14ajxVJ
https://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.

BUDGETS
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
16 nov. 2016 à 15:06
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 ?
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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) ?
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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 ?
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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 !
https://www.cjoint.com/c/FKuuJuz5BwW
https://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.
0

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

Posez votre question
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
21 nov. 2016 à 01:00
Bonjour,

Tes fichiers corrigés en retour :
https://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().
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
21 nov. 2016 à 08:53
Re,

Petite remarque sur la macro du formulaire : dans l'état actuel de ton projet, cette partie du code VBA ne fonctionne pas (elle ne supprime pas le code légume existant) :
With ClasseurMenus.Sheets("Paramètres de choix")
    For Ligne = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
      If cboCodesLégumes.Value = .Range("A" & Ligne).Value Then
        Application.StatusBar = " "
        Application.Cursor = xlDefault
        Remplacer = MsgBox("Ce code légumes existe déjà. Remplacer par le code légume actuel ?", vbOKCancel + vbCritical, "Remplacer le code légumes actuel ?")
        If Remplacer <> vbYes Then
          Exit Sub
        Else
          Application.StatusBar = "Remplacement des coordonnées et mise à jour en cours. Veuillez patienter."
          Call RemplacerCodeslégumes(cboCodesLégumes)
          Application.StatusBar = ""
          Application.Cursor = xlDefault
          Exit Sub
        End If
      End If
    Next Ligne
    Application.StatusBar = ""
    Application.Cursor = xlDefault
  End With
et donc aussi :
Public Sub RemplacerCodeslégumes(MonCodelégumes As String)
'Remplacement d'un code légume
Dim Ligne As Long
  With ClasseurMenus.Sheets("Paramètres de choix")
    Ligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    .Range("A" & Ligne).Value = MonCodelégumes
  End With
End Sub
D'autre part je ne vois pas l'intérêt de supprimer et remplacer un code légume existant par le même code !

Mais peut-être as-tu l'intention de faire évoluer cette macro.

Patrice
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
21 nov. 2016 à 10:32
Bonjour Patrice,

J'espère que tu vas bien.

1) Comme je te l'ai indiqué dans mon message d'hier dimanche, j'ai repris les modèles du module et de l'UserForm que tu m'avais envoyés et qui concernait d'ailleurs les codes légumes. Je ne me souviens plus si cela fonctionnait ou pas.
2) Le fichier Classeur menus a été extensionné en xlsm car il est prévu que par la suite il y ait une ou plusieurs macros pour l'impression des menus (menus midi retraite (12 pages soit 6 feuilles), menus journaliers (x pages soit xpages/2 feuilles) et enfin les menus viandes week-end (2 pages soit 1 feuille)). Je me baserai sur un modèle trouvé dans un autre livre que celui précédemment cité.
3) Les modules de classe sont-ils utilisés en programmation ? Dans tous les livres, il en est fait mention mais sans exemple et je n'ai rien compris à son éventuelle utilisation.
4) N'étant pas un programmeur ni chevronné ni expert, je me fie donc aux renseignements qui me sont donnés, par toi par exemple, en essayant de comprendre l'instruction donnée et à l'appliquer dans mon programme, quitte à me retrouver avec une erreur comme c'est le cas ici.

Encore merci pour ton aide

Bonnes journée et continuation.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par Patrice33740 le 21/11/2016 à 13:06
Tant qu'il n'y a pas de macro dans le fichier Classeur menus, laisse-le en xlsx et continue à développer le classeur que je viens de t'envoyer.

Au début, en programmation, il faut avancer lentement et surement sans présumer des méthodes pour obtenir les résultats.

En VBA, les modules de classe servent à créer ses propres objets, avec des propriétés, des méthodes et des évènements. Pour ton projet, je pense que tu peux te passer de module de classe.
Tu as suffisamment de mal à comprendre les bases du VBA et l'utilisation des objets existants.
Dans quelques années, quand tu aura une certaine maîtrise du VBA, que tu saura écrire une macro tout seul sans prendre exemple sur ce que font les autres et que tu aura une bonne connaissance des objets existants, alors peut-être aura-tu besoin des créer tes propres objets.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
21 nov. 2016 à 16:28
Bonjour Patrice,
Avec les modifications que tu m'as envoyées ce matin, ça marche.
Avec ce que je t'ai envoyé hier, après modifications des instructions, ça marche aussi. J'ai ajouté le code de mise à jour du cboCodeslégumes, le tri et l'enregistrement du classeur, la mise à jour de la liste déroulante, en gardant les dim avec les valeurs initiales que j'avais indiquées. Je n'ai plus eu de dépassement de capacité.
Bonnes journée et continuation.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié par BUDGETS le 21/11/2016 à 20:43
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
23 nov. 2016 à 12:52
Bonjour,

Voici un exemple de ce que j'aurais fait pour gérer les codes légumes (et les autres) :
https://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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 23/11/2016 à 13:21
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.

BUDGETS
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
15 déc. 2016 à 16:03
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 5/02/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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
15 déc. 2016 à 18:13
Merci pour ta réponse je vais essayer.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
16 déc. 2016 à 20:13
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 5/02/2017 à 23:32
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.
Patrice
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
7 févr. 2017 à 00:00
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 :
https://www.cjoint.com/c/GBgw6NwtcUK
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 7/02/2017 à 10:09
Bonjour Patrice,

Impossible d'ouvrir le fichier.
Tout à fait d'accord pour un frmRéférences qui servirait pour tout, à la condition que cela ne pose pas de problèmes pour la deuxième partie. Je ne connaissais pas le terme intellisense. J'ai réussi à ouvrir le fichier.
Bonnes journée et continuation.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 9/02/2017 à 15:55
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 12/02/2017 à 17:13
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
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
13 févr. 2017 à 21:49
Bonsoir,

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

Je ne peux donc pas le charger pour te répondre.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 13/02/2017 à 22:30
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) https://www.cjoint.com/c/GBnvBuTuiuy
le même fichier non compressé (aucune menace détectée) :https://www.cjoint.com/c/GBnvCOUYPfy
Rappel des mots de passe : MENUS PATRICE MENUS PATRICE
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
14 févr. 2017 à 00:00
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 16/02/2017 à 19:00
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
16 févr. 2017 à 10:37
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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
16 févr. 2017 à 21:13
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 !!!
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 16/02/2017 à 22:28
Je veux bien te croire mais alors dis-moi en quoi il diffère car je ne vois pas de différence, à moins que ce soit dans les propriétés que je n'ai pour ainsi dire pas modifiées.
J'aurai donc fait une erreur avec .range() et range() : certes, mais où ?
Pour le code, je veux bien relire pour la énième fois mais le cbo je ne vois aucune différence, désolé.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
17 févr. 2017 à 00:54
Si deux cbo sont différents c'est que leurs propriétés diffèrent ....
Quand toutes les propriétés sont identiques, les cbo sont identiques !!!
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
17 févr. 2017 à 07:18
C'est impossible de faire du travail sérieux. On ne peut pas imprimer les propriétés d'un objet donc difficile de les rendre identiques. J'ai l'impression que mon dernier message d'hier n'a pas été pris en compte car il était très long.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
17 févr. 2017 à 09:59
Tu peux faire des copies d'écran des propriétés des cbo pour les comparer,
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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 !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
19 févr. 2017 à 11:47
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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 19/02/2017 à 16:16
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.
https://www.cjoint.com/c/GBtppICl7xl
Bonnes après-midi et continuation..
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
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)
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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.
https://www.cjoint.com/c/GBtppICl7xl
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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?
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
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.
https://www.cjoint.com/c/GBtuw0f2s2l
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 20/02/2017 à 00:00
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.

Patrice
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
20 févr. 2017 à 09:59
Bonjour Patrice,

le bon fichier ci joint.
https://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.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par baladur13 le 3/03/2017 à 10:02
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 21/02/2017 à 14:54
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
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
21 févr. 2017 à 15:03
Comment cela il n'est pas au bon format : c'est un fichier excel en ZIP
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
21 févr. 2017 à 15:57
Post#41 §1.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
21 févr. 2017 à 16:26
https://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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 21/02/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
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié par BUDGETS le 21/02/2017 à 20:48
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.
https://www.cjoint.com/c/GBvtMEqCyE0
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
24 févr. 2017 à 14:50
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 :
https://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
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par BUDGETS le 24/02/2017 à 19:13
Bonjour Patrice,

Que se passe-t-il si on place des espions ? j'ai essayé : j'en ai placé un sur Supprimer cette référence et je suis descendu et remonter : résultat il ne m'a signalé aucune erreur. Donc, je ne suis pas plus avancé qu'avant. J'ai double cliqué sur supprimer, effectivement je me suis retrouvé là tu as dit mais je n'ai pas compris pourquoi. Selon l'emploi du temps établi, que je 'ai envoyé, je verrai cela dimanche mais pour l'instant, je ne vois pas où est l'erreur puisque j'ai copié le texte sur ton fichier initial (post 21 ou 22) et que la même erreur se produit sur ton fichier.
Il va pleuvoir, il va avoir une forte tempête, un orage : le bouton supprimercetteréférence fonctionne : que les erreurs sont mal indiquées : la lumière a jailli d'un seul coup : je suis allé sur mon formulaire : j'ai cliquer pour faire apparaître la fenêtre propriétés : j'ai cliqué sur le bouton de commande supprimercetteréférence : et là miracle, le name du bouton contenait une erreur : supprimercetteréfrence au lieu de supprimercetteréférence. Dis-moi Patrice, c'était là l'erreur. Enfin, j'espère que c'est bien celle-là. Rassure-moi car je suis sûr que tu savais quelle était l'erreur et où elle se situait et que tu m'as laissé la trouver seul. MAINTENANT, JE NE PEUX PLUS FAIRE D'AJOUT !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
Modifié par Patrice33740 le 24/02/2017 à 19:32
« effectivement je me suis retrouvé là tu as dit mais je n'ai pas compris pourquoi. »
L'éditeur VBA contient de nombreuses fonctions pour faciliter la création du code.
Lorsqu'on crée un nouveau bouton, un double clic sur ce bouton crée automatiquement la procédure événementielle correspondante à ce bouton. Si un code évènementiel pour ce bouton existe déjà, l'éditeur pointe dans le code. C'est ce que j'ai fait : j'ai double cliqué sur ton bouton et l'éditeur à créé la procédure dans laquelle j'ai mis le commentaire et le stop. Cela signifiait que le code que tu avais créé ne correspondait pas au nom (erroné) que tu avait donné au bouton : c'était bien une des 2 erreurs.

Dans le fichier que je viens de t'envoyer, pour provoquer la seconde erreur, commence à saisir un nouveau code légume dans le cbo correspondant.
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
24 févr. 2017 à 20:43
'Ici il reste une erreur de recopie dont la correction est facile.
'
'Mais il est tout aussi important de comprendre ce qui se passe :
'cette erreur empèche de saisir du texte dans le cboCodesLégumes.
'Essaies de comprendre pourquoi dès qu'on écrit, ça s'efface sans
'qu'on ait le temps de voir ce qu'on essaie d'écrire dans ce cbo.
Effectivement, c'est bien ce qui se passe. J'ai vu une erreur que j'ai rectifiée (cbocodeslégumes au lieu de cbolégumes) mais cela n'a rien changé. "dont la correction est facile"), encore faut-il la voir et ce n'est pas mon cas, j'ai relu toute la partie private sub cbocodeslégumes_change() et la partie private sub cmdajoutercetteréférence_click() mais je rien vu d'anormal. Dans ton commentaire, l'erreur est au-dessus du commentaire ou après le commentaire ? Cela m'aiderait peut-être.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775 > BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023
24 févr. 2017 à 21:08
J'ai vu une erreur que j'ai rectifiée (cbocodeslégumes au lieu de cbolégumes) mais cela n'a rien changé.
Pourtant l'erreur est bien que tu a écris cbocodeslégumes au lieu de cbolégumes, cette erreur corrigée (et les précédentes) ton formulaire fonctionne correctement.

Mais j'espérais que tu comprendrais ce qui se passe avec l'erreur c'est à dire pourquoi dans ce cas tu ne peux pas saisir de valeur dans le cboCodesLégumes.

Pour l'erreur précédente, il y a de nombreux endroits où tu écris supprimercetteréfrence au lieu de supprimercetteréférence, bien évidemment il faut tous les corriger.

seune fois corrigé
0
BUDGETS Messages postés 1333 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 24 novembre 2023 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié par BUDGETS le 24/02/2017 à 21:20
J'ai mis stop en commentaire. J'ai sélectionné toute la page code, rechercher Rférence, remplacer par Référence, remplacer tout. 8 rectifications effectuées. Toujours pas possible de créer un code. J'ai alors mis ton stop en commentaire et là, j'ai pu créer mon code. Par contre, je l'avoue humblement, je n'ai pas compris le pourquoi.
0