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 SOAN,

Je vais supprimer toutes les feuilles inutiles. Je vais voir l'instruction qui fait l'objet d'une erreur et voir par rapport à ce que tu proposes. Avant Dans Excel, pour afficher des feuilles masquées, il fallait passer par Affichage ou bien selon ta méthode. Ta méthode n'a pas fonctionné chez moi et il a fallu passer par Accueil, Format et Afficher les colonnes.
Bonnes fin de soirée, nuit et continuation. Bon courage pour tes exos.
Bonjour SOAN,

c'est une très bonne question ! 👍 ça dépend de ce que tu veux faire ; au départ, j'avais mis cette formule :

=SI(OU(C3="";D3="");"";NB.SI($D$3:D3;D3))

cela sans tenir compte du formulaire UserFormCréationArticlesMenus ; maintenant, il semble bien que la formule est inutile, car ce serait à la charge du code VBA de ce UserForm de mettre la bonne valeur du Numéro création articles menus, en colonne P, et pour chaque article nouvellement créé via le UserForm ; c'est donc la sub CommandButtonValiderCréationArticlesMenus_Click() qui devrait faire ça, puisque c'est elle qui est appelée quand tu cliques sur le bouton "Valider création articles menus".

J'ai fait des modifications en tenant compte de tes précédentes observations mais soit j'ai toujours erreur de syntaxe soit cela ne me donne pas le résultat escompté.
quelle serait l'instruction et où l'écrire "car ce serait à la charge du code VBA de ce UserForm de mettre la bonne valeur du NuméroCréationArticlesMenus, en colonne P". Je suis d'accord sur un autre point : que ce soit le numéro à prendre qui apparaisse : ainsi si LSLM a déjà quatre articles, le numéro à prendre serait donc 5.
Merci soit de m'écrire l'instruction nécessaire et de me dire où la placer soit de me joindre un fichier modifié en conséquence.
 

BUDGETS

XLDnaute Impliqué
Bonjour BUDGETS,
Pas d'idée pour ton problème. Modifie le nom, vérifie que tu as une erreur quand tu clic sur Modifier, puis remet le nom correct et reclic sur Modifier.
Cordialement

Bonsoir Christian,

j'ai bien vu tes 3 posts #9, #12, et #13 ; désolé, mais je suis vraiment trop débordé en ce moment pour pouvoir répondre à tes exos ; je reporte donc à plus tard, quand j'en aurai le temps ; peut-être à partir de demain soir, ou peut-être à partir d'après-demain ?

pour "soan", tu as raison : à l'envers, ça donne bien "naos", qui est la "nef" d'un temple égyptien ou grec ; mais ce n'est qu'un pseudo ; et comme c'est indiqué sur mon profil, je suis un homme de France ; j'ajoute que je n'ai aucune origine grecque ni égyptienne, mais je connais quelques mots en grec ; par exemple : « Eurêka ! » = « J'ai trouvé ! » (comme disait Archimède).

sous le trait ci-dessous, réponses pour ce que tu as demandé, et dont les réponses ne sont pas trop longues.





oui, c'est bien ça ; j'ai mis la ligne en commentaire car elle causait une erreur de compilation ; mais je n'ai pas cherché à résoudre cette erreur car je voulais faire ta demande qui était autre chose : avoir un numéro pour chaque département ; normalement, tu aurais dû régler au préalable cette erreur, et m'envoyer un fichier dont la compilation ne bloque pas sur quelque chose qui est différent de ta demande ! tu imagines tout le temps que perdraient les contributeurs s'ils devaient résoudre toutes les erreurs de compilation qui ne sont pas liées à la demande elle-même ? on ne s'en sortirait plus ! à la limite, je veux bien « réparer » ce qui cloche si c'est facile et rapide à faire, mais sinon, non merci !

sans aucun changement, ton instruction qui se met en rouge est celle-ci :​

TextBoxnumérocréationArticlesMenus.Value = comboboxcodecatégoriearticlesmenus.Value + max(TabArticlesMenus[Numéro création articles menus])+1

le seul fait que tu utilises des noms très longs à rallonge, ça décourage de chercher de quoi il s'agit au juste ! je ne vais pas perdre de temps à chercher si le nom TextBoxnumérocréationArticlesMenus est correct ou non (y'a peut-être une faute de frappe dans le nom ?), ni à quelle TextBox du formulaire ça correspond ! idem pour comboboxcodecatégoriearticlesmenus ; mais je vois "max" dont la 1ère lettre n'est pas en majuscule (alors que c'est le cas pour tout mot-clé VBA) ; il faudrait probablement que tu utilises à la place :
Application.Max(TabArticlesMenus[Numéro création articles menus])

mais c'est seulement pour corriger ton erreur de compilation, rien de plus : ça devrait marcher, mais peut-être que prendre le maximum de la colonne P n'est pas la méthode la plus judicieuse ? j'en sais rien, car j'ai pas du tout cherché à approfondir cela ; de plus, ton fichier est une vraie usine à gaz, et il contient plein de feuilles vide inutiles ! "Feuil6" à "Feuil100" ! rien que ça, ça fait déjà 95 feuilles de trop ! les demandeurs sont censés fournir un fichier épuré, et dont la compilation ne bloque pas (sauf si l'erreur de compilation est l'objet-même de la demande, car le demandeur n'arrive pas à régler lui-même l'erreur de compilation en question).

oooooppppppppssssss ! finalement, la réponse à cette demande a été bien plus longue que prévu ! c'est pas comme ça que j'vais pouvoir rattraper mon retard sur d'autres exos Excel !​





même si c'est comme ça, c'est quand même mieux d'indiquer le n° du prochain article qui sera utilisé lors de la création d'un nouvel article ; donc c'est mieux de laisser tel que c'est ; maintenant, si tu préfères quand même voir 1 au lieu de 2, c'est ton droit ; mais dans ce cas, il faut que tu changes mon instruction en enlevant le + 1 qui est tout au bout à droite ; ce qui donne :​

VB:
TextBoxNuméroCréationArticlesMenus = Application.CountIf(Worksheets("BD articles menus").Columns(4), TextBoxNomCatégorieArticlesMenus)

mais cette modif sera valable pour tous les départements, et pour tous les articles ; je te laisse choisir ce que tu préfères, et adapter le code VBA en conséquence.​





il faut juste sélectionner les 2 colonnes visibles dont les colonnes masquées sont entre les 2 colonnes visibles, par exemple A:C ; puis faire un clic droit sur la sélection, et dans le menu contextuel, choisir l'item "Afficher" ➯ la colonne B qui était masquée entre A et C devient visible. :) si tu fais la même chose pour D:I, ça rend visible E:H ; si tu fais la même chose pour J: P, ça rend visible K:O ; tu aurais aussi pu faire ces 3 opérations d'un seul coup, en sélectionnant au préalable A: P : ça aurait affiché toutes les colonnes masquées qui sont entre (donc toutes les colonnes cachées de B à O).



je n'ai pas compris pourquoi tu as écrit que ça a changé ; j'ai toujours fait comme je t'ai indiqué plus haut.​





je t'en ai parlé dans ce post, plus haut.





c'est une très bonne question ! 👍 ça dépend de ce que tu veux faire ; au départ, j'avais mis cette formule :​

=SI(OU(C3="";D3="");"";NB.SI($D$3:D3;D3))

cela sans tenir compte du formulaire UserFormCréationArticlesMenus ; maintenant, il semble bien que la formule est inutile, car ce serait à la charge du code VBA de ce UserForm de mettre la bonne valeur du Numéro création articles menus, en colonne P, et pour chaque article nouvellement créé via le UserForm ; c'est donc la sub CommandButtonValiderCréationArticlesMenus_Click() qui devrait faire ça, puisque c'est elle qui est appelée quand tu cliques sur le bouton "Valider création articles menus".

pour info, moi j'aurais appelé le bouton cmdValid ; et la sub s'appellerait cmdValid_Click() ; c'est quand même bien plus court que tes noms à rallonge, pas vrai ? 😜 comme disait Coluche : « Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée » ; donc là, le temps de lire tes noms à rallonge, on a largement le temps d'oublier ce qu'on aurait voulu en faire ! 😄 (cela dit sans vouloir te vexer ! 😜)



pour la citation ci-dessous, je l'ai modifiée telle que j'ai compris ta phrase :



j'ai téléchargé ton fichier "MENUS SOAN", que j'ai renommé en "MENUS2" ; mais pour ce soir, c'est assez ➯ je ne l'ai pas encore ouvert, et la suite du feuilleton ne sera probablement pas avant demain soir. 😁 🤪 (ou peut-être bien plus tard encore si je manque de disponibilités !)

soan
Bonsoir SOAN,

Je t'ai envoyé un message ce matin mais il n'apparaît ici. Je ne sais pas si tu l'as eu. Je te disais que j'avais fait des modifications selon tes indications mais que j'avais soit toujours un message d'erreur de syntaxe soit que cela ne donnait pas le résultat escompté (il s'agit du numéro création articles menus). Donc essaie de trouver une solution pour que le numéro création articles menus puisse être créé dans l'userform avec ou sans recours à la BD articles menus (TabArticlesMenus). Si pour un département donné, il y a déjà trois articles créés, dans l'userform, le numéro création articles menus devra faire apparaître 4.
Ceci dit et redit, je vais refaire tout en modifiant les noms des colonnes, les noms définis, le nom des comboboxes, le nom de textboxes, etc. pour qu'ils soient aussi courts que possibles mais compréhensibles sinon pour tous tout au moins pour moi.
 

soan

XLDnaute Barbatruc
Bonsoir Christian,

Avant dans Excel, pour afficher des feuilles masquées, il fallait passer par Affichage ou bien faire selon ta méthode. Ta méthode n'a pas fonctionné chez moi.

je me demande bien pourquoi ! peut-être que tu n'as pas fait la bonne manip ? pour sélectionner par exemple uniquement la colonne B, fais comme ceci : sans cliquer, met ton curseur de souris juste à droite de la lettre B de la 2ème colonne ; normalement, tu dois voir que ton curseur souris est une petite flèche noire vers le bas ; ça signifie que si tu cliques maintenant sans bouger la souris, tu vas sélectionner cette colonne B ; alors maintenant fais-le, et normalement ça a dû marcher : ta colonne B doit être sélectionnée ; ensuite, appuie sur la touche Maj (qui est juste au-dessus de la touche Ctrl) et maintiens-la enfoncée ; puis clique sur l'en-tête de la colonne D (de la même façon que tu l'as fait pour la colonne B) ➯ les colonnes B à D doivent être sélectionnées ; tu peux relâcher la touche Maj ; ça, c'est un moyen rapide pour sélectionner plusieurs colonnes contigües ; remarque : si la 2ème colonne à sélectionner avait été très loin à droite, non visible car en dehors de l'écran, il aurait suffit, juste après avoir sélectionné la colonne B, d'utiliser la barre de défilement horizontale pour faire apparaître la 2ème colonne à sélectionner ; dernière étape : si tu fais un clic droit sur une des en-têtes de colonnes de la sélection, ou plus bas sur les cellules de la sélection, tu dois voir l'item "Afficher" dans le menu contextuel (dernier item de ce menu) ; autre moyen de faire cette dernière étape : appuie simplement sur la touche Menu contextuel (elle est à droite de la barre d'espace, entre la touche Windows et la touche Ctrl).

maintenant, si dans ton menu contextuel les items "Afficher" ou "Masquer" ne sont pas présents, c'est que ta configuration initiale d'Excel a été modifiée ! il faudrait alors remettre comme il faut le menu contextuel adéquat ; il me semble bien que c'est quelque chose de ce genre :​

VB:
Sub Essai()
  Application.CommandBars("Columns").Reset
End Sub

mais je n'ai pas testé, surtout que je n'ai aucune envie de modifier ma propre configuration d'Excel qui est actuellement correcte ! pour info, s'il avait fallu réinitialiser le menu contextuel des lignes, ça devrait être du même genre, avec "Rows" au lieu de "Columns" ; et pour réinitialiser le menu contextuel des cellules, avec :​

VB:
Sub Essai()
  Application.CommandBars("Cells").Reset
End Sub

par précaution, avant d'essayer tout ça, fait quand même une recherche sur le net pour voir si c'est bien ça ; ou peut-être que ça sera un peu différent ?

après tout c'que j'ai écrit ci-dessus, tu devrais pouvoir arriver à faire les mêmes manips que moi pour sélectionner plusieurs colonnes, puis pour afficher les colonnes masquées qui sont entre les colonnes visibles sélectionnées ; si oui : parfait ! 😊 sinon : j'ai rien d'autre à proposer ! 😭



dans le fichier joint, tu ne verras plus tes 95 feuilles vides "Feuil6" à "Feuil100" car je les ai toutes supprimées ➯ ça a drôlement allégé le fichier ! sa taille est passée de 181 Ko à 86 Ko ! puis comme j'ai modifié et ajouté du code VBA, la taille a un peu augmenté ensuite : c'est passé à 106 Ko ; conclusion : de 181 Ko à 106 Ko, ça fait tout de même 75 Ko de moins, soit une réduction de -41,44 % ! :)



sur la feuille "BD articles menus", toutes les colonnes sont déjà visibles ; pour les nombres de la colonne P, j'ai fait manuellement un copier / coller valeurs, ce qui a donc supprimé les formules tout en laissant les valeurs résultant de ces formules ; ainsi, désormais, ce sera mon nouveau code VBA du formulaire UserFormCréationArticlesMenus qui écrira les valeurs de la colonne P.

fais Ctrl e ➯ formulaire "Création articles menus" ; comme avant, quand tu choisis un item de la 1ère ComboBox, ça affiche un Numéro création articles menus, qui sera « le numéro à prendre » ; je n'ai pas envie de faire les tests, car j'ai pas envie de taper toutes les infos à remplir pour la saisie d'un article, alors je te laisse le soin d'essayer toi ! 😁 mais en principe, ça devrait être ok ! j'croise les doigts pour ça ! 🍀



code VBA du formulaire UserFormCréationArticlesMenus :

a) à partir de la ligne 68, y'a la sub ComboBoxCodeCatégorieArticlesMenus_Change()

voici la ligne 95 ; tu peux voir que tout au bout à droite, j'ai laissé le + 1

VB:
TextBoxNuméroCréationArticlesMenus = Application.CountIf(Worksheets("BD articles menus").Columns(4), TextBoxNomCatégorieArticlesMenus) + 1

b) à partir de la ligne 397, y'a la sub CommandButtonValiderCréationArticlesMenus_Click()

j'ai modifié la fin de cette sub ; maintenant, les lignes 450 à 470 sont celles-ci :

VB:
With Worksheets("BD articles menus").Cells(Ici + 2, "C")
  'Insérer les données dans la feuille BD articles menus dans la dernière ligne (nouvellement ajoutée), tableau TabArticlesMenus.

  .Value = ComboBoxCodeCatégorieArticlesMenus             'C : Code catégorie
  .Offset(, 1) = TextBoxNomCatégorieArticlesMenus         'D : Nom catégorie
  .Offset(, 2) = ComboBoxCodeDestinationArticlesMenus     'E : Code destination
  .Offset(, 3) = TextBoxNomDestinationArticlesMenus       'F : Nom destination
  .Offset(, 4) = ComboBoxCodeÀModifierArticlesMenus       'G : Code à modifier
  .Offset(, 5) = TextBoxNomÀModifierArticlesMenus         'H : Nom à modifier
  .Offset(, 6) = ComboBoxCodesArticlesMenus               'I : Code article
  .Offset(, 7) = TextBoxNomArticlesMenus                  'J : Nom article
  .Offset(, 8) = ComboBoxCodesJoursArticlesMenus          'K : Code jours
  .Offset(, 9) = TextBoxNomJoursArticlesMenus             'L : Nom jours
  .Offset(, 10) = ComboBoxCodesCAM                        'M : Code conditionnement
  .Offset(, 11) = TextBoxNomConditionnementArticlesMenus  'N : Nom conditionnement
  .Offset(, 12) = DTPickerDateCréationArticlesMenus       'O : Date création
  .Offset(, 13) = TextBoxNuméroCréationArticlesMenus      'P : N° création article
End With

TrierTabArticlesMenus
End Sub



à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • MENUS2.xlsm
    105 KB · Affichages: 10
Dernière édition:

soan

XLDnaute Barbatruc
@Christian

dans ton post #17, tu as écrit : « Je t'ai envoyé un message ce matin mais il n'apparaît ici. Je ne sais pas si tu l'as eu. » ; si, j'ai vu ce post ; c'est vers la fin du post #16 que tu as écrit : « J'ai fait des modifications en tenant compte de tes précédentes observations... ».


attention : n'oublie pas de lire mon très long post #18. :)

soan​
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
Bonsoir Christian,



je me demande bien pourquoi ! peut-être que tu n'as pas fait la bonne manip ? pour sélectionner par exemple uniquement la colonne B, fais comme ceci : sans cliquer, met ton curseur de souris juste à droite de la lettre B de la 2ème colonne ; normalement, tu dois voir que ton curseur souris est une petite flèche noire vers le bas ; ça signifie que si tu cliques maintenant sans bouger la souris, tu vas sélectionner cette colonne B ; alors maintenant fais-le, et normalement ça a dû marcher : ta colonne B doit être sélectionnée ; ensuite, appuie sur la touche Maj (qui est juste au-dessus de la touche Ctrl) et maintiens-la enfoncée ; puis clique sur l'en-tête de la colonne D (de la même façon que tu l'as fait pour la colonne B) ➯ les colonnes B à D doivent être sélectionnées ; tu peux relâcher la touche Maj ; ça, c'est un moyen rapide pour sélectionner plusieurs colonnes contigües ; remarque : si la 2ème colonne à sélectionner avait été très loin à droite, non visible car en dehors de l'écran, il aurait suffit, juste après avoir sélectionné la colonne B, d'utiliser la barre de défilement horizontale pour faire apparaître la 2ème colonne à sélectionner ; dernière étape : si tu fais un clic droit sur une des en-têtes de colonnes de la sélection, ou plus bas sur les cellules de la sélection, tu dois voir l'item "Afficher" dans le menu contextuel (dernier item de ce menu) ; autre moyen de faire cette dernière étape : appuie simplement sur la touche Menu contextuel (elle est à droite de la barre d'espace, entre la touche Windows et la touche Ctrl).

maintenant, si dans ton menu contextuel les items "Afficher" ou "Masquer" ne sont pas présents, c'est que ta configuration initiale d'Excel a été modifiée ! il faudrait alors remettre comme il faut le menu contextuel adéquat ; il me semble bien que c'est quelque chose de ce genre :​

VB:
Sub Essai()
  Application.CommandBars("Columns").Reset
End Sub

mais je n'ai pas testé, surtout que je n'ai aucune envie de modifier ma propre configuration d'Excel qui est actuellement correcte ! pour info, s'il avait fallu réinitialiser le menu contextuel des lignes, ça devrait être du même genre, avec "Rows" au lieu de "Columns" ; et pour réinitialiser le menu contextuel des cellules, avec :​

VB:
Sub Essai()
  Application.CommandBars("Cells").Reset
End Sub

par précaution, avant d'essayer tout ça, fait quand même une recherche sur le net pour voir si c'est bien ça ; ou peut-être que ça sera un peu différent ?

après tout c'que j'ai écrit ci-dessus, tu devrais pouvoir arriver à faire les mêmes manips que moi pour sélectionner plusieurs colonnes, puis pour afficher les colonnes masquées qui sont entre les colonnes visibles sélectionnées ; si oui : parfait ! 😊 sinon : j'ai rien d'autre à proposer ! 😭



dans le fichier joint, tu ne verras plus tes 95 feuilles vides "Feuil6" à "Feuil100" car je les ai toutes supprimées ➯ ça a drôlement allégé le fichier ! sa taille est passée de 181 Ko à 86 Ko ! puis comme j'ai modifié et ajouté du code VBA, la taille a un peu augmenté ensuite : c'est passé à 106 Ko ; conclusion : de 181 Ko à 106 Ko, ça fait tout de même 75 Ko de moins, soit une réduction de -41,44 % ! :)



sur la feuille "BD articles menus", toutes les colonnes sont déjà visibles ; pour les nombres de la colonne P, j'ai fait manuellement un copier / coller valeurs, ce qui a donc supprimé les formules tout en laissant les valeurs résultant de ces formules ; ainsi, désormais, ce sera mon nouveau code VBA du formulaire UserFormCréationArticlesMenus qui écrira les valeurs de la colonne P.

fais Ctrl e ➯ formulaire "Création articles menus" ; comme avant, quand tu choisis un item de la 1ère ComboBox, ça affiche un Numéro création articles menus, qui sera « le numéro à prendre » ; je n'ai pas envie de faire les tests, car j'ai pas envie de taper toutes les infos à remplir pour la saisie d'un article, alors je te laisse le soin d'essayer toi ! 😁 mais en principe, ça devrait être ok ! j'croise les doigts pour ça ! 🍀



code VBA du formulaire UserFormCréationArticlesMenus :

a) à partir de la ligne 68, y'a la sub ComboBoxCodeCatégorieArticlesMenus_Change()

voici la ligne 95 ; tu peux voir que tout au bout à droite, j'ai laissé le + 1

VB:
TextBoxNuméroCréationArticlesMenus = Application.CountIf(Worksheets("BD articles menus").Columns(4), TextBoxNomCatégorieArticlesMenus) + 1

b) à partir de la ligne 397, y'a la sub CommandButtonValiderCréationArticlesMenus_Click()

j'ai modifié la fin de cette sub ; maintenant, les lignes 450 à 470 sont celles-ci :

VB:
With Worksheets("BD articles menus").Cells(Ici + 2, "C")
  'Insérer les données dans la feuille BD articles menus dans la dernière ligne (nouvellement ajoutée), tableau TabArticlesMenus.

  .Value = ComboBoxCodeCatégorieArticlesMenus             'C : Code catégorie
  .Offset(, 1) = TextBoxNomCatégorieArticlesMenus         'D : Nom catégorie
  .Offset(, 2) = ComboBoxCodeDestinationArticlesMenus     'E : Code destination
  .Offset(, 3) = TextBoxNomDestinationArticlesMenus       'F : Nom destination
  .Offset(, 4) = ComboBoxCodeÀModifierArticlesMenus       'G : Code à modifier
  .Offset(, 5) = TextBoxNomÀModifierArticlesMenus         'H : Nom à modifier
  .Offset(, 6) = ComboBoxCodesArticlesMenus               'I : Code article
  .Offset(, 7) = TextBoxNomArticlesMenus                  'J : Nom article
  .Offset(, 8) = ComboBoxCodesJoursArticlesMenus          'K : Code jours
  .Offset(, 9) = TextBoxNomJoursArticlesMenus             'L : Nom jours
  .Offset(, 10) = ComboBoxCodesCAM                        'M : Code conditionnement
  .Offset(, 11) = TextBoxNomConditionnementArticlesMenus  'N : Nom conditionnement
  .Offset(, 12) = DTPickerDateCréationArticlesMenus       'O : Date création
  .Offset(, 13) = TextBoxNuméroCréationArticlesMenus      'P : N° création article
End With

TrierTabArticlesMenus
End Sub



à te lire pour avoir ton avis. ;)

soan
Bonsoir SOAN,

Tu me parles d'un fichier joint mais apparemment il n'y en as pas. Dois-je appliquer mon dernier message ou je garde tout tel que c'est dans le fichier que tu vas m'envoyer ?
 
Dernière édition:

soan

XLDnaute Barbatruc
@Christian

Tu me parles d'un fichier joint mais apparemment il n'y en as pas.

ooopppsss, tu as raison : j'ai oublié de joindre mon fichier ! :oops: erreur réparée : je viens de l'ajouter dans mon long post #18. :)



Dois-je appliquer mon dernier message ou je garde tout tel que c'est dans le fichier que tu vas m'envoyer ?

dans le nouveau fichier joint du post #18, je n'ai pas changé les noms à rallonge ; mais ce sera très bien si tu les change en des noms plus courts, qui seront toutefois suffisamment explicites.​

soan
 

BUDGETS

XLDnaute Impliqué
Bonsoir Christian,



je me demande bien pourquoi ! peut-être que tu n'as pas fait la bonne manip ? pour sélectionner par exemple uniquement la colonne B, fais comme ceci : sans cliquer, met ton curseur de souris juste à droite de la lettre B de la 2ème colonne ; normalement, tu dois voir que ton curseur souris est une petite flèche noire vers le bas ; ça signifie que si tu cliques maintenant sans bouger la souris, tu vas sélectionner cette colonne B ; alors maintenant fais-le, et normalement ça a dû marcher : ta colonne B doit être sélectionnée ; ensuite, appuie sur la touche Maj (qui est juste au-dessus de la touche Ctrl) et maintiens-la enfoncée ; puis clique sur l'en-tête de la colonne D (de la même façon que tu l'as fait pour la colonne B) ➯ les colonnes B à D doivent être sélectionnées ; tu peux relâcher la touche Maj ; ça, c'est un moyen rapide pour sélectionner plusieurs colonnes contigües ; remarque : si la 2ème colonne à sélectionner avait été très loin à droite, non visible car en dehors de l'écran, il aurait suffit, juste après avoir sélectionné la colonne B, d'utiliser la barre de défilement horizontale pour faire apparaître la 2ème colonne à sélectionner ; dernière étape : si tu fais un clic droit sur une des en-têtes de colonnes de la sélection, ou plus bas sur les cellules de la sélection, tu dois voir l'item "Afficher" dans le menu contextuel (dernier item de ce menu) ; autre moyen de faire cette dernière étape : appuie simplement sur la touche Menu contextuel (elle est à droite de la barre d'espace, entre la touche Windows et la touche Ctrl).

maintenant, si dans ton menu contextuel les items "Afficher" ou "Masquer" ne sont pas présents, c'est que ta configuration initiale d'Excel a été modifiée ! il faudrait alors remettre comme il faut le menu contextuel adéquat ; il me semble bien que c'est quelque chose de ce genre :​

VB:
Sub Essai()
  Application.CommandBars("Columns").Reset
End Sub

mais je n'ai pas testé, surtout que je n'ai aucune envie de modifier ma propre configuration d'Excel qui est actuellement correcte ! pour info, s'il avait fallu réinitialiser le menu contextuel des lignes, ça devrait être du même genre, avec "Rows" au lieu de "Columns" ; et pour réinitialiser le menu contextuel des cellules, avec :​

VB:
Sub Essai()
  Application.CommandBars("Cells").Reset
End Sub

par précaution, avant d'essayer tout ça, fait quand même une recherche sur le net pour voir si c'est bien ça ; ou peut-être que ça sera un peu différent ?

après tout c'que j'ai écrit ci-dessus, tu devrais pouvoir arriver à faire les mêmes manips que moi pour sélectionner plusieurs colonnes, puis pour afficher les colonnes masquées qui sont entre les colonnes visibles sélectionnées ; si oui : parfait ! 😊 sinon : j'ai rien d'autre à proposer ! 😭



dans le fichier joint, tu ne verras plus tes 95 feuilles vides "Feuil6" à "Feuil100" car je les ai toutes supprimées ➯ ça a drôlement allégé le fichier ! sa taille est passée de 181 Ko à 86 Ko ! puis comme j'ai modifié et ajouté du code VBA, la taille a un peu augmenté ensuite : c'est passé à 106 Ko ; conclusion : de 181 Ko à 106 Ko, ça fait tout de même 75 Ko de moins, soit une réduction de -41,44 % ! :)



sur la feuille "BD articles menus", toutes les colonnes sont déjà visibles ; pour les nombres de la colonne P, j'ai fait manuellement un copier / coller valeurs, ce qui a donc supprimé les formules tout en laissant les valeurs résultant de ces formules ; ainsi, désormais, ce sera mon nouveau code VBA du formulaire UserFormCréationArticlesMenus qui écrira les valeurs de la colonne P.

fais Ctrl e ➯ formulaire "Création articles menus" ; comme avant, quand tu choisis un item de la 1ère ComboBox, ça affiche un Numéro création articles menus, qui sera « le numéro à prendre » ; je n'ai pas envie de faire les tests, car j'ai pas envie de taper toutes les infos à remplir pour la saisie d'un article, alors je te laisse le soin d'essayer toi ! 😁 mais en principe, ça devrait être ok ! j'croise les doigts pour ça ! 🍀



code VBA du formulaire UserFormCréationArticlesMenus :

a) à partir de la ligne 68, y'a la sub ComboBoxCodeCatégorieArticlesMenus_Change()

voici la ligne 95 ; tu peux voir que tout au bout à droite, j'ai laissé le + 1

VB:
TextBoxNuméroCréationArticlesMenus = Application.CountIf(Worksheets("BD articles menus").Columns(4), TextBoxNomCatégorieArticlesMenus) + 1

b) à partir de la ligne 397, y'a la sub CommandButtonValiderCréationArticlesMenus_Click()

j'ai modifié la fin de cette sub ; maintenant, les lignes 450 à 470 sont celles-ci :

VB:
With Worksheets("BD articles menus").Cells(Ici + 2, "C")
  'Insérer les données dans la feuille BD articles menus dans la dernière ligne (nouvellement ajoutée), tableau TabArticlesMenus.

  .Value = ComboBoxCodeCatégorieArticlesMenus             'C : Code catégorie
  .Offset(, 1) = TextBoxNomCatégorieArticlesMenus         'D : Nom catégorie
  .Offset(, 2) = ComboBoxCodeDestinationArticlesMenus     'E : Code destination
  .Offset(, 3) = TextBoxNomDestinationArticlesMenus       'F : Nom destination
  .Offset(, 4) = ComboBoxCodeÀModifierArticlesMenus       'G : Code à modifier
  .Offset(, 5) = TextBoxNomÀModifierArticlesMenus         'H : Nom à modifier
  .Offset(, 6) = ComboBoxCodesArticlesMenus               'I : Code article
  .Offset(, 7) = TextBoxNomArticlesMenus                  'J : Nom article
  .Offset(, 8) = ComboBoxCodesJoursArticlesMenus          'K : Code jours
  .Offset(, 9) = TextBoxNomJoursArticlesMenus             'L : Nom jours
  .Offset(, 10) = ComboBoxCodesCAM                        'M : Code conditionnement
  .Offset(, 11) = TextBoxNomConditionnementArticlesMenus  'N : Nom conditionnement
  .Offset(, 12) = DTPickerDateCréationArticlesMenus       'O : Date création
  .Offset(, 13) = TextBoxNuméroCréationArticlesMenus      'P : N° création article
End With

TrierTabArticlesMenus
End Sub



à te lire pour avoir ton avis. ;)

soan
Merci. Je verrai tout cela demain.
Bonnes fin de soirée, nuit et continuation. Prends bien soin de toi. Cordialement.
 

BUDGETS

XLDnaute Impliqué
Bonsoir Christian,



je me demande bien pourquoi ! peut-être que tu n'as pas fait la bonne manip ? pour sélectionner par exemple uniquement la colonne B, fais comme ceci : sans cliquer, met ton curseur de souris juste à droite de la lettre B de la 2ème colonne ; normalement, tu dois voir que ton curseur souris est une petite flèche noire vers le bas ; ça signifie que si tu cliques maintenant sans bouger la souris, tu vas sélectionner cette colonne B ; alors maintenant fais-le, et normalement ça a dû marcher : ta colonne B doit être sélectionnée ; ensuite, appuie sur la touche Maj (qui est juste au-dessus de la touche Ctrl) et maintiens-la enfoncée ; puis clique sur l'en-tête de la colonne D (de la même façon que tu l'as fait pour la colonne B) ➯ les colonnes B à D doivent être sélectionnées ; tu peux relâcher la touche Maj ; ça, c'est un moyen rapide pour sélectionner plusieurs colonnes contigües ; remarque : si la 2ème colonne à sélectionner avait été très loin à droite, non visible car en dehors de l'écran, il aurait suffit, juste après avoir sélectionné la colonne B, d'utiliser la barre de défilement horizontale pour faire apparaître la 2ème colonne à sélectionner ; dernière étape : si tu fais un clic droit sur une des en-têtes de colonnes de la sélection, ou plus bas sur les cellules de la sélection, tu dois voir l'item "Afficher" dans le menu contextuel (dernier item de ce menu) ; autre moyen de faire cette dernière étape : appuie simplement sur la touche Menu contextuel (elle est à droite de la barre d'espace, entre la touche Windows et la touche Ctrl).

maintenant, si dans ton menu contextuel les items "Afficher" ou "Masquer" ne sont pas présents, c'est que ta configuration initiale d'Excel a été modifiée ! il faudrait alors remettre comme il faut le menu contextuel adéquat ; il me semble bien que c'est quelque chose de ce genre :​

VB:
Sub Essai()
  Application.CommandBars("Columns").Reset
End Sub

mais je n'ai pas testé, surtout que je n'ai aucune envie de modifier ma propre configuration d'Excel qui est actuellement correcte ! pour info, s'il avait fallu réinitialiser le menu contextuel des lignes, ça devrait être du même genre, avec "Rows" au lieu de "Columns" ; et pour réinitialiser le menu contextuel des cellules, avec :​

VB:
Sub Essai()
  Application.CommandBars("Cells").Reset
End Sub

par précaution, avant d'essayer tout ça, fait quand même une recherche sur le net pour voir si c'est bien ça ; ou peut-être que ça sera un peu différent ?

après tout c'que j'ai écrit ci-dessus, tu devrais pouvoir arriver à faire les mêmes manips que moi pour sélectionner plusieurs colonnes, puis pour afficher les colonnes masquées qui sont entre les colonnes visibles sélectionnées ; si oui : parfait ! 😊 sinon : j'ai rien d'autre à proposer ! 😭



dans le fichier joint, tu ne verras plus tes 95 feuilles vides "Feuil6" à "Feuil100" car je les ai toutes supprimées ➯ ça a drôlement allégé le fichier ! sa taille est passée de 181 Ko à 86 Ko ! puis comme j'ai modifié et ajouté du code VBA, la taille a un peu augmenté ensuite : c'est passé à 106 Ko ; conclusion : de 181 Ko à 106 Ko, ça fait tout de même 75 Ko de moins, soit une réduction de -41,44 % ! :)



sur la feuille "BD articles menus", toutes les colonnes sont déjà visibles ; pour les nombres de la colonne P, j'ai fait manuellement un copier / coller valeurs, ce qui a donc supprimé les formules tout en laissant les valeurs résultant de ces formules ; ainsi, désormais, ce sera mon nouveau code VBA du formulaire UserFormCréationArticlesMenus qui écrira les valeurs de la colonne P.

fais Ctrl e ➯ formulaire "Création articles menus" ; comme avant, quand tu choisis un item de la 1ère ComboBox, ça affiche un Numéro création articles menus, qui sera « le numéro à prendre » ; je n'ai pas envie de faire les tests, car j'ai pas envie de taper toutes les infos à remplir pour la saisie d'un article, alors je te laisse le soin d'essayer toi ! 😁 mais en principe, ça devrait être ok ! j'croise les doigts pour ça ! 🍀



code VBA du formulaire UserFormCréationArticlesMenus :

a) à partir de la ligne 68, y'a la sub ComboBoxCodeCatégorieArticlesMenus_Change()

voici la ligne 95 ; tu peux voir que tout au bout à droite, j'ai laissé le + 1

VB:
TextBoxNuméroCréationArticlesMenus = Application.CountIf(Worksheets("BD articles menus").Columns(4), TextBoxNomCatégorieArticlesMenus) + 1

b) à partir de la ligne 397, y'a la sub CommandButtonValiderCréationArticlesMenus_Click()

j'ai modifié la fin de cette sub ; maintenant, les lignes 450 à 470 sont celles-ci :

VB:
With Worksheets("BD articles menus").Cells(Ici + 2, "C")
  'Insérer les données dans la feuille BD articles menus dans la dernière ligne (nouvellement ajoutée), tableau TabArticlesMenus.

  .Value = ComboBoxCodeCatégorieArticlesMenus             'C : Code catégorie
  .Offset(, 1) = TextBoxNomCatégorieArticlesMenus         'D : Nom catégorie
  .Offset(, 2) = ComboBoxCodeDestinationArticlesMenus     'E : Code destination
  .Offset(, 3) = TextBoxNomDestinationArticlesMenus       'F : Nom destination
  .Offset(, 4) = ComboBoxCodeÀModifierArticlesMenus       'G : Code à modifier
  .Offset(, 5) = TextBoxNomÀModifierArticlesMenus         'H : Nom à modifier
  .Offset(, 6) = ComboBoxCodesArticlesMenus               'I : Code article
  .Offset(, 7) = TextBoxNomArticlesMenus                  'J : Nom article
  .Offset(, 8) = ComboBoxCodesJoursArticlesMenus          'K : Code jours
  .Offset(, 9) = TextBoxNomJoursArticlesMenus             'L : Nom jours
  .Offset(, 10) = ComboBoxCodesCAM                        'M : Code conditionnement
  .Offset(, 11) = TextBoxNomConditionnementArticlesMenus  'N : Nom conditionnement
  .Offset(, 12) = DTPickerDateCréationArticlesMenus       'O : Date création
  .Offset(, 13) = TextBoxNuméroCréationArticlesMenus      'P : N° création article
End With

TrierTabArticlesMenus
End Sub



à te lire pour avoir ton avis. ;)

soan
Merci. Je verrai tout cela demain.
Bonnes fin de soirée, nuit et continuation. Prends bien soin de toi. Cordialement.
 

soan

XLDnaute Barbatruc
Bonjour Christian,

à propos de la fin de la sub CommandButtonValiderCréationArticlesMenus_Click(), voici 2 petites précisions complémentaires : a) dans les commentaires, les lettres C à P sont bien sûr les lettres des colonnes de destination, et ça équivaut au .Value et aux différents .Offset() (dans les instructions VBA, ils sont tous à gauche du signe "=") ; j'ai mis ces lettres pour que ce soit plus facile pour toi de comprendre, car sinon, d'habitude, je ne les mets pas, pour cette raison : je sais que c'est pour toutes les colonnes, à partir de C puisqu'il y a : With ... .Cells(Ici + 2, "C") ; j'ai même mis "C" au lieu de 3 car c'est plus clair pour toi ; b) la ligne est : Ici + 2 ; pourquoi le + 2 ? car la 1ère ligne de données est la ligne 3 ; en effet, la ligne 1 est vide, et la ligne 2 est la ligne des en-têtes de colonnes ➯ la ligne n° 1 du tableau structuré correspond à la ligne 3 de la feuille de calcul ; pour les autres lignes du tableau structuré, c'est idem : il y a le même écart de 2 ; par exemple, la ligne n° 2 du tableau structuré correspond à la ligne 4 de la feuille de calcul ; et ainsi de suite... :)

soan
 

BUDGETS

XLDnaute Impliqué
@Christian



ooopppsss, tu as raison : j'ai oublié de joindre mon fichier ! :oops: erreur réparée : je viens de l'ajouter dans mon long post #18. :)





dans le nouveau fichier joint du post #18, je n'ai pas changé les noms à rallonge ; mais ce sera très bien si tu les change en des noms plus courts, qui seront toutefois suffisamment explicites.​

soan
Bonjour SOAN,

les noms à rallonge : les changer en plus courts :
- Dans la BD articles menus ?
- Dans l'UserFormCréationArticlesMenus : le nom des UserForm, les comboboxes, les textboxes (ce qui impliquera de modifier également les codes des différentes procédures) ?
- dans la feuille Liste choix : nom des colonnes, les noms définis ? D'ailleurs en ce qui concerne les noms définis, pour les programme par formulaires, j'ai l'impression qu'ils ne sont pas utilisés, donc inutiles.
Le ComboBoxCodeCatégorieArticlesMenus pourrait devenir CBOCCAM (cbo : tout en minuscules, tout en majuscules ou un mélange des deux ?). Si on garde les noms définis de la feuille Liste choix, le nom défini pourrait-il avoir le même nom qu'un cbo, qu'un txt sans les préfixes (CCAM, NCAM)?
Si tu as d'autres observations à faire sur les noms que je ne mentionne pas, merci de me les signaler.
Pour les colonnes masquées, en effet, je ne faisais pas les bonnes manip. J'ai suivi tes instructions que j'ai imprimées et cela fonctionne. Merci. Pour le reste, je vais voir cela cette après-midi.
 
Dernière édition:

soan

XLDnaute Barbatruc
@Christian

d'abord, pour le nom du UserForm lui-même : au lieu de UserFormCréationArticlesMenus tu peux l'appeler plus simplement : ArticlesMenus ; puis au lieu de :​

VB:
Sub CréerArticlesMenus()
  'Afficher le formulaire UserFormCréationArticlesMenus
  UserFormCréationArticlesMenus.Show
End Sub

je propose :

VB:
Sub ShowArticlesMenus()
  ArticlesMenus.Show
End Sub



exemple pour la 1ère ComboBox du UserForm : au lieu de ComboBoxCodeCatégorieArticlesMenus tu peux l'appeler plus simplement : CodeCatégorie ; mais ensuite, dans tout le code VBA du UserForm tu dois faire un remplacement de chaque occurrence de ComboBoxCodeCatégorieArticlesMenus par CodeCatégorie ; utilise pour cela Ctrl h ➯ fenêtre "Remplacer" ; attention : pour ce type de remplacement, vérifie qu'en dessous l'option ⦿ Module en cours est sélectionnée, puis clique sur le bouton "Remplacer tout" ; de plus, avec tes noms à rallonge, il n'y a en principe pas de risques de faire un remplacement inadéquat ; mais si tu faisais la même chose pour des noms courts, ce serait plus prudent de cocher la case ☑ Mot entier car ça éviterait un éventuel remplacement d'une partie de mot qui contient le nom à remplacer ; tu pourrais même utiliser aussi la case ☑ Respecter la casse mais à condition bien sûr d'avoir saisi le nom à remplacer avec les lettres majuscules et minuscules correctes ; si tu as fait tout ça comme il faut, la compilation devrait aboutir sans bloquer. :)

quand tu auras réussi à faire correctement ce 1er changement de nom, tu pourras faire pareil pour les autres noms à rallonge des autres contrôles du même UserForm : c'est exactement la même méthode ; ce n'est pas compliqué à faire, mais par contre, c'est un travail fastidieux plutôt embêtant ! c'est pourquoi ça aurait été bien mieux de mettre des noms courts dès le début : ça t'aurais évité de faire tout ce job !


bonne chance pour la suite de ce projet ! 🍀 je te laisse : je vais continuer sur d'autres exos Excel. :)

soan
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
@Christian

d'abord, pour le nom du UserForm lui-même : au lieu de UserFormCréationArticlesMenus tu peux l'appeler plus simplement : ArticlesMenus ; puis au lieu de :​

VB:
Sub CréerArticlesMenus()
  'Afficher le formulaire UserFormCréationArticlesMenus
  UserFormCréationArticlesMenus.Show
End Sub

je propose :

VB:
Sub ShowArticlesMenus()
  ArticlesMenus.Show
End Sub



exemple pour la 1ère ComboBox du UserForm : au lieu de ComboBoxCodeCatégorieArticlesMenus tu peux l'appeler plus simplement : CodeCatégorie ; mais ensuite, dans tout le code VBA du UserForm tu dois faire un remplacement de chaque occurrence de ComboBoxCodeCatégorieArticlesMenus par CodeCatégorie ; utilise pour cela Ctrl h ➯ fenêtre "Remplacer" ; attention : pour ce type de remplacement, vérifie qu'en dessous l'option ⦿ Module en cours est sélectionnée, puis clique sur le bouton "Remplacer tout" ; de plus, avec tes noms à rallonge, il n'y a en principe pas de risques de faire un remplacement inadéquat ; mais si tu faisais la même chose pour des noms courts, ce serait plus prudent de cocher la case ☑ Mot entier car ça éviterait un éventuel remplacement d'une partie de mot qui contient le nom à remplacer ; tu pourrais même utiliser aussi la case ☑ Respecter la casse mais à condition bien sûr d'avoir saisi le nom à remplacer avec les lettres majuscules et minuscules correctes ; si tu as fait tout ça comme il faut, la compilation devrait aboutir sans bloquer. :)

quand tu auras réussi à faire correctement ce 1er changement de nom, tu pourras faire pareil pour les autres noms à rallonge des autres contrôles du même UserForm : c'est exactement la même méthode ; ce n'est pas compliqué à faire, mais par contre, c'est un travail fastidieux plutôt embêtant ! c'est pourquoi ça aurait été bien mieux de mettre des noms courts dès le début : ça t'aurais évité de faire tout ce job !


bonne chance pour la suite de ce projet ! 🍀 je te laisse : je vais continuer sur d'autres exos Excel. :)

soan
Dois-je utiliser cbo ou combobox ou mettre simplement CodeCatégorie ?
 

soan

XLDnaute Barbatruc
@Christian

Et pour les feuilles Liste choix et BD articles menus ?

effectivement, tu peux aussi choisir des noms plus courts pour tes tableaux structurés ; par exemple, pour le tableau structuré de la feuille "BD articles menus", au lieu de TabArticlesMenus tu peux mettre TArticlesMenus, ou même TArtMenus ; pour le 1er nom proposé, j'ai laissé le T pour éviter une ambiguïté possible si le nom ArticlesMenus existe déjà ailleurs dans le classeur ; s'il s'était agit d'une simple liste utilisée comme source d'une liste déroulante, j'aurais mis LArticlesMenu ; donc avec T pour un Tableau ou avec L pour une Liste ; pour le 2ème nom proposé, tant qu'à faire, j'ai aussi mis un T, même s'il y a moins de risques de rencontrer une ambiguïté de noms ; à toi de faire pareil pour tes autres tableaux structurés de la feuille "Liste choix" ; or justement, comme c'est plus des listes que des tableaux, je propose pour ta 1ère liste, au lieu de TabCAM : LCAM.​

soan
 

Discussions similaires

Statistiques des forums

Discussions
291 501
Messages
1 915 830
Membres
178 990
dernier inscrit
shadowtheone
Haut Bas