Passage d'une listbox à une autre.
Résolu
DGVDR
Messages postés
158
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- Passage d'une listbox à une autre.
- Passage qwerty azerty - Guide
- Passage à windows 11 gratuit - Guide
- Passage windows 7 à 10 - Accueil - Mise à jour
- Couper un passage d une vidéo - Guide
- Test passage windows 11 - Guide
8 réponses
Bonjour,
dans ton userform, il faut que tu ajoutes le code (je n'ai pas accès à ton code car tu y as mis un mot de passe, donc il faudra que tu lemodifies :
dans ton userform, il faut que tu ajoutes le code (je n'ai pas accès à ton code car tu y as mis un mot de passe, donc il faudra que tu lemodifies :
Sub plagemachine_change Plagepièce.clear if plagemachine = 1 then Plagepièce.Additem 12 Plagepièce.Additem 13 end if if plagemachine = 2 then Plagepièce.Additem 22 Plagepièce.Additem 23 end if end sub
Bonjour,
regarde si ca te convient :
https://www.cjoint.com/c/CLlqrBJd3pL
Il faudrait juste être sûre que la codification des macines est bien sur 4 caractères sinon le code ajouté ne fonctionnera plus.
regarde si ca te convient :
https://www.cjoint.com/c/CLlqrBJd3pL
Il faudrait juste être sûre que la codification des macines est bien sur 4 caractères sinon le code ajouté ne fonctionnera plus.
Oui c'est parfait !!
Oui le code sera sur 4 caractères.
Je vais te demander quelques explications sur ce bout de code :
Car j'aurais besoin de ce type de code pour alimenter la dernière ListBox.
Si jamais, je reviendrais vers toi, car il va faloir diviser la listbox en 4 , et je ne l'ai jamais fait...
Merci beaucoup melanie1324.
DGVDR
Oui le code sera sur 4 caractères.
Je vais te demander quelques explications sur ce bout de code :
If Left(Sheets("Stock").Cells(i, 1), 4) = Right(Plagemachine.Value, 4) ThenPeux tu me l'expliquer sous formes de phrases ?
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
Car j'aurais besoin de ce type de code pour alimenter la dernière ListBox.
Si jamais, je reviendrais vers toi, car il va faloir diviser la listbox en 4 , et je ne l'ai jamais fait...
Merci beaucoup melanie1324.
DGVDR
Pardon,
If Left(Sheets("Stock").Cells(i, 1), 4) = Right(Plagemachine.Value, 4) Then
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
==> la fonction left récupère les caractères à gauche.
Left(Sheets("Stock").Cells(i, 1), 4) ==> récupères les 4 (par lechiffre 4) caractères situés à gauche de la cellule de la ligne i colonne 1 de la feuille Stock donc AMOS ou PALL
==> la fonction right récupère les caractères à droite.
Right(Plagemachine.Value, 4) ==> récupères les 4 caractères situés à droite de la valeur Plagemachine. Autrement dit, quand tu sélectionnes une valeur dans Plagemachine, tu récupères sa codification.
Autre ment dit si la codification de Plage mahcine = celle dans la cellule alors :
on ajoute la pièce correspondante à la listbox Plagepièce :
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
C'est plus clair?
If Left(Sheets("Stock").Cells(i, 1), 4) = Right(Plagemachine.Value, 4) Then
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
==> la fonction left récupère les caractères à gauche.
Left(Sheets("Stock").Cells(i, 1), 4) ==> récupères les 4 (par lechiffre 4) caractères situés à gauche de la cellule de la ligne i colonne 1 de la feuille Stock donc AMOS ou PALL
==> la fonction right récupère les caractères à droite.
Right(Plagemachine.Value, 4) ==> récupères les 4 caractères situés à droite de la valeur Plagemachine. Autrement dit, quand tu sélectionnes une valeur dans Plagemachine, tu récupères sa codification.
Autre ment dit si la codification de Plage mahcine = celle dans la cellule alors :
on ajoute la pièce correspondante à la listbox Plagepièce :
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
C'est plus clair?
Je reprends tout le code ajouté (et j'avais fait une petite erreur, regarde ce fichier : http://cjoint.com/confirm.php?cjoint=CLlrbMgoasw)
Comprends-tu?
Private Sub Plagemachine_Click() 'macro qui se déclenche lorsque tu cliques sur la plage machine i = 2 'la variable i = 2 Plagepièces.Clear 'vidage de la listbox Plagepièces If Plagemachine.Value <> "" Then 'si un item estsélectionné dansla list boxmachine Do While Sheets("Stock").Cells(i, 1) <> "" 'boucle qui fonctionne tant que la cellule de la ligne i colonne 1 de la feuille stock est non vide 'là tu es d'accord, il faut comparer la codification de la cellule avec l'item Plage machines 'tes cellules sont "codification.incrémentation", pour récupérer la codification, tu prends les 4 caractères situés à gauche de la cellule (dans ton exemple PALL ou AMOS) '==> d'ou Left(Sheets("Stock").Cells(i, 1), 4) 'dans la plage machine, c'est Machine.codification. Pour récupérer la codification, tu prends les 4 'caractères situés à droite (dans ton exemple dans Presse Amos, il faut donc récupérer AMOS 'd'ou Right(Plagemachine.Value, 4) 'et le if compares lacodification de la plage machine avec la codification des cellules de la feuille stock If Left(Sheets("Stock").Cells(i, 1), 4) = Right(Plagemachine.Value, 4) Then 'si les codifications sont identiques, tu ajoutes la pièce à la listbox Pièce Plagepièces.AddItem Sheets("Stock").Cells(i, 2) End If i = i + 1 Loop 'on passe à la ligne suivante End If End Sub
Comprends-tu?
melanie,
Je crois comprendre mais je pense que ca ne va pas être viable.
Car pour ne pas surcharge je n'ai mit que deux exemples (PALL et AMOS)
Cependant je pense qu'un passage par les colonnes J et K de l'onglet "Stock" est inévitable.
Je t'expliques ma pensée :
Je cliques sur un item de pagemachine (la listbox de l'userform)
Je cherche ça codification dans la colonne J (en général les 4 premères lettres de la machine, mais pas forcément !)
Et je cherche ayant, la codification machine, les pièces appartenant à la machine, ces pièces étant nomenclaturée en fonction de la codification machine. Sachant que je veux afficher, comme tu l'as très bien fait, le nom de la pièce (machin/truc / bidule..)
Exemple :
Je clique sur Presse AMOS
- > Ma codification machine est AMOS
-> Mes pièces sont codifiées AMOS.XXX
-> Je veux afficher les noms de pièces correspondant à AMOS.001 / AMOS 002.
Sachant que par exemple j'ai un cas ou, ma machine est 'Echangeur extérieur' et que ça codification ECEX. C'est pour ca que je pense qu'un passage par les colonnes J et K est indispensable.
Redit moi si ça n'est pas clair.
Merci beaucoup de ton temps,
DGVDR
Je crois comprendre mais je pense que ca ne va pas être viable.
Car pour ne pas surcharge je n'ai mit que deux exemples (PALL et AMOS)
Cependant je pense qu'un passage par les colonnes J et K de l'onglet "Stock" est inévitable.
Je t'expliques ma pensée :
Je cliques sur un item de pagemachine (la listbox de l'userform)
Je cherche ça codification dans la colonne J (en général les 4 premères lettres de la machine, mais pas forcément !)
Et je cherche ayant, la codification machine, les pièces appartenant à la machine, ces pièces étant nomenclaturée en fonction de la codification machine. Sachant que je veux afficher, comme tu l'as très bien fait, le nom de la pièce (machin/truc / bidule..)
Exemple :
Je clique sur Presse AMOS
- > Ma codification machine est AMOS
-> Mes pièces sont codifiées AMOS.XXX
-> Je veux afficher les noms de pièces correspondant à AMOS.001 / AMOS 002.
Sachant que par exemple j'ai un cas ou, ma machine est 'Echangeur extérieur' et que ça codification ECEX. C'est pour ca que je pense qu'un passage par les colonnes J et K est indispensable.
Redit moi si ça n'est pas clair.
Merci beaucoup de ton temps,
DGVDR
Non, ce n'est absolument pas clair.
Mets ton exemple dans ton fichier ECEX pour que ce soit plus clair.
Moi, je suis partie du principe suivant :
dans la listbox Plagemachine : s'affiche tes machines comme suit : Machine (espace) Codification
donc Presse AMOS (ou alors explique moi comment je récupère la codification dans la listbox Plage machine??? )
==> je récupère donc la codification AMOS (par mon code en prenant les 4 derniers caractères)
dans la feuille stock, une fois récupérée la codification, je recherche toutes les pièces pour lesquelles la codification des pièces commence par la codification trouvée précédemment.
si tel est le cas, j'affiche dans la pplagepièces : les pièces correspondantes.
Les points les plus importants sont :
- ta codification est-elle toujours sur 4 caractère ?
- Dans la plagemachine, ta codification est-elle toujours sur les 4 derniers caractères ?
Si oui au 2, alors mon code ne fonctionne pas.
Sinon, comment je peux récupérer la codification dans la plageMachine???
regarde ce fichier :
http://cjoint.com/confirm.php?cjoint=CLlrVjliXKK
Mets ton exemple dans ton fichier ECEX pour que ce soit plus clair.
Moi, je suis partie du principe suivant :
dans la listbox Plagemachine : s'affiche tes machines comme suit : Machine (espace) Codification
donc Presse AMOS (ou alors explique moi comment je récupère la codification dans la listbox Plage machine??? )
==> je récupère donc la codification AMOS (par mon code en prenant les 4 derniers caractères)
dans la feuille stock, une fois récupérée la codification, je recherche toutes les pièces pour lesquelles la codification des pièces commence par la codification trouvée précédemment.
si tel est le cas, j'affiche dans la pplagepièces : les pièces correspondantes.
Les points les plus importants sont :
- ta codification est-elle toujours sur 4 caractère ?
- Dans la plagemachine, ta codification est-elle toujours sur les 4 derniers caractères ?
Si oui au 2, alors mon code ne fonctionne pas.
Sinon, comment je peux récupérer la codification dans la plageMachine???
regarde ce fichier :
http://cjoint.com/confirm.php?cjoint=CLlrVjliXKK
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut vous 2,
Avec le classeur d'origine, sans colonne L, essayez, dans un premier temps ce code :
Pour continuer, il faudrait savoir combien de lignes seront saisies, à terme (1 an ou 2 d'exploitation du fichier), colonnes A:F de la feuille Stock.
Y a t'il des risques de doublons colonnes A et B feuille Stock?
Cordialement,
Franck
Avec le classeur d'origine, sans colonne L, essayez, dans un premier temps ce code :
Private Sub Plagemachine_Click() Dim Codification As String, i As Long If Plagemachine.ListIndex = -1 Then Exit Sub 'Si aucune valeur n'est sélectionnée i = 2 Plagepièces.Clear 'on vide la listbox Plagepièces Codification = Sheets("Stock").Columns(11).Cells.Find(Plagemachine.Value, LookAt:=xlWhole).Offset(0, -1).Value Do While Sheets("Stock").Cells(i, 1) <> "" 'tant que la cellule de la ligne i colonne 1 de la feuille If Left(Sheets("Stock").Cells(i, 1), 4) = Codification Then 'si les 4 premiers caractères du code pièce correspondent à la codification Plagepièces.AddItem Sheets("Stock").Cells(i, 2) 'on ajoute la pièce à la listbox End If i = i + 1 'on passe à la ligne suivante Loop End Sub Private Sub Userform_initialize() 'si la dernière ligne est supérieure à 256 déclarer i et x en Integer Dim i As Long, x As Long With Sheets("Stock") i = .Range("K65536").End(xlUp).Row For x = 2 To i Plagemachine.AddItem .Range("K" & x) Next x End With End Sub
Pour continuer, il faudrait savoir combien de lignes seront saisies, à terme (1 an ou 2 d'exploitation du fichier), colonnes A:F de la feuille Stock.
Y a t'il des risques de doublons colonnes A et B feuille Stock?
Cordialement,
Franck
Bonjour pijaku,
Pour continuer, il faudrait savoir combien de lignes seront saisies, à terme (1 an ou 2 d'exploitation du fichier), colonnes A:F de la feuille Stock.
-> Ca influerait sur la designation des Variables ? (As long , as ...?)
Y a t'il des risques de doublons colonnes A et B feuille Stock?
-> Non, le nom complet de la pièce sera toujours différent de sa codification.
La codification dépendant de la machine associé à la pièce ou de son type d'usage.
Merci,
DGVDR
Pour continuer, il faudrait savoir combien de lignes seront saisies, à terme (1 an ou 2 d'exploitation du fichier), colonnes A:F de la feuille Stock.
-> Ca influerait sur la designation des Variables ? (As long , as ...?)
Y a t'il des risques de doublons colonnes A et B feuille Stock?
-> Non, le nom complet de la pièce sera toujours différent de sa codification.
La codification dépendant de la machine associé à la pièce ou de son type d'usage.
Merci,
DGVDR
-> Ca influerait sur la designation des Variables ? (As long , as ...?)
Pas que...
Si tu as 30 000 lignes, il vaut mieux ne pas travailler sur la feuille, et donc la boucle Do Loop devra être remplacée.
-> Non, le nom complet de la pièce sera toujours différent de sa codification.
Pas de possibilité de double saisie????
Pas que...
Si tu as 30 000 lignes, il vaut mieux ne pas travailler sur la feuille, et donc la boucle Do Loop devra être remplacée.
-> Non, le nom complet de la pièce sera toujours différent de sa codification.
Pas de possibilité de double saisie????
J'aimerai profiter de vos connaissances de nouveau.
Maintenant que vous connaissez mon userform.
J'aimerai maintenant que, quand je cliques sur un item de "Plagepièces", j'ai ses infos qui apparaissent dans la dernière listBox. Ca implique de diviser cette listbox en 4. Et de compléter la listbox par les infos de l'onglet "Stock"
Pouvez-vous m'aider ?
Merci,
DGVDR
Maintenant que vous connaissez mon userform.
J'aimerai maintenant que, quand je cliques sur un item de "Plagepièces", j'ai ses infos qui apparaissent dans la dernière listBox. Ca implique de diviser cette listbox en 4. Et de compléter la listbox par les infos de l'onglet "Stock"
Pouvez-vous m'aider ?
Merci,
DGVDR
Juste pour le fun, en conservant une listbox nommée ListBox3 :
L'événement clic dans PlagePièces :
Code pour transformer la ListBox3 en multicolonnes :
A ajouter dans le Userform_initialize()
L'événement clic dans PlagePièces :
Private Sub Plagepièces_Click() Dim i As Integer, j As Byte, rngTrouve As Range If Plagepièces.ListIndex = -1 Then Exit Sub ListBox3.Clear With Sheets("Stock") For i = 0 To Plagepièces.ListCount - 1 If Plagepièces.Selected(i) = False Then ListBox3.AddItem "" For j = 1 To 4 ListBox3.List(ListBox3.ListCount - 1, j - 1) = "" Next j Else Set rngTrouve = .Columns(2).Cells.Find(Plagepièces.List(i), LookAt:=xlWhole).Offset(0, -1) ListBox3.AddItem rngTrouve.Offset(0, 1) For j = 1 To 3 ListBox3.List(ListBox3.ListCount - 1, j - 1) = rngTrouve.Offset(0, j) Next j ListBox3.List(ListBox3.ListCount - 1, 3) = CInt(ListBox3.List(ListBox3.ListCount - 1, 1)) - CInt(ListBox3.List(ListBox3.ListCount - 1, 2)) End If Next i End With End Sub
Code pour transformer la ListBox3 en multicolonnes :
A ajouter dans le Userform_initialize()
With ListBox3 .ColumnCount = 4 .ColumnWidths = "108;96;102;90" End With
Pijaku,
Je suis désolé, mais une seule listbox semble,après réflexion, comme tu l'as proposé, plus judicieux...
As-tu une idée du code si on divise Plagepièces en 5 ?
(Pièce/codification/stock/stockcritique/état)
Sachant qu'il va faloir rajouter une colonne Etat à notre onglet "Stock".
L'état pouvant être soit "Ok" si Stock > Stock critique ou "A commander" Si l'inverse...
Merci ,
DGVDR
Je suis désolé, mais une seule listbox semble,après réflexion, comme tu l'as proposé, plus judicieux...
As-tu une idée du code si on divise Plagepièces en 5 ?
(Pièce/codification/stock/stockcritique/état)
Sachant qu'il va faloir rajouter une colonne Etat à notre onglet "Stock".
L'état pouvant être soit "Ok" si Stock > Stock critique ou "A commander" Si l'inverse...
Merci ,
DGVDR