XL 2010 Remplissage du TextBoxNuméroCréationArticlesMenus

BUDGETS

XLDnaute Impliqué
Bonjour à toutes et à tous,

Soit la feuille BD articles menus comprenant un tableau dont le nom est TabArticlesMenus et comprenant différentes colonnes dont Code catégorie articles menus, Nom catégorie articles menus, Code article menu, Nom article menus et Numéro création articles menus.
Supposons que ce tableau soit vide. Je crée un premier article (Code catégorie articles menus : CCAM01, Nom catégorie articles menus : DMR, code article menus : DMR01, Nom article menus : Pomme). Numéro création articles menus : deux possibilités : la première taper le numéro moi-même; deuxième solution : demander au programme de le créer lui-même. Dans ce dernier cas, l'article n'existe pas, le numéro de création sera 1; l'article existe déjà : le numéro de création sera 2 ou 3 ou 4, selon le cas, etc. Pour chaque catégorie, il devra partir de 1 pour chaque article. DMR ET DS, n'auront qu'un seul article. DWE en aura 21. pour LMR : premier article : il aura le numéro 1, le 17ème article sera numéro 17. L'attribution du numéro de création sera indépendant d'une catégorie à l'autre.
D'avance merci pour votre aide.
 

BUDGETS

XLDnaute Impliqué
Bonsoir Christian,





dans le module ThisWorkbook, voici tes 2 subs actuelles (inchangées) :

VB:
Private Sub Workbook_Open()
Exit Sub
 Dim Lig1 As Long
    With FL01_AM
        'Ligne 1, colonne 1 (troisième colonne à partir de la colonne A, il sera marqué Open)
        .Cells(1, Col1).Value = "Open"
        Lig1 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col1).End(xlUp).Row) + 1
        .Cells(Lig1, Col1).Value = Now
    End With
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Exit Sub
Dim Lig2 As Long
    With FL01_AM
        'Ligne 1, colonne 0 (quatrième colonne à partir de la colonne A, ou 1 colonne après l'open il sera marqué Save)
        .Cells(1, Col2).Value = "Save"
        Lig2 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col2).End(xlUp).Row) + 1
        .Cells(Lig2, Col2).Value = Now
    End With
End Sub

je pensais que tu aurais vu ceci : pour les 2 subs, afin de désactiver les mouchards, au lieu de simplement mettre une seule ligne en commentaire, comme je l'avais fait avant (avec une apostrophe en début de ligne), j'ai carrément ajouté en 1ère ligne de la sub cette instruction : Exit Sub ➯ dès que la sub est appelée, ça en sort aussitôt ! 😁 😂 🤣 (tout simplement, c'est aussi bête que ça !) ; tu as donc juste à supprimer la 1ère ligne Exit Sub pour que ça remarche comme avant ! tu vois, c'est pas bien sorcier ! 😄

quand je dois travailler sur ton fichier, la 1ère chose que je fais est de désactiver tes mouchards, car ça ne m'arrange pas du tout que ça remplisse les colonnes C et D de la feuille Accueil, et surtout ceci : quand j'ai fini de travailler sur ton fichier, je mets l'attribut "Lecture Seule" : ça m'indique plus tard que si c'est en "Lecture Seule", j'avais finalisé ton fichier, et lors d'une simple consultation, je ne risque pas de le modifier par inadvertance ! seulement voilà : si le fichier est en lecture seule, tes macros Open et Save sont plus que gênantes ! 😁 😜 donc tant pis : je continue à les désactiver, et ce sera à toi d'enlever Exit Sub !​

soan
Bonsoir SOAN,

Effectivement, j'avais vu le exit sub et cela m'avait surpris de son emplacement. Donc je supprime tous les exit sub qui suit la création de la procédure ? Cela était déjà arrivé mais je ne me souvenais pas du tout comment j'avais fait pour réactiver les mouchards. Et pour le masquer afficher, est-ce pour cette raison qu'il ne trouve pas HideFeuilles ? Et pour les noms qui auraient changé ?
 

soan

XLDnaute Barbatruc
Re,

Donc je supprime tous les exit sub qui suit la création du procédure ?

il te suffit de supprimer un seul Exit Sub, dans chacune des 2 subs ; ça donnera :​

VB:
Private Sub Workbook_Open()
Dim Lig1 As Long
    With FL01_AM
        'Ligne 1, colonne 1 (troisième colonne à partir de la colonne A, il sera marqué Open)
        .Cells(1, Col1).Value = "Open"
        Lig1 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col1).End(xlUp).Row) + 1
        .Cells(Lig1, Col1).Value = Now
    End With
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Lig2 As Long
    With FL01_AM
        'Ligne 1, colonne 0 (quatrième colonne à partir de la colonne A, ou 1 colonne après l'open il sera marqué Save)
        .Cells(1, Col2).Value = "Save"
        Lig2 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col2).End(xlUp).Row) + 1
        .Cells(Lig2, Col2).Value = Now
    End With
End Sub



voici autre chose de différent :

ça fait donc en tout 4 instructions erronées... pour l'instant, car je n'ai pas pris la peine de tout tester ! :rolleyes: j'croise les doigts pour qu'il n'y aie pas d'autres erreurs, sinon, faudra qu'tu apprennes à déboguer tes propres erreurs

Ton fichier MENUS8.xlsm ne fonctionne pas : impossible de masquer les feuilles : HideFeuilles introuvable ! Plus rien ne fonctionne sur aucun des fichiers. HideFeuilles introuvable ! À l'avenir, si cela vient de cela, merci d'éviter de bloquer les mouchards.​

il ne faut pas juger trop vite, et m'accuser aussi hâtivement ! car pour ça, je n'y suis absolument pour rien, et c'est entièrement de ta faute ! à quoi ça sert que j'ai pris la peine de commenter tous les codes VBA si tu ne prends pas la peine de les lire attentivement, et de prendre en compte ce qui est écrit ? la preuve :​

VB:
Private Sub HideFX() 'masque toutes les feuilles, sauf Accueil
  Dim i%
  For i = 2 To Worksheets.Count: Worksheets(i).Visible = 0: Next i
End Sub

à ton avis, pourquoi j'ai pris la peine de bien préciser dans le commentaire « sauf Accueil » ? ce n'est pas pour rien ! et d'après toi, comment c'est fait par la macro ? tout simplement car l'indice de feuille commence à 2 ! donc ça laisse inchangée la feuille d'indice 1, qui est ... je te le donne en mille ... eh oui, comme par hasard, c'est justement la feuille "Accueil", car c'est la toute première feuille du classeur !

alors bien sûr, ensuite, est-ce ma faute à moi si tout d'un coup tu décides d'ajouter une nouvelle feuille à gauche de la feuille "Accueil", celle que tu as nommée "Mode d'emploi" ? je ne pouvais pas le deviner, ni le prévoir ! je ne suis pas voyant, et j'ai pas d'boule de cristal pour prévoir les changements que tu vas apporter au classeur que j'ai fait !

et toi, tu aurais voulu que ma sub HideFX() fonctionne tout aussi bien qu'avant ton ajout d'une feuille, comme par miracle ? elle aurait dû se dire : « ah, ben oui, voilà que Christian a ajouté une feuille "Mode d'emploi" à gauche de la feuille "Accueil" ! faut que j'en tienne compte automatiquement, suis-je bête ! donc voyons voir : la feuille "Accueil" est maintenant la 2ème feuille du classeur, donc c'est plutôt à partir de la 3ème feuille qu'il faut masquer ou afficher les feuilles ; bon sang ! mais c'est bien sûr ! eurêka, j'ai trouvé toute seule ! j'suis une macro super intelligente, dotée de capacités dignes de l'IA (Intelligence Artificielle) ».

attends, voici le plus drôle : comme tu n'as pas adapté la sub HideFX(), ben ça masque la 2ème feuille, donc ça masque la feuille "Accueil", n'est-ce pas ? et si la feuille "Accueil" est masquée, qu'en est-il, des boutons de ton menu de la feuille "Accueil" ? ah ben oui, hein ! c'est sûr que si la feuille "Accueil" n'est plus visible, les boutons de ton menu ne sont plus visibles non plus ! ni accessibles par une instruction .Select ! donc forcément, y'a un plantage avec l'instruction ActiveSheet.Shapes("HideFeuilles").Select de la sub HideShow() ! mais c'est pas grave, hein ? puisque c'est de ma faute et pas la tienne ! 😜 😂 🤣

alors bon, une fois que la cause de l'erreur est connue, c'est très facile de faire l'adaptation adéquate : il suffit de remplacer 2 par 3, et tout rentrera dans l'ordre :​

VB:
Private Sub HideFX() 'masque toutes les feuilles, sauf Accueil
  Dim i%
  For i = 3 To Worksheets.Count: Worksheets(i).Visible = 0: Next i
End Sub

soan
 

BUDGETS

XLDnaute Impliqué
Re,



il te suffit de supprimer un seul Exit Sub, dans chacune des 2 subs ; ça donnera :​

VB:
Private Sub Workbook_Open()
Dim Lig1 As Long
    With FL01_AM
        'Ligne 1, colonne 1 (troisième colonne à partir de la colonne A, il sera marqué Open)
        .Cells(1, Col1).Value = "Open"
        Lig1 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col1).End(xlUp).Row) + 1
        .Cells(Lig1, Col1).Value = Now
    End With
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Lig2 As Long
    With FL01_AM
        'Ligne 1, colonne 0 (quatrième colonne à partir de la colonne A, ou 1 colonne après l'open il sera marqué Save)
        .Cells(1, Col2).Value = "Save"
        Lig2 = WorksheetFunction.Max(.Cells(.Rows.Count, Col1).End(xlUp).Row, .Cells(.Rows.Count, Col2).End(xlUp).Row) + 1
        .Cells(Lig2, Col2).Value = Now
    End With
End Sub



voici autre chose de différent :





il ne faut pas juger trop vite, et m'accuser aussi hâtivement ! car pour ça, je n'y suis absolument pour rien, et c'est entièrement de ta faute ! à quoi ça sert que j'ai pris la peine de commenter tous les codes VBA si tu ne prends pas la peine de les lire attentivement, et de prendre en compte ce qui est écrit ? la preuve :​

VB:
Private Sub HideFX() 'masque toutes les feuilles, sauf Accueil
  Dim i%
  For i = 2 To Worksheets.Count: Worksheets(i).Visible = 0: Next i
End Sub

à ton avis, pourquoi j'ai pris la peine de bien préciser dans le commentaire « sauf Accueil » ? ce n'est pas pour rien ! et d'après toi, comment c'est fait par la macro ? tout simplement car l'indice de feuille commence à 2 ! donc ça laisse inchangée la feuille d'indice 1, qui est ... je te le donne en mille ... eh oui, comme par hasard, c'est justement la feuille "Accueil", car c'est la toute première feuille du classeur !

alors bien sûr, ensuite, est-ce ma faute à moi si tout d'un coup tu décides d'ajouter une nouvelle feuille à gauche de la feuille "Accueil", celle que tu as nommée "Mode d'emploi" ? je ne pouvais pas le deviner, ni le prévoir ! je ne suis pas voyant, et j'ai pas d'boule de cristal pour prévoir les changements que tu vas apporter au classeur que j'ai fait !

et toi, tu aurais voulu que ma sub HideFX() fonctionne tout aussi bien qu'avant ton ajout d'une feuille, comme par miracle ? elle aurait dû se dire : « ah, ben oui, voilà que Christian a ajouté une feuille "Mode d'emploi" à gauche de la feuille "Accueil" ! faut que j'en tienne compte automatiquement, suis-je bête ! donc voyons voir : la feuille "Accueil" est maintenant la 2ème feuille du classeur, donc c'est plutôt à partir de la 3ème feuille qu'il faut masquer ou afficher les feuilles ; bon sang ! mais c'est bien sûr ! eurêka, j'ai trouvé toute seule ! j'suis une macro super intelligente, dotée de capacités dignes de l'IA (Intelligence Artificielle) ».

attends, voici le plus drôle : comme tu n'as pas adapté la sub HideFX(), ben ça masque la 2ème feuille, donc ça masque la feuille "Accueil", n'est-ce pas ? et si la feuille "Accueil" est masquée, qu'en est-il, des boutons de ton menu de la feuille "Accueil" ? ah ben oui, hein ! c'est sûr que si la feuille "Accueil" n'est plus visible, les boutons de ton menu ne sont plus visibles non plus ! ni accessibles par une instruction .Select ! donc forcément, y'a un plantage avec l'instruction ActiveSheet.Shapes("HideFeuilles").Select de la sub HideShow() ! mais c'est pas grave, hein ? puisque c'est de ma faute et pas la tienne ! 😜 😂 🤣

alors bon, une fois que la cause de l'erreur est connue, c'est très facile de faire l'adaptation adéquate : il suffit de remplacer 2 par 3, et tout rentrera dans l'ordre :​

VB:
Private Sub HideFX() 'masque toutes les feuilles, sauf Accueil
  Dim i%
  For i = 3 To Worksheets.Count: Worksheets(i).Visible = 0: Next i
End Sub

soan
Puisse-je te rappeler l'une de mes toutes premières phrases (je sûr de te l'avoir dit) que j'ai dû écrire : en gros, j'ai dû écrire que j'étais nul en déduction, la preuve en est magistralement, hélas, démontrée. Effectivement, en mettant 3, plus de problème mais pourquoi 3 (à gauche de la feuille Accueil, il n'y a qu'une feuille, à droite il y en a 4) ? Et pour les noms changés ? À toutes fins utiles, je te signale que demain matin jeudi 22 juillet 2021, dès 9 heures, je serai sur mon ordinateur. Je me lève à six heures car je dois aller faire ma prise de sang trimestrielle. Une dernière précision : relis mon message de ce matin : j'ai écrit en gros ton fichier MENUS8.xlsm ne fonctionne pas. À moins que de lignes fantômes ne se soient créées après mon envoi (sans que je le sache), je n'ai jamais écrit que c'était de ta faute. Ne me prête pas des intentions que je n'ai jamais eues. D'avance merci.
 
Dernière édition:

soan

XLDnaute Barbatruc
Re,

Je n'ai pas souvenir d'avoir renommer certains noms. Sois plus explicite et dis-moi quels noms que j'ai renommés. Donc; comme d'habitude, l'erreur n'est pas là où Excel la signale, c'est-à-dire qu'unload me: UF2_ArtMenus.show n'a rien à voir avec le non fonctionnement. Je suis très étonné de ce que tu me dis, car j'ai repris mots pour mots tout ton fichier MENUS 7.xlsm tant pour les feuilles, les objets, les noms définis, etc. Relis bien mon message : je t'ai indiqué l'erreur qui se produisait, et à quel moment. J'ai été très précis, contrairement à ce que tu sembles affirmer. À toutes fins utiles, je te signale que je tape le code des différentes procédures en minuscules : des feuilles, des noms définis, des objets, etc. les minuscules se transforment automatiquement, soit partiellement, soit totalement suivant le cas, en majuscules, ce qui prouve que que le nom existe; dans le cas contraire, j'essaie de voir où se trouve l'erreur et je rectifie en conséquence. Donc les noms renommées cela me fait bien rire (jaune) !​

même si tu ris jaune, je confirme que tu as bien renommé des noms ! et sans modifier le code VBA en conséquence ! d'où les 4 instructions erronées que j'ai dû corriger ! alors voilà ci-dessous quels sont ces noms, qui sont tous sur la feuille "LT03".


A) 1er tableau structuré :

tu as changé les noms des entêtes de colonne :

ce n'est plus "CJ" et "NJ" mais "CJO" et "NJO"

et toi, bien sûr, tu aurais voulu que le code VBA prenne
automatiquement en compte ces changements ! 😁

(ben voyons ! 😜)



B) 2ème tableau structuré :

tu as changé les noms des entêtes de colonne :

ce n'est plus "CK" et "NK" mais "CCOND" et "NCOND"​

même remarque : tu aurais voulu que comme par enchantement,
le code VBA se modifie de lui-même juste pour te faire plaisir !


mais attends, ce n'est pas tout ! tu as changé même le nom de ce 2ème tableau structuré : au lieu de "LCO", c'est maintenant "LCOND" ! alors oui, comme tu n'as pas pensé à changer le code VBA pour ça aussi, je confirme que tu peux rire jaune ! 😄 (mais moi, pour ça aussi, je n'y suis absolument pour rien !)



alors pendant que je vais aller prendre une longue pause bien méritée, je te laisse trouver dans le code VBA à quel endroit j'ai fait les modifs que toi tu aurais dû faire ! 😁 et surtout, ne te plains pas ! car c'est toi qui as décidé et voulu refaire entièrement mon fichier, et c'est toi aussi qui as décidé et voulu les différents changements que tu y as apportés ! 😁 eh oui, c'est pas de tout repos, hein, la vie d'un programmeur VBA ! le job ne se fait pas tout seul, automatiquement ! 😄

maint'nant, si t'as envie de laisser tomber le VBA, et d'utiliser uniquement Power Query et Power Bi, comme certains le recommandent, j'ai rien contre, hein ? fais comme tu veux, c'est ton choix ! 😜

soan
 

BUDGETS

XLDnaute Impliqué
Re,



même si tu ris jaune, je confirme que tu as bien renommé des noms ! et sans modifier le code VBA en conséquence ! d'où les 4 instructions erronées que j'ai dû corriger ! alors voilà ci-dessous quels sont ces noms, qui sont tous sur la feuille "LT03".


A) 1er tableau structuré :

tu as changé les noms des entêtes de colonne :

ce n'est plus "CJ" et "NJ" mais "CJO" et "NJO"

et toi, bien sûr, tu aurais voulu que le code VBA prenne
automatiquement en compte ces changements ! 😁

(ben voyons ! 😜)



B) 2ème tableau structuré :

tu as changé les noms des entêtes de colonne :

ce n'est plus "CK" et "NK" mais "CCOND" et "NCOND"​

même remarque : tu aurais voulu que comme par enchantement,
le code VBA se modifie de lui-même juste pour te faire plaisir !


mais attends, ce n'est pas tout ! tu as changé même le nom de ce 2ème tableau structuré : au lieu de "LCO", c'est maintenant "LCOND" ! alors oui, comme tu n'as pas pensé à changer le code VBA pour ça aussi, je confirme que tu peux rire jaune ! 😄 (mais moi, pour ça aussi, je n'y suis absolument pour rien !)



alors pendant que je vais aller prendre une longue pause bien méritée, je te laisse trouver dans le code VBA à quel endroit j'ai fait les modifs que toi tu aurais dû faire ! 😁 et surtout, ne te plains pas ! car c'est toi qui as décidé et voulu refaire entièrement mon fichier, et c'est toi aussi qui as décidé et voulu les différents changements que tu y as apportés ! 😁 eh oui, c'est pas de tout repos, hein, la vie d'un programmeur VBA ! le job ne se fait pas tout seul, automatiquement ! 😄

maint'nant, si t'as envie de laisser tomber le VBA, et d'utiliser uniquement Power Query et Power Bi, comme certains le recommandent, j'ai rien contre, hein ? fais comme tu veux, c'est ton choix ! 😜

soan
 

BUDGETS

XLDnaute Impliqué
Je vais revoir tout cela en détail. Il n'est pas question que je laisse tomber VBA. Et pour le 3 au lieu du 2 ? J'ai oublié de l'imprimer. Ce matin ou hier, j'ai reçu un message dans lequel, entre autres choses, tu m'expliquais la signification de MID$, je n'arrive pas à le retrouver. Pourrais-tu me donner son numéro ? Soit c'était un message long ou il y a plusieurs messages sur S1, S2 etc.
S1 = T(N - 2): S2 = "[" & S1 & "]": Mid$(S2, 2, 1) = "C"
cbCodArt.List = Range(S1 & S2).Value
 
Dernière édition:

soan

XLDnaute Barbatruc
Bonjour Christian,

Effectivement, en mettant 3, plus de problème mais pourquoi 3 (à gauche de la feuille Accueil, il n'y a qu'une feuille, à droite il y en a 4) ?

on décide que les 2 premières feuilles "Mode d'emploi" et "Accueil" seront « fixes », c'est-à-dire visibles tout l'temps, en permanence ; donc c'est toutes les autres feuilles à droite qu'on va masquer / afficher, à partir de la 3ème feuille ; voilà pourquoi 3 : boucle i, de 3 à Worksheets.Count.​



Et pour les noms changés ?

comme le code VBA utilise les noms des tableaux structurés et les noms de leurs en-têtes de colonnes, c'est bien évident que si tu les modifies sur la feuille de calcul, tu dois faire pareil dans le code VBA, puisque ce n'est pas fait automatiquement.​



relis mon message de ce matin : j'ai écrit en gros ton fichier MENUS8.xlsm ne fonctionne pas. À moins que de lignes fantômes ne se soient créées après mon envoi (sans que je le sache), je n'ai jamais écrit que c'était de ta faute. Ne me prête pas des intentions que je n'ai jamais eues.​

quand tu écris : « ton fichier ne fonctionne pas », c'est comme si tu disais : « ton code VBA ne marche pas » ; mais c'est faux ! mon code VBA marche très bien, sauf qu'il ne peut pas prévoir d'avance les modifs que tu vas faire, comme d'ajouter une feuille, ou de changer les noms utilisés pour référencer des données des tableaux structurés ! comme il ne peut pas s'adapter automatiquement à ces changements c'est à toi de modifier le code VBA pour qu'il soit adapté aux changements que toi tu as fait ! ce n'est pas à moi de le faire à ta place, car moi, j'ai déjà fait ce qu'il fallait dans mon fichier "MENUS7.xlsm" ! les changements qui sont dans le fichier "MENUS8.xlsm" c'est toi qui les as fait, pas moi ! alors c'est plutôt à moi de te dire : « Ne me prête pas des intentions que je n'ai jamais eues. D'avance merci. » !


Ce matin ou hier, j'ai reçu un message dans lequel, entre autres choses, tu m'expliquais la signification de MID$, je n'arrive pas à le retrouver. Pourrais-tu me donner son numéro ?​

c'était sur ton autre sujet : « Mon fichier MENUS.xlsm : feuille mode d'emploi », le post #9 ; mais comprends bien que c'est la dernière fois que je t'aide pour ce genre de renseignement, car c'est à toi de t'organiser comme il faut, et je ne peux pas passer mon temps à perdre du temps pour rechercher et trouver les posts que toi tu ne retrouves plus ! si tu as des problèmes de réseau ou de navigateur internet qui font que toutes les pages ne s'affichent pas dans la barre de défilement des pages, c'est avec David que tu dois régler ça, pas avec moi ! je n'ai pas oublié que tu lui as déjà envoyé 2 MP ; s'il est actuellement en vacances, tu ne peux rien faire d'autre qu'attendre son retour ; en attendant, note soigneusement où sont mes posts, et ne me le demande plus : ce sera inutile ! d'ailleurs, pour moi, cet exo est terminé, et cette conversation en est à 10 pages ! alors si tu as d'autres demandes, c'est mieux que tu ouvres un autre sujet ! je laisse à un autre contributeur le soin de te répondre, car je dois avancer sur d'autre exos que le tien.​



bon courage pour ta prise de sang trimestrielle. 🍀
soan
 

BUDGETS

XLDnaute Impliqué
Bonjour Christian,



on décide que les 2 premières feuilles "Mode d'emploi" et "Accueil" seront « fixes », c'est-à-dire visibles tout l'temps, en permanence ; donc c'est toutes les autres feuilles à droite qu'on va masquer / afficher, à partir de la 3ème feuille ; voilà pourquoi 3 : boucle i, de 3 à Worksheets.Count.​





comme le code VBA utilise les noms des tableaux structurés et les noms de leurs en-têtes de colonnes, c'est bien évident que si tu les modifies sur la feuille de calcul, tu dois faire pareil dans le code VBA, puisque ce n'est pas fait automatiquement.​





quand tu écris : « ton fichier ne fonctionne pas », c'est comme si tu disais : « ton code VBA ne marche pas » ; mais c'est faux ! mon code VBA marche très bien, sauf qu'il ne peut pas prévoir d'avance les modifs que tu vas faire, comme d'ajouter une feuille, ou de changer les noms utilisés pour référencer des données des tableaux structurés ! comme il ne peut pas s'adapter automatiquement à ces changements c'est à toi de modifier le code VBA pour qu'il soit adapté aux changements que toi tu as fait ! ce n'est pas à moi de le faire à ta place, car moi, j'ai déjà fait ce qu'il fallait dans mon fichier "MENUS7.xlsm" ! les changements qui sont dans le fichier "MENUS8.xlsm" c'est toi qui les as fait, pas moi ! alors c'est plutôt à moi de te dire : « Ne me prête pas des intentions que je n'ai jamais eues. D'avance merci. » !




c'était sur ton autre sujet : « Mon fichier MENUS.xlsm : feuille mode d'emploi », le post #9 ; mais comprends bien que c'est la dernière fois que je t'aide pour ce genre de renseignement, car c'est à toi de t'organiser comme il faut, et je ne peux pas passer mon temps à perdre du temps pour rechercher et trouver les posts que toi tu ne retrouves plus ! si tu as des problèmes de réseau ou de navigateur internet qui font que toutes les pages ne s'affichent pas dans la barre de défilement des pages, c'est avec David que tu dois régler ça, pas avec moi ! je n'ai pas oublié que tu lui as déjà envoyé 2 MP ; s'il est actuellement en vacances, tu ne peux rien faire d'autre qu'attendre son retour ; en attendant, note soigneusement où sont mes posts, et ne me le demande plus : ce sera inutile ! d'ailleurs, pour moi, cet exo est terminé, et cette conversation en est à 10 pages ! alors si tu as d'autres demandes, c'est mieux que tu ouvres un autre sujet ! je laisse à un autre contributeur le soin de te répondre, car je dois avancer sur d'autre exos que le tien.​



bon courage pour ta prise de sang trimestrielle. 🍀
soan
Bonjour SOAN,

En gros, dans quelle (s) procédure (s) dois-je effectuer des modifications pour tenir compte du nom des colonnes ? Je penses qu'il s'agit uniquement des procédures situées dans UF2_ArtMenu (cbCodeJour_change, cbCodCAM_Change, éventuellement dans TriArtMenu, cmdValider_Click, éventuellement dans SearchCtgArt).
La prise de sang est faite. J'étais le premier à passer, c'est très rare, d'habitude il y a beaucoup de monde avant moi. Sans doute l'effet des vacances et du Covid-19.
Dans les tableaux structurés, en ce qui concerne les noms définis, existe-t-il un moyen d'en imprimer la liste avec la ligne fait référence à ? Si oui, comment procéder ?
J'ai retrouvé ton message pour Mid$ (je l'avais retrouvé hier soir mais je ne t'ai pas prévenu).
Je viens de créer mon premier article : cela a été dur : j'ai eu plusieurs fois global a échoué : j'ai effectué toutes les modifications dans UF02_ArtMenus, dans les procédures concernées par les jours et le conditionnement. Maintenant, il va falloir voir la modification et la suppression. Je ne me suis pas servi de ton fichier MENUS8.xlsm : il fallait que je comprenne où était l'erreur et quelle était cette erreur. Dans cmdValider_Click, les indications en commentaires des deux With Cells doivent-elles être modifiées également ? Sauf erreur ou incompréhension de ma part, les indications en commentaires des deux With Cells correspondent au nom des colonnes de la feuille BD articles.
Suppression : ctrl + e : je n'ai qu'un article DMR : je choisis DMR : clic sur Go : global a échoué.
Modification : ctrl + e : je n'ai qu'un article DMR : je choisis DMR : clic sur GO : je modifie Code jour et code conditionnement, clic sur valider : erreur : méthode select de l'objet Worksheet a échoué. UF02_ArtMenu : cmdValider : FL02_BDA.Select en jaune. Voir le fichier joint.
 
Dernière édition:

soan

XLDnaute Barbatruc
@Christian

dans quelle (s) procédure (s) dois-je effectuer des modifications pour tenir compte du nom des colonnes ?

dans UF02_ArtMenu :

* ces 2 lignes de la sub UserForm_Initialize() :

VB:
lbCodArt2 = CodArt: lbNomArt2 = NomArt: cbCodJour.List = Range("LJO[CJO]").Value
cbCodCAM.List = Range("LCOND[CCOND]").Value: SearchCtgArt: cmdSuppr.Enabled = B

* et aussi ici :

VB:
Private Sub cbCodJour_Change()
    Dim N%: N = cbCodJour.ListIndex
    If N = -1 Then lbNomJour2 = "" Else lbNomJour2 = Range("LJO[NJO]").Item(N + 1)
End Sub

Private Sub cbCodCAM_Change()
    Dim N%: N = cbCodCAM.ListIndex
    If N = -1 Then lbNomCAM2 = "" Else lbNomCAM2 = Range("LCOND[NCOND]").Item(N + 1)
End Sub

soan
 

BUDGETS

XLDnaute Impliqué
@Christian



dans UF02_ArtMenu :

* ces 2 lignes de la sub UserForm_Initialize() :

VB:
lbCodArt2 = CodArt: lbNomArt2 = NomArt: cbCodJour.List = Range("LJO[CJO]").Value
cbCodCAM.List = Range("LCOND[CCOND]").Value: SearchCtgArt: cmdSuppr.Enabled = B

* et aussi ici :

VB:
Private Sub cbCodJour_Change()
    Dim N%: N = cbCodJour.ListIndex
    If N = -1 Then lbNomJour2 = "" Else lbNomJour2 = Range("LJO[NJO]").Item(N + 1)
End Sub

Private Sub cbCodCAM_Change()
    Dim N%: N = cbCodCAM.ListIndex
    If N = -1 Then lbNomCAM2 = "" Else lbNomCAM2 = Range("LCOND[NCOND]").Item(N + 1)
End Sub

soan
J'arrive à faire des créations mais les modification et suppression ne fonctionnent toujours pas. J'ai relu Menus7 et Menus8 pour comparer supp et searchctgart mais je ne vois aucune différence avec mon fichier. Dans mon fichier, cela ne marche pas tandis que dans les deux tiens, cela fonctionne correctement. Dans mon fichier, il y avait deux erreurs : il manquait une ligne et un exit sub au lieu de exit for. Mais cela ne fonctionne pas : il me sort une date de création de 1899 (samedi 30 décembre 1899) ! La suppression n'est pas prise en compte.
 

Pièces jointes

  • MENUS.xlsm
    78 KB · Affichages: 6
Dernière édition:

soan

XLDnaute Barbatruc
@Christian

La prise de sang est faite. J'étais le premier à passer, c'est très rare, d'habitude il y a beaucoup de monde avant moi. Sans doute l'effet des vacances et du Covid-19.​

👍 c'est une chance qu'il n'y aie pas eu trop de monde, et c'est une bonne chose de faite ! :)



Dans les tableaux structurés, en ce qui concerne les noms définis, existe-t-il un moyen d'en imprimer la liste avec la ligne fait référence à ? Si oui, comment procéder ?​

je n'sais pas si y'a un moyen d'imprimer la liste des noms définis (avec leur référence) ; si oui, je n'le connais pas ; peut-être qu'il faudrait faire un petit programme VBA pour ça ? mais ça serait un autre exo ; alors au besoin, crée un autre sujet ; moi, les impressions sur papier, ça ne m'intéresse pas.​



J'ai retrouvé ton message pour Mid$

ok ! :)



Je viens de créer mon premier article : cela a été dur : j'ai eu plusieurs fois global a échoué : j'ai effectué toutes les modifications dans UF02_ArtMenus, dans les procédures concernées par les jours et le conditionnement.

ok ! :)



Maintenant, il va falloir voir la modification et la suppression. Je ne me suis pas servi de ton fichier MENUS8.xlsm

c'est avec mon fichier MENUS7.xlsm que tu pourras bien comprendre comment il faut faire, surtout si tu lis très attentivement tous le commentaire VBA de UF02_ArtMenu ; c'était dans mon très long post #77, pour la sub cmdValider_Click() ; j'avais bien indiqué : « ➯ cette sub fait la Modif ou l'Ajout d'un article » (regarde bien les différentes valeurs de la variable lig) ; j'avais très bien détaillé la différence entre la Modif et l'Ajout ; tout y est ; c'est inutile que je répète les mêmes infos ; tu as juste à les relire.​



pour la suppression, c'était dans le même module UF02_ArtMenu ; cette sub :

VB:
Private Sub cmdSuppr_Click()
  If MsgBox("Souhaitez-vous supprimer l'article ?", vbYesNo) = vbNo Then Exit Sub
  Application.ScreenUpdating = 0: FL02_BDA.Rows(LgArt).EntireRow.Delete: Unload Me
End Sub

avec cette instruction : FL02_BDA.Rows(LgArt).EntireRow.Delete

il suffit que LgArt contienne le n° de ligne adéquat ; et c'est un n° de ligne par rapport à la feuille de calcul, ce n'est pas un n° de ligne par rapport au tableau structuré ; à toi de retrouver et relire les commentaires du code VBA qui y correspondent.​



ooooppppsss ! j'viens d'voir qu'j'ai oublié d'simplifier l'instruction ; mets plutôt :

FL02_BDA.Rows(LgArt).Delete

le .EntireRow est inutile, car avec .Rows(LgArt) c'est déjà la ligne entière ; le .EntireRow est utile quand il dépend d'une cellule, pas d'une ligne ; ça donne donc :​

VB:
Private Sub cmdSuppr_Click()
  If MsgBox("Souhaitez-vous supprimer l'article ?", vbYesNo) = vbNo Then Exit Sub
  Application.ScreenUpdating = 0: FL02_BDA.Rows(LgArt).Delete: Unload Me
End Sub

soan
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
@Christian



dans UF02_ArtMenu :

* ces 2 lignes de la sub UserForm_Initialize() :

VB:
lbCodArt2 = CodArt: lbNomArt2 = NomArt: cbCodJour.List = Range("LJO[CJO]").Value
cbCodCAM.List = Range("LCOND[CCOND]").Value: SearchCtgArt: cmdSuppr.Enabled = B

* et aussi ici :

VB:
Private Sub cbCodJour_Change()
    Dim N%: N = cbCodJour.ListIndex
    If N = -1 Then lbNomJour2 = "" Else lbNomJour2 = Range("LJO[NJO]").Item(N + 1)
End Sub

Private Sub cbCodCAM_Change()
    Dim N%: N = cbCodCAM.ListIndex
    If N = -1 Then lbNomCAM2 = "" Else lbNomCAM2 = Range("LCOND[NCOND]").Item(N + 1)
End Sub

soan
Je t'ai joint mon fichier dans mon précédent message. Merci de lire les procédures intéressées pour me signaler les éventuelles erreurs ou le manque d'instructions. J'ai relu avec MENUS7 mais je n'arrive pas à trouver de différences. La date de création étant inexacte, est-ce un motif pour ne pas arriver à modifier ou à supprimer ? Dans les procédures cmdValider et Click et Search CtgArt, les commentaires indiquent le nom des colonnes de la feuille BD articles : Oui ? Non ? L'ordre des feuilles a-t-il une importance dans les procédures ? Dans mon fichier, BD articles est en derniere place, tandis que dans MENUS7, elle est en seconde place (il n'y a pas de mode d'emploi).
 
Dernière édition:

soan

XLDnaute Barbatruc
Re,

La date de création étant inexacte, est-ce un motif pour ne pas arriver à modifier ou à supprimer ?

non, ce n'est pas un motif pour que la modif ou la suppression ne marchent pas.



Dans les procédures cmdValider et Click et Search CtgArt, les commentaires indiquent le nom des colonnes de la feuille BD articles : Oui ? Non ?

Oui.



ton fichier en retour.

* à la fin de la sub UserForm_Initialize(), j'ai ajouté 2 lignes :

VB:
Private Sub UserForm_Initialize()
    '...
    If cbCodCAM <> "" Then _
      lbNomCAM2 = Range("LCOND[NCOND]").Item(cbCodCAM.ListIndex + 1)
End Sub

grâce à cette modif, le nom du conditionnement sera affiché dès l'ouverture de UF02_ArtMenu, pour ton article "POMME" : ce sera le texte "1 bocal ou une boîte pour 1 repas".​



pour la sub cmdSuppr_Click, j'ai seulement enlevé le .EntireRow inutile :

VB:
Private Sub cmdSuppr_Click()
    If MsgBox("Souhaitez-vous supprimer l'article ?", vbYesNo) = vbNo Then Exit Sub
    Application.ScreenUpdating = 0: FL02_BDA.Rows(LgArt).Delete: Unload Me
End Sub

j'ai vérifié la Suppression, ça marche très bien ! :)

sur la feuille "BD articles", note qu'elle est inchangée ;
y'a donc ton article "POMME" en ligne 3.

* fais Ctrl e ➯ formulaire CtgArt

* pour le Code catégorie, choisis "DMR" ; clic sur GO

* note que le nom du conditionnement apparaît en bas :
"1 bocal ou une boîte pour 1 repas"

* clique sur le bouton Supprimer, puis sur le bouton Oui : ça y'est, c'est fait : ton article "POMME" n'existe plus dans ton tableau de la feuille "BD articles" : la ligne 3 est maintenant vide.​



edit du 22/07 à 23:02 : pour la modif, je viens de vérifier dans mon post #158.

soan
 

Pièces jointes

  • MENUS9.xlsm
    78.9 KB · Affichages: 7
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
292 782
Messages
1 926 181
Membres
182 940
dernier inscrit
elharf