Fichier Menus 10 ne fonctionne pas
RésoluBUDGETS Messages postés 1705 Date d'inscription Statut Membre Dernière intervention -
Le fichier Menus2V4.xlsm s'exécute correctement.
Le fichier Menus10.xlsm fonctionne correctement pour la création. Par contre, le tri tableau, Modifier produit, supprimer produit ne répondent pas aux instructions. Sauf erreur ou omission de ma part, le fichier Menus10.xlsm est une copie conforme du fichier Menus2V4.xlsm.
merci de m'apporter votre aide.
Ci-dessous le fichier Menus 10.xlsm
https://cjoint.com/c/IHmo2Dq5Pb6
Ci-dessous le fichier Menus2V4.xlsm
https://cjoint.com/c/IHmo4QIMch6
BUDGETS
- Fichier Menus 10 ne fonctionne pas
- Fichier bin - Guide
- Fichier epub - Guide
- Windows 10 ne démarre pas - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
30 réponses
Le problème porte sur les actions TriTableau, Modifier produit et Supprimer produit qui ne répondent pas dans Menus10.xlsm, alors que Menus2V4.xlsm reste fonctionnel pour la création.
Une solution évoquée est de recréer Menus10 à partir de la version qui fonctionne afin d’éviter les écarts.
Sur le plan technique, l’analyse met en cause la procédure TriTableau appliquée au tableau TabRéfProduits de la feuille Produits et signale une erreur Range globale, avec une suspicion concernant la ligne ValiderSaisieProduit utilisant Range('B65000').End(xlUp).Row + 1.
D'autres retours suggèrent de clarifier les libellés (par exemple Code catégorie vs CAT01) et de corriger l'utilisation du Nom Catégorie dans la feuille Accueil pour les opérations de modification et de suppression.
Quand on regarde tes deux fichiers, on voit qu'ils sont différents : pas le même nombre de feuilles, noms de feuilles différents, code VBA différents.
Alors quand tu dis "copie conforme", c'est étonnant !
Les dysfonctionnements sont à chercher dans les modifications que tu as faites pour passer de l'un à l'autre ! Quitte à les refaire progressivement depuis le début !
Bon courage
Alors merci de me dire où sont mes erreurs dans le code VBA
Ben justement ce n'est plus conforme, et c'est toi qui connaît ton application et les modifications que tu as apportées, les anomalies sont là !
Tu peux repartir d'une sauvegarde que tu as surement faite ou sinon tu refaits les modifs petit à petit, tu testes et tu sauvegardes régulièrement.
Cordialement
Je me répète, c'est toi qui connaît ton application et les modifications que tu as souhaitées y apporter.
Alors tu reprends ton fichier initial, tu supprimes toutes tes macros et tu les réintègres une par une en les modifiant, tu testes, si c'est OK tu sauvegarde une version intermédiaire et tu continues. En tout cas c'est comme ça que j'aurais procédé.
Tu vas forcément finir par tomber sur ce qui cloche. soit c'est toi qui fait une erreur de modification, soit ton code initial avait déjà des lacunes qui ne sont mises en évidence qu'après modification, déclaration de variables, dimensionnement de tableau, ...
Tu en profiteras pour commenter ton code afin d'expliquer ce qu'il est censé faire.
Bon courage
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort. _
SortFields.Add Key:=Range("TabRéfMenus[Code produit]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
Message d'erreur : la méthode 'Range' de l'objet '_global' a échoué.
Pour moi, l'erreur devrait plutôt venir de la procédure ValiderSaisieProduit, et particulièrement de cette ligne que je n'ai pas comprise :
Ici = range("B65000").End(xlup).Row + 1 '.Select
Regarde bien !
Tu as par deux fois le nom TabRéfMenus qui y apparaît, cette référence n'existe pas dans ton classeur, remplace cette référence par TabRéfProduits et teste la procédure, c'est à dire fait un tri quelconque manuel dans ton tableau de produits et lance la macro TriTableau uniquement, ajoute des produits si besoin puisque tu dis que la création fonctionne.
Cordialement,
Ma méthode est la bonne : faire lire mon programme par quelqu'un car à force de le lire et de le relire , je ne vois pas l'erreur. Toi, tu as vu aussitôt où était le problème. Rectification effectuée, tri tableau s'exécute.
De plus, la ligne 2 se déplace après la dernière création faite et reste vide, deuxième problème résolu. Maintenant, reste à régler le problème du combo box Modifier produit de la cellule D5 de la feuille Accueil qui ne se remplit pas quelque soit le choix fait dans la liste déroulante de la cellule C5 (j'ai testé après les modifications effectuées pour le tri tableau).
Non, une bonne méthode est de tester chaque modification avant de poursuivre pour déceler au plus vite les problèmes.
Tu avais les éléments en main, un message d'erreur signalait un souci sur une méthode de l'objet range et pour cause car le nom indiqué n'existait pas (Key:=Range("TabRéfMenus[Code produit] ")).
Par ailleurs, même si tu ne demande pas la lune, on n'est pas madame Soleil et lire un code non commenté et sans explication n'est pas aussi évident que tu le penses.
D'ailleurs je n'ai pas compris quel est ton mode opératoire pour modifier ou supprimer un produit.
L'important est qu'un de tes problèmes soit résolu.
Cordialement
Demain, enfin j'espère, je te donnerai d'autres explications. Mais pour l'instant, je pense que cela devrait suffire pour que le combo box Modifier produit de la feuille Accueil se remplisse enfin.
Bonnes fin de soirée, nuit et continuation.
Mon fichier menus 10 :
https://cjoint.com/c/IHomPdGK5C6
Le fichier modèle (impossible d'effectuer le débogage pas à pas détaillé)
https://cjoint.com/c/IHomQ71DsU6
Dans le fichier menus2V4.xlsm (comme dans le mien), module Modifie (ou Module Modifier), le pas pas détaillé sort une erreur à l'instruction ci-après alors que le programme de Menus2V4 fonctionne bien :
If ActiveSheet.cboModifierRéférentielsMenus.ListIndex = -1 Or ActiveSheet.cboModifierRéférentielsMenus = "Pas de référentiels à modifier" Then Exit Sub
Erreur : propriété ou méthode non gérée par cet objet.
Bravo ! mais j'ai l'impression qu'il y a d'autres erreurs après
Pour info je te donne ici le code des procédures TriTableau et celle de la feuille accueil que j'ai aérées et commentées, je pense que c'est plus lisible que ce que tu as
Sub TriTableau()
'Supprimer les critères de tri dans le tableau TabRéfProduits
ActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort.SortFields.Clear
'Ajouter un ctitère de tri sur la colonne "Code produit" dans le tableau TabRéfProduits
ActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort.SortFields.Add _
Key:=Range("TabRéfProduits[Code produit]"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'Ajouter un ctitère de tri sur la colonne "Nom produit" dans le tableau TabRéfProduits
ActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort.SortFields.Add _
Key:=Range("TabRéfProduits[Nom produit]"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
'Trier le tableau TabRéfProduits selon les critères de tri renseignés précédemment
With ActiveWorkbook.Worksheets("Produits").ListObjects("TabRéfProduits").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Public Ele As Range
Private Sub Worksheet_Change(ByVal Target As Range)
'Si le changement concerne la celulle "C5"
If Not Intersect(Target, Range("C5")) Is Nothing Then
'Effacer le contenu de la liste déroulante cboModifierProduit
cboModifierProduit.Clear
'Pour chaque cellule élément de la colonne "Nom catégorie" du tableau TabRéfProduits
For Each Ele In Application.Range("TabRéfProduits[Nom catégorie]")
'Si le contenu de cette cellule est égale à la catégorie de la cellule "C5" et qu'il y a "oui" dans la cellule 10 colonnes à droite
If Ele = Range("C5") And Ele.Offset(0, 10) = "Oui" Then
'Ajouter dans la liste déroulante cboModifierProduit le "Code Produit" qui se trouve juste à droite de la cellule élément
cboModifierProduit.AddItem Ele.Offset(0, 1)
' Ajouter le numéro de ligne de la cellule élément dans la deuxième colonne de la liste déroulante (utilité ?)
cboModifierProduit.List(ActiveSheet.cboModifierProduit.ListCount - 1, 1) = Ele.Row
End If
Next Ele
'Si le combo box Modifier produit est vide alors
If cboModifierProduit.ListCount = 0 Then
'La mention "Pas de produit à modifier" est ajoutée à l'intérieur du combo box Modifier produit
cboModifierProduit.AddItem "Pas de produit à modifier"
End If
'Affecter par défaut la première valeur de la liste lors de l'affichage de la liste déroulante cboModifierProdui
cboModifierProduit.ListIndex = 0
End If
'Si le changement concerne la celulle "C7"
If Not Intersect(Target, Range("C7")) Is Nothing Then
cboSupprimerProduit.Clear
For Each Ele In Application.Range("TabRéfProduits[Code produit]")
If Ele = Range("C7") Then
cboSupprimerProduit.AddItem Ele.Offset(0, -3)
cboSupprimerProduit.List(cboSupprimerProduit.ListCount - 1, 1) = Ele.Row
End If
Next Ele
If cboSupprimerProduit.ListCount = 0 Then
cboSupprimerProduit.AddItem "Pas de produit à supprimer"
End If
cboSupprimerProduit.ListIndex = 0
End If
End Sub
Cordialement
Dans ton message, c'est surtout les commentaires qu tu as modifiés, le code semble identique tant pour le tri tableau que pour la feuille Accueil.
Merci pour ton aide pour ces trois problèmes. Pour ce qui es du code des autres feuilles et des modules, souhaites-tu que je l'écrive moi-même et que je te l'envoie (solution que je préfère car cela me permet d'essayer de comprendre l'instruction) ou tu le confectionnes toi-même et me le fais parvenir ensuite.
Bonne soirée, nuit et continuation. Joyeux 15 août.
pour YG_BE, pour l'instant, je ne souhaite pas clôturer le dossier car je souhaiterais qu'on s'attaque aux commentaires pour les autres feuilles et les modules comme l'a si bien fait ALS35.
J'ai quelques questions concernant ton application car je peux te proposer quelques évolutions :
Quel est ta version d'Excel
Quelle est l'utilité de la ligne 0000- à la fin de la table produits
Dans la feuille MP quand on change la catégorie le code produit n'est plus cohérent avec la liste de choix, ne faudrait-il pas effacer alors ce code produit
Dans la feuille SP y-a--il des valeurs obligatoires à saisir, faut-il remettre à zéro certaines valeurs plutôt que de laisser les dernières utilisées, la date de création est en saisie manuelle peut-elle être automatique
Dans la feuille Accueil pourquoi la combobox Modifier utilise le code produit et la combobox Supprimer utilise l'intitulé, peut-on harmoniser les deux
Dans la feuille Référentiels la gestion de la liste Code produit (utilisée en feuille SP) est plutôt difficile à faire évoluer, les colonnes C et D sont-elles susceptibles de modifications
Cordialement
J'ai la version Microsoft office professionnel 2010.
Dans ce programme, Intitulé est utilisé à certains endroits mais je pense que cette colonne peut être supprimée et toutes les instructions faisant référence à Intitulé peuvent être abrogée. Il faudrait faire un essai pour voir ce que donnerait.
"Dans la feuille MP quand on change la catégorie le code produit n'est plus cohérent avec la liste de choix, ne faudrait-il pas effacer alors ce code produit". Je n'ai pas compris. Donnes-moi un exemple.
"Dans la feuille SP y-a--il des valeurs obligatoires à saisir, faut-il remettre à zéro certaines valeurs plutôt que de laisser les dernières utilisées, la date de création est en saisie manuelle peut-elle être automatique". Je pense que oui, on peut remettre les valeurs à zéro mais à condition que cela n'efface pas les validations des données ni les formules si erreur index. La date de création pourrait être automatique.
"Dans la feuille Accueil pourquoi la combobox Modifier utilise le code produit et la combobox Supprimer utilise l'intitulé, peut-on harmoniser les deux". Tu ne dois pas avoir le bon fichier car chez moi, Modifier produit, supprimer produit ont une validation des données dont la source est Nom_catégorie.
"Dans la feuille Référentiels la gestion de la liste Code produit (utilisée en feuille SP) est plutôt difficile à faire évoluer, les colonnes C et D sont-elles susceptibles de modifications". Les colonnes C et D ne sont pas susceptibles d'être modifiées.
J'espère avoir répondu à tes questions.
Bonnes journée et continuation.
Merci de ta réponse.
Quelle est l'utilité de la ligne 0000- à la fin de la table produits ?
Pour la feuille MP, je voulais parler en fait de la feuille SP : tu crées un produit, les valeurs précédemment saisies sont affichées dans la feuille SP, si tu change la catégorie, le code produit déjà affiché n'est plus conforme à cette nouvelle catégorie, si tu regardes sur la liste déroulante Code produit tu vois qu'elle n'a rien à voir avec le code affiché.
Dans la feuille Accueil, je ne parlais pas des cellules C5 et C7 mais des contrôles ComboBox affichés à droite, le premier (modifier) contient le code produit, le second (supprimer) contient l'intitulé, quel est l'intérêt d'avoir deux méthodes différentes, mais si on supprime la colonne intitulé de la feuille produits cette question n'a plus lieu d'être.
Est-tu bien certain que cet Intitulé n'a pas d'intérêt pour toi, car le code est bien spécifique pour le générer ?
Cordialement
Pour la suppression, je crois avoir trouvé : dans le Module supprimer, il y a cette instruction :
Intitulé = shProduits.Range("A" & Ici).
Donc il faudrait remplacer A par E ?
Pour la modification, je n'ai pas trouvé.
Pour la feuille SP, on peut supprimer les mentions déjà affichées. Malheureusement, Clear efface toutes les formules si erreur index or je voudrais les conserver (ainsi que les validations des données). Je n'ai pas trouvé de solution qui répondrait à mes désirs.
Table produits : le tableau est vide : je créé la formule de la colonne Intitulé dans la cellule A2. Je crée un produit : la création s'enregistre dans la feuille produits, à partir de la cellule A2. La cellule A2 vierge reste vierge mais descend d'une ligne et se positionne en A3 et ainsi de suite. Une utilité : aucune idée.
J'ai fait ceci d'après un modèle qui m'a été fait par une ou plusieurs personnes. Et comme je ne suis pas un expert, et que cela fonctionne ainsi, je l'ai gardé sans savoir si cela était ou pas utile.
À quel endroit vois-tu Code produit pour la modification, Intitulé pour la suppression ?
dans la feuille Accueil ce sont les deux contrôles Combox à droite de C5 et C7
Si tu veux modifier ou supprimer un produit existant, tu choisis la catégirie dans C5 ou C7 et le ComboBox à droite de C5 contient un code produit alors que le ComboBox à droite de C7 conteint un intitulé
Pourquoi ?
Procédure feuille accueil
cboModifierProduit.AddItem Ele.Offset(0, 1) et
cboSupprimerProduit.AddItem Ele.Offset(0, -3)
Je pense qu'il est préférable d'avoir l'intitulé dans les deux cas
Par ailleurs, j'ai pris le temps de faire une autre version pas mal modifiée que je te joins ici
Teste-la, peu importe que tu la gardes ou non, peut-être qu'il y des choses qui te semblent intéressantes et d'autres non. Il y a peut-être des bugs.
Dis-moi ce que tu en penses
https://www.cjoint.com/c/IHqukvcmYYF
Cordialement
Je vais te redire la même chose en espérant que cela ne vas pas t'offusquer alors que pour moi c'est un compliment sincère. Merci ALS35 pour ton aide, dommage que je ne t'ai pas connu plus tôt, je serai beaucoup plus avancé dans mon travail.
Pour moi, c'est un compliment et non je ne sais quoi de méchant.
Grâce à toi, j'ai compris certaines instructions, entre autres celles que tu mentionnes dans ton message concernant la feuille Accueil.
Nouveau fichier : feuille Accueil : rien à redire. Création, modification, suppression : je verrai cela dimanche. Demain c'est le jour réservé à mes romans.
Merci beaucoup ALS35 pour ton aide très précieuse et ta patience.
Bonnes fin de soirée, nuit et continuation.
Je viens d'effectuer diverses manipulations sur ton fichier. C'est extraordinaire : tout fonctionne correctement : la création, la modification la suppression (pour cette dernière, je n'ai pas accepté la suppression) et, de plus, ce qui a été un point noir jusqu'ici, la modification donne bien les renseignements enregistrés et, pour les champs modifiables, un changement de code change le nom et l'enregistrement modifie bien les données dans la feuille Produits et ne créée pas enfin une nouvelle ligne.
Merci beaucoup pour ton aide précieuse..
Merci bien, continue à bien tout tester, on ne sait jamais.
Je continue mes évolutions, : dans la feuille Accueil, je vais passer à l'intitulé pour les deux ComboBox, le numéro qui est affiché dans la deuxième colonne de la ComboBox Suppresssion et qui correspond au numéro de ligne du produit à supprimer dans la table Produits t'est-il utile ?
Cordialement
Sauf erreur ou omission de ma part, dans le combo box supprimer, le numéro qui est affiché dans la deuxième colonne correspond au numéro de création (colonne B) et non au numéro de ligne. Je souhaiterais le garder.
Feuille accueil : Tu avais souhaité que la référence qui apparaissait dans le combo box Modifier produit soit de la même nature que celle du combo box Supprimer produit. Or, actuellement, ce n'est pas le cas.
1) Non, dans la ComboBox Supprimer le libellé qui apparaît, par exemple : PVWE01-2 13, est constitué d'une part de l'intitulé du produit (PVWE01-2) comprenant lui même le code produit (PVWE01) et le numéro de création (2) et d'autre part du numéro de ligne du produit dans le tableau Produits (13). C'est ce dernier numéro que pour le quel je te demande ton souhait
2) Pour la ComboBox Modifier tu peux modifier, pour tester, dans la procédure de la feuille Accueil
la ligne cboModifierProduit.AddItem Ele.Offset(0, 1) et mettre cboModifierProduit.AddItem Ele.Offset(0, -3), tu changes juste en -3
Cordialement
-3 : cela signifie avancer de 3 colonnes ?
-3 : cela signifie reculer de 3 colonnes ?
cboModifierProduit.AddItem Ele.Offset(0, 1) Modifier
cboSupprimerProduit.AddItem Ele.Offset(0, -3) Supprimer
BUDGETS
Non, raté !
Dans la procédure Accueil, Ele est une cellule qui pointe sur le Nom catégorie (colonne D)
(instruction For Each Ele In Application.Range("TabRéfProduits[Nom catégorie]"))
Ele.Offset(0, 1) signifie par rapport à la cellule Ele, prendre la cellule 1 colonne à droite c'est à dire le Code produit
Ele.Offset(0, -3) signifie par rapport à la cellule Ele, prendre la cellule 3 colonnes à gauche c'est à dire l'intitulé
A plus tard
À part tes contributions très intéressantes ici, dans la vie tu es programmeur, analyste ou les deux à la fois ?
Bonnes fin de soirée, nuit et continuation.
Une copie conforme fonctionne à l'identique...
Chercherais-tu à nous rouler dans la farine ?