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.
 

soan

XLDnaute Barbatruc
@Christian

FX est la variable publique que j'ai déclarée dans M01_ShowUserForm :

Public FX As Worksheet, CodCtg$, NomCtg$, CodArt$, NomArt$

FX est donc un objet de type Feuille de Calcul.



Dim i% : idem que Dim i As Integer

i est donc une variable de type Entier sur 16 bits (= 2 octets).



Dim chn$ : idem que Dim chn As String

chn est donc une variable de type chaîne de caractères.



Application.ScreenUpdating = 0 : idem que Application.ScreenUpdating =False

désactivation de la mise à jour de l'écran (pendant l'exécution de la macro) ; c'est remis automatiquement à True (Vrai) juste avant la sortie de la sub, de façon implicite.​



tu peux mettre un commentaire sur une ligne isolée, ou en fin de ligne ; seule exception : si une ligne se termine par le caractère souligné « _ » qui est un caractère de continuation de ligne, alors tu ne peux pas mettre de commentaire à droite du souligné !


Shapes signifie « formes » ; sur la feuille "Accueil", les 5 boutons du menu sont des formes, mais c'est seulement le 5ème bouton du bas que je modifie par VBA pour en changer le texte ; en effet, c'est soit "Masquer feuilles", soit "Afficher feuilles" ; comme chn = "Affich" ou "Masqu", le "er" complète l'infinitif du verbe pour donner : "Afficher" ou "Masquer".


bonne fin de soirée à toi aussi. :)

soan
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
@Christian

FX est la variable publique que j'ai déclarée dans M01_ShowUserForm :

Public FX As Worksheet, CodCtg$, NomCtg$, CodArt$, NomArt$

FX est donc un objet de type Feuille de Calcul.



Dim i% : idem que Dim i As Integer

i est donc une variable de type Entier sur 16 bits (= 2 octets).



Dim chn$ : idem que Dim chn As String

chn est donc une variable de type chaîne de caractères.



Application.ScreenUpdating = 0 : idem que Application.ScreenUpdating =False

désactivation de la mise à jour de l'écran (pendant l'exécution de la macro) ; c'est remis automatiquement à True (Vrai) juste avant la sortie de la sub, de façon implicite.​



tu peux mettre un commentaire sur une ligne isolée, ou en fin de ligne ; seule exception : si une ligne se termine par le caractère souligné « _ » qui est un caractère de continuation de ligne, alors tu ne peux pas mettre de commentaire à droite du souligné !


Shapes signifie « forme » ; sur la feuille "Accueil", les 5 boutons du menu sont des formes, mais c'est seulement le 5ème bouton du bas que je modifie par VBA pour en changer le texte ; en effet, c'est soit "Masquer feuilles", soit "Afficher feuilles" ; comme chn = "Affich" ou "Masqu", le "er" complète l'infinitif du verbe pour donner : "Afficher" ou "Masquer".


bonne fin de soirée à toi aussi. :)
Bonjour SOAN,

Pour les commentaires, je n'ai pas dû m'exprimer correctement. L'instruction afficher : commentaire : masquer; l'instruction Masquer : commentaire : Afficher: Pour afficher, donc, le commentaire ne devrait-il pas être Afficher ?
Merci pour tes explications qui sont très claires.
UserForm UF01_CtgCat :
1) Il y a du fond blanc et du fond bleu : que cela signifie-t-il ?
2) J'avoue que j'ai eu du mal à comprendre mais j'y suis arrivé : pourquoi des chiffres pour les intitulés ? Les intitulés qui vont recevoir la réponse ont la même identité que l'intitulé qui indique de quoi il s'agit.
3) Pour les intitulés 2, quel (s) avantage(s) de choisir un intitulé plutôt qu'un textbox ou un combo box ? À priori, cela fonctionne mais j'y reviendrai ultérieurement au moyen de l'explication de texte du code de l'UF01_CtgCat.

UserForm UF02_ArtMenu :
Mêmes questions qui apporteront certainement les mêmes réponses de ta part que pour UF01_CtgCat. Dans l'affirmative, inutile de répondre; dans la négative, merci de m'apporter tes lumières étincelantes.

Demain, je te consulterai pour le code de l'UF01_CtgCat. Dans l'hypothèse où le code de l'UF02_ArtMenu répondrait aux mêmes critères que le code de l'UF01_CtgCat (mis à part le changement éventuel du nom des outils), dis-moi le, cela m'évitera de te déranger inutilement pour des questions similaires aux réponses identiques.
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
@Christian

FX est la variable publique que j'ai déclarée dans M01_ShowUserForm :

Public FX As Worksheet, CodCtg$, NomCtg$, CodArt$, NomArt$

FX est donc un objet de type Feuille de Calcul.



Dim i% : idem que Dim i As Integer

i est donc une variable de type Entier sur 16 bits (= 2 octets).



Dim chn$ : idem que Dim chn As String

chn est donc une variable de type chaîne de caractères.



Application.ScreenUpdating = 0 : idem que Application.ScreenUpdating =False

désactivation de la mise à jour de l'écran (pendant l'exécution de la macro) ; c'est remis automatiquement à True (Vrai) juste avant la sortie de la sub, de façon implicite.​



tu peux mettre un commentaire sur une ligne isolée, ou en fin de ligne ; seule exception : si une ligne se termine par le caractère souligné « _ » qui est un caractère de continuation de ligne, alors tu ne peux pas mettre de commentaire à droite du souligné !


Shapes signifie « forme » ; sur la feuille "Accueil", les 5 boutons du menu sont des formes, mais c'est seulement le 5ème bouton du bas que je modifie par VBA pour en changer le texte ; en effet, c'est soit "Masquer feuilles", soit "Afficher feuilles" ; comme chn = "Affich" ou "Masqu", le "er" complète l'infinitif du verbe pour donner : "Afficher" ou "Masquer".


bonne fin de soirée à toi aussi. :)

soan
 

soan

XLDnaute Barbatruc
Bonjour Christian,

sur la feuille "Accueil" :

pour le texte du 5ème bouton, c'est correct tel que c'est déjà : ne rien changer !

* quand les feuilles sont affichées : ça propose de les masquer

* clique sur le bouton "Masquer feuilles" ➯ ça masque les feuilles (sauf la 1ère)

* quand les feuilles (sauf "Accueil") sont masquées, ça propose de les afficher

* clic / bouton "Afficher feuilles" ➯ ça affiche les feuilles qui étaient cachées​



bien sûr, j'ai écrit le code VBA pour faire tout ça :

* sur la ligne de l'appel de la sub HideFX() pour masquer toutes les feuilles (sauf Accueil), c'est bien le texte "Afficher feuilles" qui devra être le texte du bouton ➯ chn = "Affich"

* sur la ligne de l'appel de la sub ShowFX() pour afficher toutes les feuilles, c'est bien le texte "Masquer feuilles" qui devra être le texte du bouton ➯ chn = "Masqu"​

rappel : ensuite, ce texte est complété par "er feuilles"
➯ "Masquer feuilles" ou "Afficher feuilles"

soan
 

BUDGETS

XLDnaute Impliqué
Bonjour Christian,

sur la feuille "Accueil" :

pour le texte du 5ème bouton, c'est correct tel que c'est déjà : ne rien changer !

* quand les feuilles sont affichées : ça propose de les masquer

* clique sur le bouton "Masquer feuilles" ➯ ça masque les feuilles (sauf la 1ère)

* quand les feuilles (sauf "Accueil") sont masquées, ça propose de les afficher

* clic / bouton "Afficher feuilles" ➯ ça affiche les feuilles qui étaient cachées​



bien sûr, j'ai écrit le code VBA pour faire tout ça :

* sur la ligne de l'appel de la sub HideFX() pour masquer toutes les feuilles (sauf Accueil), c'est bien le texte "Afficher feuilles" qui devra être le texte du bouton ➯ chn = "Affich"

* sur la ligne de l'appel de la sub ShowFX() pour afficher toutes les feuilles, c'est bien le texte "Masquer feuilles" qui devra être le texte du bouton ➯ chn = "Masqu"​

rappel : ensuite, ce texte est complété par "er feuilles"
➯ "Masquer feuilles" ou "Afficher feuilles"

soan
If FL02_BDA.Visible Then
chn = "Affich": HideFX 'masque toutes les feuilles (sauf Accueil)
Else
chn = "Masqu": ShowFX 'affiche toutes les feuilles

ce que je veux dire 'masque toutes les feuilles (sauf accueil) alors que le chn = "Affich" : tu confirmes donc que c'est bien masque qui doit être présent et non afficher ?
pareil pour 'affiche toutes les feuilles alors que chn = Masq" : tu confirmes donc que c'est bien affiche qui doit être présent et non masquer ?
J'avoue que je suis un peu dérouté.
 

BUDGETS

XLDnaute Impliqué
Bonjour SOAN,

Pour les commentaires, je n'ai pas dû m'exprimer correctement. L'instruction afficher : commentaire : masquer; l'instruction Masquer : commentaire : Afficher: Pour afficher, donc, le commentaire ne devrait-il pas être Afficher ?
Merci pour tes explications qui sont très claires.
UserForm UF01_CtgCat :
1) Il y a du fond blanc et du fond bleu : que cela signifie-t-il ?
2) J'avoue que j'ai eu du mal à comprendre mais j'y suis arrivé : pourquoi des chiffres pour les intitulés ? Les intitulés qui vont recevoir la réponse ont la même identité que l'intitulé qui indique de quoi il s'agit.
3) Pour les intitulés 2, quel (s) avantage(s) de choisir un intitulé plutôt qu'un textbox ou un combo box ? À priori, cela fonctionne mais j'y reviendrai ultérieurement au moyen de l'explication de texte du code de l'UF01_CtgCat.

UserForm UF02_ArtMenu :
Mêmes questions qui apporteront certainement les mêmes réponses de ta part que pour UF01_CtgCat. Dans l'affirmative, inutile de répondre; dans la négative, merci de m'apporter tes lumières étincelantes.

Demain, je te consulterai pour le code de l'UF01_CtgCat. Dans l'hypothèse où le code de l'UF02_ArtMenu répondrait aux mêmes critères que le code de l'UF01_CtgCat (mis à part le changement éventuel du nom des outils), dis-moi le, cela m'évitera de te déranger inutilement pour des questions similaires aux réponses identiques.
J'ai modifié mon avant dernier message alors que je recevais le tien. L'as-tu reçu avec sa modification ? Je ne peux pas te donner son numéro car le numéro n'apparaît pas. J'ai beaucoup de mal pour modifier les messages. Avant, c'était beaucoup plus simple.
Sur mon ordinateur de chambre, pas de problème en ce qui concerne l'affichage des feuilles LT; par contre, sur celui de la salle à manger, impossible voir la totalité des colonnes en une seule fois. Mon écran est plus petit.
 
Dernière édition:

soan

XLDnaute Barbatruc
dans UF01_CtgArt, sub cbCodCtg_Change() :

cbCodArt.List = Range(s1 & s2).Value

attention :

* pour les 2 premiers items de cbCodCtg (indices 0 et 1), je ne remplis pas la 2ème ComboBox : à la place, je mets simplement : cbCodArt = "POM" et lbNomArt2 = "Pomme" ; c'est cela qui évite de faire une liste d'un seul item avec "Pomme" ; bien sûr, on quitte la sub aussitôt après.

* pour les autres items, à partir du 3ème (indices 2 et suivants) : exemple pour n = 2 :

s1 = T(n - 2) ➯ s1 = T(2 - 2) ➯ s1 = T(0) ➯ s1 = "LDW" : on a le nom de la liste des desserts du weekend.

s2 = "[" & s1 & "] : dans un 1er temps, s2 est ce même nom entre crochets : "[LDW]" ; dans un 2ème temps, je remplace l'initiale L par C : Mid$(s2, 2, 1) = "C" ➯ s2 = "[CDW]" ; c'est donc ce qu'il y a en D1 (de la feuille "LT01").

s1 & s2 : "LDW[CDW]" : tableau structuré de nom LDW, colonne CDW ; c'est ok : on a ce qu'il faut pour remplir la 2ème ComboBox cbCodArt.​

soan
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
@Christian



je comprends cela : c'est car ça a l'air d'être inversé, mais ce n'est pas le cas ; donc je confirme que c'est bien comme ça ! :) d'ailleurs, fais l'essai d'inverser les 2 textes de chn, et tu verras qu'à l'exécution ça ne sera plus correct : ça proposera d'Afficher les feuilles quand elles sont toutes déjà affichées ; et inversement, ça proposera de Masquer les feuilles quand toutes les feuilles (sauf Accueil) sont déjà masquées.​



À propos de la couleur de fond (BackColor) de certains contrôles des formulaires : avec de la couleur, les 2 UserForms ont une apparence plus esthétique ; de plus, j'ai choisi les couleurs comme indiqué ci-dessous.​

UserForm UF01_CtgArt :

j'ai choisi du bleu clair pour les infos de Nom catégorie et Nom article qui s'affichent automatiquement à droite, suite au choix d'un item à gauche dans les 2 listes déroulantes de Code catégorie et Code article.​

UserForm UF02_ArtMenu :

* brun clair pour le N° de création.

* bleu clair pour les 4 infos qui sont reprises du formulaire précédent UF01_CtgArt :
Code catégorie ; Nom catégorie ; Code article ; Nom article.

* vert clair pour les infos de Nom jour et Nom du conditionnement qui s'affichent automatiquement à droite, suite au choix d'un item à gauche dans les 2 listes déroulantes de Code jour et Code CAM.

j'aurais voulu mettre du brun clair pour la Date de création, mais je n'y suis pas arrivé car c'est un contrôle spécial de type DTPicker ; si tu sais comment faire, alors fais-le toi. :) (et dis-moi comment tu as fait !)



pour les intitulés : ils commencent par cb pour un ComboBox ; par lb pour un Label (= une étiquette) ; s'il y avait eu un TextBox, j'aurais mis tb devant le nom de l'intitulé ; note que pour une info qui ne doit pas être modifiée par l'utilisateur, j'ai choisi un Label au lieu d'un TextBox, justement ; et les chiffres sont là pour distinguer 2 labels dont le nom (sauf le chiffre) est le même ; exemple concret : sur le UserForm UF01_CtgArt, il y a lbNomCtg1 pour le texte "Nom catégorie :" et lbNomCtg2 pour la case en bleu clair, qui est un 2ème label et pas un TextBox, ni un ComboBox.​



ah ben voilà : tu as trouvé ! 👍 :) et pour ton point 3) la réponse est ci-dessus.





exact, et tout est déjà dans mes réponses de ce post.





c'est dans le même genre : pour chaque contrôle, il faut choisir le type approprié : Label, TextBox, ou ComboBox ; puis il faut utiliser la sub UserForm_Initialize() pour remplir les ComboBox dès l'ouverture du formulaire ; mais des fois, ce n'est pas possible car ça dépend du choix de l'item dans une liste déroulante (quand une ComboBox dépend d'une autre ComboBox) ; dans ce 2ème cas, le remplissage de la 2ème ComboBox doit être fait par l'événement _Change() de la 1ère ComboBox : c'est la sub ComboBox1_Change() ; exemple concret : pour UF01_CtgArt, c'est la sub cbCodCtg_Change() qui remplit la liste déroulant du Code article :

cbCodArt.List = Range(s1 & s2).Value

attention :

* pour les 2 premiers items de cbCodCtg (indices 0 et 1), je ne remplis pas la 2ème ComboBox : à la place, je mets simplement : cbCodArt = "POM" et lbNomArt2 = "Pomme" ; c'est cela qui évite de faire une liste d'un seul item avec "Pomme" ; bien sûr, on quitte la sub aussitôt après.

* pour les autres items, à partir du 3ème (indices 2 et suivants) : exemple pour n = 2 :

s1 = T([B]n[/B] - 2) ➯ s1 = T(2 - 2) ➯ s1 = T(0) ➯ s1 = "LDW" : on a le nom de la liste des desserts du weekend.

s2 = "[" & s1 & "] : dans un 1er temps, s2 est ce même nom entre crochets : "[LDW]" ; dans un 2ème temps, je remplace l'initiale L par C : Mid$(s2, 2, 1) = "C" ➯ s2 = "[CDW]" ; c'est donc ce qu'il y a en D1 (de la feuille "LT01").

s1 & s2 : "LDW[CDW]" : tableau structuré de nom LDW, colonne CDW ; c'est ok : on a ce qu'il faut pour remplir la 2ème ComboBox cbCodArt.​

soan
Merci pour ces précieux renseignements. Pour le BackColor, impossible d'avoir le nom de la couleur, donc très difficile de savoir quelle case correspond au brun foncé. De plus, par système, cela ne donne rien.
 

BUDGETS

XLDnaute Impliqué
Merci pour ces précieux renseignements. Pour le BackColor, impossible d'avoir le nom de la couleur, donc très difficile de savoir quelle case correspond au brun foncé. De plus, par système, cela ne donne rien.
Mes questions sur l'UF01_CtgArt. J'ai écrit avec mon langage à moi, ce n'est pas conforme au langage informatique, bureautique, d'Excel. Demain, si j'ai reçu ta réponse pour ce formulaire, je te poserais mes questions concernant l'UserForm UF02_Artmenu de la même manière. Je sais que je suis casse pieds mais mon niveau de programmeur ne me permet pas de comprendre tout, d'où l'obligation de demander des précisions car j'ai horreur d'exécuter un programme sans savoir ce qu'il fait exactement, où, quand, comment, etc.

Option Explicit

Private Sub cbCodCtg_Change()
'Que représentent T, s1, s2, n%, n;$ pour chaîne de caractères;% je ne sais pas. Le dim est pour la ligne complète ou seulement une partie de la ligne ? et que signifie la ligne
'entière ?
Dim T, s1$, s2$, n%: n = cbCodCtg.ListIndex: cbCodArt.Clear
'si n=-1 alors l'intitulé NomCtg2 sera vidé ou se videra, l'intitulé NomArt2 sera vidé ou se videra et on quittera la procédure si les deux conditions sont réunies.
If n = -1 Then lbNomCtg2 = "": lbNomArt2 = "": Exit Sub
'IntituléNomCtg2 va aller dans le tableau LCtg, colonne NC, item (Renvoie le membre indexé d'une collection) n (première colonne du tableau LCtg) +1 (se déplace une colonne
'après N : la première colonne vaut 0, la colonne suivante vaut +1);le reste de la ligne, pas compris
lbNomCtg2 = Range("LCtg[NC]").Item(n + 1): cbCodArt = "": lbNomArt2 = ""
'si n inférieur à 2 alors la zone de liste modifiable (cbCodArt) se remplira du nom écrit dans les deux guillemets (ici POM), l'intitulé NomArt2 se remplira du mot Pomme puis on
'quittera la procédure.
If n < 2 Then cbCodArt = "POM": lbNomArt2 = "Pomme": Exit Sub
'LDW et la suite représente soit le nom du tableau soit le nom défini
T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _
"LLWD", "LVMR", "LVMW", "LVS")
'Ne sachant pas ce que représentes les différentes lettres, je n'ai rien compris aux deux instructions suivantes
s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "C"
cbCodArt.List = Range(s1 & s2).Value
End Sub
'À quelle touche correspond la KeyAscii 27 ? Si on appuie sur cette touche, on ferme et on quitte le formulaire.
Private Sub cbCodCtg_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
'Mêmes questions et certainement mêmes réponses que pour cbCodCtg_Change
Private Sub cbCodArt_Change()
Dim T, s1$, s2$, n%
n = cbCodCtg.ListIndex: If n = -1 Then lbNomArt2 = "": Exit Sub
If n < 2 Then Exit Sub
T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _
"LLWD", "LVMR", "LVMW", "LVS")
s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "N"
n = cbCodArt.ListIndex: If n = -1 Then lbNomArt2 = "": Exit Sub
lbNomArt2 = Range(s1 & s2).Item(n + 1)
End Sub

Private Sub cmdGo_Click()
' si l'intitulé lbNomCtg2 est vide alors la zone de liste modifiable cbCodCtg prendra le focus et on quittera la procédure
If lbNomCtg2 = "" Then cbCodCtg.SetFocus: Exit Sub
' voir commentaire précédent en changeant le nom des outils en conséquence.
If lbNomArt2 = "" Then cbCodArt.SetFocus: Exit Sub
'CodCtg égale la zone de liste modifiable cbCodCtg et le NomCtg égale l'intitulé NomCtg2
CodCtg = cbCodCtg: NomCtg = lbNomCtg2
'Voir commentaire précédent en changeant le nom des outils en conséquence.
CodArt = cbCodArt: NomArt = lbNomArt2
'On demande au programme d'afficher l'UserForm UF02_ArtMenu
Unload Me: UF02_ArtMenu.Show
End Sub


Private Sub UserForm_Initialize()
'Va permettre de remplir la zone de liste modifiable cbCodCtg avec la liste du tableauLCTG, colonne CC
cbCodCtg.List = Range("LCTG[CC]").Value
End Sub
 

Etoto

XLDnaute Accro
Mes questions sur l'UF01_CtgArt. J'ai écrit avec mon langage à moi, ce n'est pas conforme au langage informatique, bureautique, d'Excel. Demain, si j'ai reçu ta réponse pour ce formulaire, je te poserais mes questions concernant l'UserForm UF02_Artmenu de la même manière. Je sais que je suis casse pieds mais mon niveau de programmeur ne me permet pas de comprendre tout, d'où l'obligation de demander des précisions car j'ai horreur d'exécuter un programme sans savoir ce qu'il fait exactement, où, quand, comment, etc.

Option Explicit

Private Sub cbCodCtg_Change()
'Que représentent T, s1, s2, n%, n;$ pour chaîne de caractères;% je ne sais pas. Le dim est pour la ligne complète ou seulement une partie de la ligne ? et que signifie la ligne
'entière ?
Dim T, s1$, s2$, n%: n = cbCodCtg.ListIndex: cbCodArt.Clear
'si n=-1 alors l'intitulé NomCtg2 sera vidé ou se videra, l'intitulé NomArt2 sera vidé ou se videra et on quittera la procédure si les deux conditions sont réunies.
If n = -1 Then lbNomCtg2 = "": lbNomArt2 = "": Exit Sub
'IntituléNomCtg2 va aller dans le tableau LCtg, colonne NC, item (Renvoie le membre indexé d'une collection) n (première colonne du tableau LCtg) +1 (se déplace une colonne
'après N : la première colonne vaut 0, la colonne suivante vaut +1);le reste de la ligne, pas compris
lbNomCtg2 = Range("LCtg[NC]").Item(n + 1): cbCodArt = "": lbNomArt2 = ""
'si n inférieur à 2 alors la zone de liste modifiable (cbCodArt) se remplira du nom écrit dans les deux guillemets (ici POM), l'intitulé NomArt2 se remplira du mot Pomme puis on
'quittera la procédure.
If n < 2 Then cbCodArt = "POM": lbNomArt2 = "Pomme": Exit Sub
'LDW et la suite représente soit le nom du tableau soit le nom défini
T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _
"LLWD", "LVMR", "LVMW", "LVS")
'Ne sachant pas ce que représentes les différentes lettres, je n'ai rien compris aux deux instructions suivantes
s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "C"
cbCodArt.List = Range(s1 & s2).Value
End Sub
'À quelle touche correspond la KeyAscii 27 ? Si on appuie sur cette touche, on ferme et on quitte le formulaire.
Private Sub cbCodCtg_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload Me
End Sub
'Mêmes questions et certainement mêmes réponses que pour cbCodCtg_Change
Private Sub cbCodArt_Change()
Dim T, s1$, s2$, n%
n = cbCodCtg.ListIndex: If n = -1 Then lbNomArt2 = "": Exit Sub
If n < 2 Then Exit Sub
T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _
"LLWD", "LVMR", "LVMW", "LVS")
s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "N"
n = cbCodArt.ListIndex: If n = -1 Then lbNomArt2 = "": Exit Sub
lbNomArt2 = Range(s1 & s2).Item(n + 1)
End Sub

Private Sub cmdGo_Click()
' si l'intitulé lbNomCtg2 est vide alors la zone de liste modifiable cbCodCtg prendra le focus et on quittera la procédure
If lbNomCtg2 = "" Then cbCodCtg.SetFocus: Exit Sub
' voir commentaire précédent en changeant le nom des outils en conséquence.
If lbNomArt2 = "" Then cbCodArt.SetFocus: Exit Sub
'CodCtg égale la zone de liste modifiable cbCodCtg et le NomCtg égale l'intitulé NomCtg2
CodCtg = cbCodCtg: NomCtg = lbNomCtg2
'Voir commentaire précédent en changeant le nom des outils en conséquence.
CodArt = cbCodArt: NomArt = lbNomArt2
'On demande au programme d'afficher l'UserForm UF02_ArtMenu
Unload Me: UF02_ArtMenu.Show
End Sub


Private Sub UserForm_Initialize()
'Va permettre de remplir la zone de liste modifiable cbCodCtg avec la liste du tableauLCTG, colonne CC
cbCodCtg.List = Range("LCTG[CC]").Value
End Sub
Bonjour ou hello (comme tu veut),

Penses à placer ton code dans une balise.

Cordialement
 

soan

XLDnaute Barbatruc
Bonsoir Christian, Etoto,

je réponds ici aux questions de ton post #70, que tu as placées dans le code VBA ; mais en fait, ça revient à faire un commentaire de mon code VBA.​



« que signifie la ligne entière ? » ; il est important de savoir qu'en VBA, le signe deux-points « : » est un séparateur d'instructions ; donc :​

Dim T, s1$, s2$, n%: n = cbCodCtg.ListIndex: cbCodArt.Clear est idem que :

VB:
Dim T, s1$, s2$, n%
n = cbCodCtg.ListIndex
cbCodArt.Clear

* la 1ère ligne avec Dim est pour déclarer des variables ; T est une variable sans indication explicite de type ; c'est donc une variable du type implicite Variant ; s1$ et s2$ : idem qu'avec As String ➯ 2 variables de type chaîne de caractères ; n% : idem qu'avec As Integer ➯ nombre entier sur 2 octets (16 bits)

* la 2ème ligne met dans n le n° d'index de la liste déroulante cbCodCtg ; attention : c'est -1 si y'a pas d'item sélectionné ! et le n° du 1er item de la liste n'est pas 1 mais : 0 ➯ c'est le 2ème item de la liste qui a le n° 1, puis c'est 2 pour le 3ème item, etc...

* la 3ème ligne
supprime la liste de cbCodArt, car avant de créer la liste déroulante des codes articles qui correspondent au code catégorie qui a été choisi par l'utilisateur, il faut d'abord supprimer une ancienne éventuelle liste de codes articles qui avait peut-être été créée auparavant.



If n = -1 Then lbNomCtg2 = "": lbNomArt2 = "": Exit Sub : si y'a pas d'item sélectionné pour le code article, alors on efface nom catégorie et nom article, puis on quitte la sub.​



lbNomCtg2 = Range("LCtg[NC]").Item(n + 1) : on met dans le label lbNomCtg2 le nom de la catégorie, selon l'index de la liste des codes catégories, donc en fonction du code catégorie qui a été sélectionné par l'utilisateur ; attention : comme l'index d'une liste est à partir de 0 pour le 1er item, il faut ajouter 1 pour avoir le bon n° de ligne du tableau ; car dans un tableau structuré, la 1ère ligne de données de ce tableau est la ligne n° 1 ; ce n'est pas la ligne n° 0 !

cbCodArt = "": lbNomArt2 = "" : attention : si on change de code catégorie, on doit effacer le code article et le nom article qui avaient été éventuellement choisis ou affichés avant.

If n < 2 Then cbCodArt = "POM": lbNomArt2 = "Pomme": Exit Sub : pour les 2 premiers items de la liste des codes catégories : c'est "POM" pour le code article et "Pomme" pour le nom article ; puis on quitte la sub.​



T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _ "LLWD", "LVMR", "LVMW", "LVS")

T, qui était une variable sans type, donc de type Variant, devient ici un tableau (car Array = Tableau) ; ce tableau contient la liste des noms de tous les tableaux structurés qui seront utiles pour créer la liste des codes articles, et pour les noms articles associés à ces codes articles.


s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "C" cbCodArt.List = Range(s1 & s2).Value

comme j'ai déjà eu l'occasion de te l'expliquer en MP, et que je sais que tu as compris mon explication, je ne m'étends pas plus là-dessus.​



VB:
Private Sub cbCodCtg_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

si on appuie sur la touche Echap, on ferme le formulaire ; puis on quitte la sub car ensuite y'a : End Sub.​



Mêmes questions et certainement mêmes réponses que pour cbCodCtg_Change

exact. 🙂


la sub cmdGo_Click() est pour valider la saisie faite dans le 1er formulaire UF01_CtgArt ; donc pour valider la saisie du code catégorie et du code article (rappel : le nom catégorie et le nom article correspondants sont affichés automatiquement) ; le bouton « Go » est pareil qu'un bouton « OK » : il valide la saisie ; puis ça va aller sur le 2ème formulaire UF02_ArtMenu.​



If lbNomCtg2 = "" Then cbCodCtg.SetFocus: Exit Sub : si le nom catégorie est vide, c'est que l'utilisateur n'a pas saisi de code catégorie ➯ on place le Focus sur le contrôle cbCodCtg, puis on quitte la sub.

If lbNomArt2 = "" Then cbCodArt.SetFocus: Exit Sub : si le nom article est vide, c'est que l'utilisateur n'a pas saisi de code article ➯ on place le Focus sur le contrôle cbCodArt, puis on quitte la sub.​



CodCtg = cbCodCtg: NomCtg = lbNomCtg2 CodArt = cbCodArt: NomArt = lbNomArt2

pour ces 4 infos : code catégorie ; nom catégorie ; code article ; nom article : les valeurs des contrôles du formulaire concernés sont placées dans les 4 variables publiques adéquates ; elles seront donc disponibles et accessibles pour le 2ème formulaire UF02_ArtMenu.​



Unload Me: UF02_ArtMenu.Show : on ferme le 1er formulaire UF01_CtgArt, puis on affiche le 2ème formulaire UF02_ArtMenu.

soan​
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
Bonsoir Christian,

1) tu as écrit : « J'ai trouvé : supprimer les deux instructions qui sont en commentaires. » ; attention : c'est pas les 2 instructions entières qu'il faut supprimer ! c'est seulement le 1er caractère qui est l'apostrophe ; mébon, comme tu as ajouté « Cela a marché. », c'est que tu as dû faire la bonne manip, sinon les « mouchards » n'indiqueraient pas la date et l'heure d'ouverture et de sauvegarde en colonnes C et D.


2) à propos du Gestionnaire de noms : oooopppppssss, tu as raison ! :oops: j'ai oublié d'y faire le ménage ! c'est fait maintenant ; à part les noms des tableaux structurés (qu'il est de toute façon impossible de supprimer directement ici), j'ai supprimé tous les noms définis, car avec ou sans valeur d'erreur #REF!, ils étaient tous inutiles ! d'où cette image (allégée et sans matière grasse) :​

Regarde la pièce jointe 1110087

ça s'explique aussi car sur la feuille "LT02", j'ai simplifié le nom de ces 3 tableaux structurés :​

a) le nom du tableau en D:E était "LLWES" ; c'est devenu : "LLWS"

b) le nom du tableau en G:H était "LLWED" ; c'est devenu : "LLWD"

c) le nom du tableau en M:N était "LVMWE" ; c'est devenu : "LVMW"



3) et 4) : la fonctionnalité Modifier fonctionne, et Supprimer aussi : ok ! 😊



5) en feuille "LT03" pour le tableau des conditionnements :

* en D1, j'aurais pu mettre "CC" pour Code Conditionnement ; mais pour éviter de le confondre avec le "CC" de Code Catégorie (feuille "LT01", A1), j'ai préféré mettre "CK" ; et phonétiquement ça sonne pareil quand tu dis « Kangourou » et « Conditionnement » : c'est toujours le même son que quand tu prononces « que » ; je suis sûr que Yeahou (salut) appréciera beaucoup ma phonétique ! 😁 😜 😂 (ah, ben on fait c'qu'on peut, hein? 🤣)

* en E1, j'aurais pu mettre "NC" pour Nom Conditionnement ; mais pour éviter de le confondre avec le "NC" de Nom Catégorie (feuille "LT01", B1), j'ai préféré mettre "NK" ; et phonétiquement : idem que ci-dessus. 😁 (j'avais caché à Yeahou qu'j'étais aussi avancé en phonétique ! il va être épaté, quand il va lire tout ça ! 😁 🤪 😄)



6) pourquoi 3 feuilles de listes au lieu d'une seule ? je suis surpris que tu poses cette question, puisque je t'en ai déjà donné la raison dans le 1er paragraphe de mon long post #53 ; c'est pour éviter de devoir faire un long défilement vers la droite ; à la place, il te suffit d'utiliser Ctrl PageDn et Ctrl PageUp (page suivante et page précédente) pour passer d'une feuille de listes à une autre ; et sur chaque feuille de listes, si tu as un écran au moins aussi large que le mien, tu dois voir toutes les listes d'un coup, sans faire de scroll à droite ; même verticalement, je vois aussi tout d'un coup : je n'ai pas besoin de faire un scroll vers le bas. 🙂 mais si plus tard y'aura d'autres items dans ces listes et que tu dois scroller verticalement pour les voir, ne change rien ; du moment que tu vois tout en largeur, c'est l'essentiel ! 👍

maint'nant, si vraiment tu préfères que toutes les listes soient sur une seule feuille, même si ça oblige à scroller horizontalement, je peux te faire une autre version du fichier actuel. 😉



7) dans le formulaire UF02_ArtMenu, pour les 2 listes déroulantes Code jour et Code CAM, la largeur de la liste (quand on la déroule) était un peu trop étroite, et c'est ma faute ; j'ai corrigé : elle est un peu plus large ; c'est mieux : ça faisait vraiment trop exigu ! 😕



8) pour la feuille "BD Articles", j'ai mis un zoom de 93 % ; c'est plus large, on voit mieux, et ça tient sur mon écran sans devoir scroller à droite. (j'avais oublié de corriger ce zoom après avoir fusionné en une seule les 2 premières listes catégorie et destination)



9) pour chacune des 5 feuilles, fais Ctrl F2 ➯ Aperçu avant impression ; note que c'est prêt à être imprimé ; fais Echap pour sortir de l'Aperçu.​



10) dans le 1er formulaire "CtgArt", as-tu remarqué ce qui se passe pour les 2 premières catégories ? si tu choisis "DMR" ou "DS", en dessous, ça met automatiquement le Code article "POM" et le Nom article "Pomme" car il n'y a pas de choix à faire : comme y'a que ce seul article, c'est forcément celui-là ! et y'a pas besoin de faire une liste juste pour un seul item "Pomme" ! :)





non, pas du tout ! tu es entièrement libre de refaire tout le fichier en totalité, et même aussi souvent que tu en as envie ! de toutes façons, même si tu perds le fichier original et que tu n'arrives plus à le refaire, le fichier joint ci-dessous sera toujours , et tu pourras le télécharger autant de fois que ça te sera utile. 😊

soan

Bonjour ou hello (comme tu veut),

Penses à placer ton code dans une balise.

Bonsoir Christian, Etoto,

je réponds ici aux questions de ton post #70, que tu as placées dans le code VBA ; mais en fait, ça revient à faire un commentaire de mon code VBA.​



« que signifie la ligne entière ? » ; il est important de savoir qu'en VBA, le signe deux-points « : » est un séparateur d'instructions ; donc :​

Dim T, s1$, s2$, n%: n = cbCodCtg.ListIndex: cbCodArt.Clear est idem que :

VB:
Dim T, s1$, s2$, n%
n = cbCodCtg.ListIndex
cbCodArt.Clear

* la 1ère ligne avec Dim est pour déclarer des variables ; T est une variable sans indication explicite de type ; c'est donc une variable du type implicite Variant ; s1$ et s2$ : idem qu'avec As String ➯ 2 variables de type chaîne de caractères ; n% : idem qu'avec As Integer ➯ nombre entier sur 2 octets (16 bits)

* la 2ème ligne met dans n le n° d'index de la liste déroulante cbCodCtg ; attention : c'est -1 si y'a pas d'item sélectionné ! et le n° du 1er item de la liste n'est pas 1 mais : 0 ➯ c'est le 2ème item de la liste qui a le n° 1, puis c'est 2 pour le 3ème item, etc...

* la 3ème ligne
supprime la liste de cbCodArt, car avant de créer la liste déroulante des codes articles qui correspondent au code catégorie qui a été choisi par l'utilisateur, il faut d'abord supprimer une ancienne éventuelle liste de codes articles qui avait peut-être été créée auparavant.



If n = -1 Then lbNomCtg2 = "": lbNomArt2 = "": Exit Sub : si y'a pas d'item sélectionné pour le code article, alors on efface nom catégorie et nom article, puis on quitte la sub.​



lbNomCtg2 = Range("LCtg[NC]").Item(n + 1) : on met dans le label lbNomCtg2 le nom de la catégorie, selon l'index de la liste des codes catégories, donc en fonction du code catégorie qui a été sélectionné par l'utilisateur ; attention : comme l'index d'une liste est à partir de 0 pour le 1er item, il faut ajouter 1 pour avoir le bon n° de ligne du tableau ; car dans un tableau structuré, la 1ère ligne de données de ce tableau est la ligne n° 1 ; ce n'est pas la ligne n° 0 !

cbCodArt = "": lbNomArt2 = "" : attention : si on change de code catégorie, on doit effacer le code article et le nom article qui avaient été éventuellement choisis ou affichés avant.

If n < 2 Then cbCodArt = "POM": lbNomArt2 = "Pomme": Exit Sub : pour les 2 premiers items de la liste des codes catégories : c'est "POM" pour le code article et "Pomme" pour le nom article ; puis on quitte la sub.​



T = Array("LDW", "LLMR", "LLSLM", "LLSMJ", "LLSV", "LLWS", _ "LLWD", "LVMR", "LVMW", "LVS")

T, qui était une variable sans type, donc de type Variant, devient ici un tableau (car Array = Tableau) ; ce tableau contient la liste des noms de tous les tableaux structurés qui seront utiles pour créer la liste des codes articles, et pour les noms articles associés à ces codes articles.


s1 = T(n - 2): s2 = "[" & s1 & "]": Mid$(s2, 2, 1) = "C" cbCodArt.List = Range(s1 & s2).Value

comme j'ai déjà eu l'occasion de te l'expliquer en MP, et que je sais que tu as compris mon explication, je ne m'étends pas plus là-dessus.​



VB:
Private Sub cbCodCtg_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  If KeyAscii = 27 Then Unload Me
End Sub

si on appuie sur la touche Echap, on ferme le formulaire ; puis on quitte la sub car ensuite y'a : End Sub.​





exact. 🙂


la sub cmdGo_Click() est pour valider la saisie faite dans le 1er formulaire UF01_CtgArt ; donc pour valider la saisie du code catégorie et du code article (rappel : le nom catégorie et le nom article correspondants sont affichés automatiquement) ; le bouton « Go » est pareil qu'un bouton « OK » : il valide la saisie ; puis ça va aller sur le 2ème formulaire UF02_ArtMenu.​



If lbNomCtg2 = "" Then cbCodCtg.SetFocus: Exit Sub : si le nom catégorie est vide, c'est que l'utilisateur n'a pas saisi de code catégorie ➯ on place le Focus sur le contrôle cbCodCtg, puis on quitte la sub.

If lbNomArt2 = "" Then cbCodArt.SetFocus: Exit Sub : si le nom article est vide, c'est que l'utilisateur n'a pas saisi de code article ➯ on place le Focus sur le contrôle cbCodArt, puis on quitte la sub.​



CodCtg = cbCodCtg: NomCtg = lbNomCtg2 CodArt = cbCodArt: NomArt = lbNomArt2

pour ces 4 infos : code catégorie ; nom catégorie ; code article ; nom article : les valeurs des contrôles du formulaire concernés sont placées dans les 4 variables publiques adéquates ; elles seront donc disponibles et accessibles pour le 2ème formulaire UF02_ArtMenu.​



Unload Me: UF02_ArtMenu.Show : on ferme le 1er formulaire UF01_CtgArt, puis on affiche le 2ème formulaire UF02_ArtMenu.

soan​
Bonjour SOAN,

Merci pour ta réponse. Effectivement, c'était bien un commentaire de ton code : j'ai essayé de comprendre les instructions. Sincèrement, ai-je fait de bonnes déductions ou dans l'ensemble c'était absolument nul et je ne suis pas prêt à avoir mon bac S ? Je vais regarder le deuxième userform et voir si des explications sont nécessaires.
 

soan

XLDnaute Barbatruc
Bonjour Christian,

Sincèrement, ai-je fait de bonnes déductions ou dans l'ensemble c'était absolument nul et je ne suis pas prêt à avoir mon bac S ?​

sincèrement, y'avait de bonnes choses, et d'autres moins bonnes ; quand j'ai entièrement reformulé certains commentaires, j'espère que ça t'a bien aidé à mieux comprendre ! :)



Je vais regarder le deuxième UserForm et voir si des explications sont nécessaires.

bonne chance ! 🍀 et c'est vraiment vraiment très sincère : plus tu arriveras à comprendre, mieux ce sera pour toi ... et pour moi aussi ! ça m'fera beaucoup moins de travail pour t'expliquer ensuite c'que tu n'auras pas compris ! 😄 😂 🤣

soan
 

BUDGETS

XLDnaute Impliqué
Bonjour Christian,



sincèrement, y'avait de bonnes choses, et d'autres moins bonnes ; quand j'ai entièrement reformulé certains commentaires, j'espère que ça t'a bien aidé à mieux comprendre ! :)





bonne chance ! 🍀 et c'est vraiment vraiment très sincère : plus tu arriveras à comprendre, mieux ce sera pour toi ... et pour moi aussi ! ça m'fera beaucoup moins de travail pour t'expliquer ensuite c'que tu n'auras pas compris ! 😄 😂 🤣

soan
Comme pour l'UF01_CtgArt, voici mes commentaire pour l'UF02_ArtMenu. J'ai repris, quand cela était possible, tes explications (en espérant ne pas avoir fait d'erreurs) du premier formulaire. Quand je ne sais pas, j'ai demandé à quoi cela correspond, à expliquer des procédures, etc.

Option Explicit

'Déclaration des variables : dim LgArt& (identique à dim LgArt as long);Que représente LgArt& ?Que représente b ? Les variables de type booléan sont stockées sous la forme de nombres de 16 bits
'(2 octets), mais elles ne peuvent avoir pour valeur que True ou false
Dim LgArt&, b As Boolean

Private Sub cbCtgÀModif_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Si on appuie sur la touche Echap, on ferme le formulaire puis on quitte la procédure car ensuite il y a end sub
If KeyAscii = 27 Then Unload Me
End Sub

Private Sub cbCodJour_Change()

'Déclaration des variables : dim n% (identique à dim n% as Integer);n : met dans n le numéro d'index de la zone de liste déroulante cbCodJour (comboboxCodJour). Le signe
':, en VBA, est un séparateur d'instruction. Cela équivaut à :
'dim n%
'n=cbCodJour.ListIndex
Dim n%: n = cbCodJour.ListIndex
'Que signifie l'instruction ci-après ?
If n = -1 Then lbNomJour2 = "" Else lbNomJour2 = Range("LJO[NJ]").Item(n + 1)
End Sub

Private Sub cbCodCAM_Change()
'Déclaration des variables : dim n% (identique à dim n% as Integer);n : met dans n le numéro d'index de la zone de liste déroulante cbCodCam (comboboxCodCam)
Dim n%: n = cbCodCAM.ListIndex
'Que signifie l'instruction ci-après ? Si identique à l'instruction de la procédure cbCodJour_Change mias à part le nom des outils, inutile de répondre à cette question, ce qui se-
'sûr.
If n = -1 Then lbNomCAM2 = "" Else lbNomCAM2 = Range("LCO[NK]").Item(n + 1)
End Sub

Private Sub TriTArtMenu()
With ActiveSheet.ListObjects("TArtMenu")
With .Sort
.Header = xlYes 'la 1ère ligne du tableau est une ligne d'en-têtes (=> ne pas la trier !)
.MatchCase = False 'trier sans faire de différence entre les majuscules et les minuscules
With .SortFields
.Clear 'supprimer tous les critères de tri
.Add Key:=Range("TArtMenu[CC]"), SortOn:=0, Order:=1 'Code catégorie (par valeur, croissant)
.Add Key:=Range("TArtMenu[CA]"), SortOn:=0, Order:=1 'Code article (par valeur, croissant)
End With
.Apply: [A1].Select 'fait le tri selon les infos ci-dessus, puis va en A1
End With
End With
End Sub

Private Sub cmdValider_Click()
'Déclaration des variables : dim lig& (identique à dim lig as long);Que représente b ? En VBA, un : est un séparateur d'instruction, ce qui équivaut à :
'Dim lig
'Application.ScreenUpdating = 0;Pourquoi 0
'FL02_BDA.Select : on sélectionne et on va aller dans la feuille BD articles (BDA)
Dim lig&: Application.ScreenUpdating = 0: FL02_BDA.Select
If b Then 'Si b alors lig = LgArt.
lig = LgArt
Else
'Si le cbCtgÀModif est vide, c'est que l'utilisateur n'a pas saisi de code à modifier : on place le focus sur le contrôle cbCtgÀmodifier puis on quitte le sub
If cbCtgÀModif = "" Then cbCtgÀModif.SetFocus: Exit Sub
If cbCodJour = "" Then cbCodJour.SetFocus: Exit Sub
If cbCodCAM = "" Then cbCodCAM.SetFocus: Exit Sub
'On active la feuille BD articles et plus spécialement le tableau TArtMenu
With ActiveSheet.ListObjects("TArtMenu")
'Instruction suivante à expliquer
.ListRows.Add: lig = .ListRows.Count + 2
End With
'Dans la feuille active (BD articles), le programme se place dans une ligne vide et, dans cette ligne vide va dans la deuxième colonne (Lig, 2), ici colonne B.
With Cells(lig, 2)
'Les renseignements saisis dans les deux formulaires (UF01_CtgArt et UF02_ArtMenu) vont être transférés dans la feuille BD articles, dans les colonnes correspondantes.
.Value = lbCodCtg2 'B : CC = Code catégorie
.Offset(, 1) = lbNomCtg2 'C : Nom catégorie
.Offset(, 3) = lbCodArt2 'E : CA = Code article
.Offset(, 4) = lbNomArt2 'F : Nom article
.Offset(, 9) = dpDateCréation 'K : Date création
.Offset(, 10) = lbNumCréation2 'L : N° création
End With
End If
With Cells(lig, 2)
.Offset(, 2) = cbCtgÀModif 'D : Catégorie à modifier
.Offset(, 5) = cbCodJour 'G : CJ = Code jours
.Offset(, 6) = lbNomJour2 'H : Nom jours
.Offset(, 7) = cbCodCAM 'I : CK = Code conditionnement
.Offset(, 8) = lbNomCAM2 'J : Nom conditionnement
End With
'Voir plus haut l'explication des deux points. Que représente FX ?
Call TriTArtMenu: FX.Select: Unload Me
End Sub

Private Sub cmdAnnuler_Click()
Unload Me 'Fermer le formulaire
End Sub

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

Private Sub SearchCtgArt() 'À quoi sert cette procédure ?
Dim n&, i&: b = 0
With Range("TArtMenu")
n = .Rows.Count
For i = 1 To n
With .Cells(i, 1)
If .Value = CodCtg Then 'même Code catégorie
If .Offset(, 3) = CodArt Then 'même Code article
cbCtgÀModif = .Offset(, 2) 'Catégorie à modifier
cbCodJour = .Offset(, 5) 'CJ : Code jour
lbNomJour2 = .Offset(, 6) 'Nom jour
cbCodCAM = .Offset(, 7) 'CK : Code conditionnement
lbNomCAM2 = .Offset(, 8) 'Nom conditionnement
LgArt = i + 2: b = -1: Exit For
End If
End If
End With
Next i
End With
End Sub

Private Sub UserForm_Initialize() 'Procédure à expliquer
Dim DC As Date: Set FX = ActiveSheet
lbCodCtg2 = CodCtg: lbNomCtg2 = NomCtg
lbCodArt2 = CodArt: lbNomArt2 = NomArt: cbCodJour.List = Range("LJO[CJ]").Value
cbCodCAM.List = Range("LCO[CK]").Value: SearchCtgArt: cmdSuppr.Enabled = b
With FL02_BDA
If b Then
DC = .Cells(LgArt, 11): lbNumCréation2 = .Cells(LgArt, 12)
Else
DC = Date: lbNumCréation2 = Application.CountIf(.Columns(2), CodCtg) + 1
End If
End With
dpDateCréation = Format(DC, "d mmmm yyyy")
cbCtgÀModif.List = Array("Non", "Oui")
End Sub

J'ai regardé caractères de type mais cela ne m'a vraiment pas aidé. Voir la capture d'écran dans le fichier joint.

Si j'ai bien compris le fonctionnement de ton programme, le code de la feuille Accueil est devenu inutile. Oui. Non.
 

Pièces jointes

  • Caractères de type.png
    Caractères de type.png
    235.6 KB · Affichages: 8
Dernière édition:

Discussions similaires

Haut Bas