Passage d'une listbox à une autre.

Résolu/Fermé
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015 - 11 déc. 2013 à 15:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 12 déc. 2013 à 16:07
Bonjour,

Ci-dessous le fichier sur lequel je travailles.

https://www.cjoint.com/c/CLlpLnSGL39

Ma demande :

A partir de mon Userform "gestionstock"

J'aimerai que lorsque je clique sur les items de ma ListBox "Plagemachine"
Je vois apparaître les pièces associées à la machine dans la ListBox "Plagepièce"

La correspondance ce faisant par l'onglet "Stock", par une rechercheh peut être ?

Merci à vous,

DGVDR

A voir également:

8 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par pijaku le 11/12/2013 à 16:19
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 :


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

0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
11 déc. 2013 à 15:55
Mince , pardon !

Le mot de passe est "unzo"
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
11 déc. 2013 à 16:18
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.
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
11 déc. 2013 à 16:40
Oui c'est parfait !!

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) Then
Plagepièces.AddItem Sheets("Stock").Cells(i, 1)
Peux tu me l'expliquer sous formes de phrases ?

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
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
11 déc. 2013 à 16:45
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?
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
11 déc. 2013 à 16:49
Je ne comprends pas bien :

Cells(i, 1) -> ça définit quoi ?

Enfaite dans ma liste box , ce n'est pas la codification que je voudrais récupérer mais la pièce
, soit les informations de la colonne B.

La codification étant directement liée à la pièce...

Vois tu ?

Merci
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par pijaku le 12/12/2013 à 09:03
Je reprends tout le code ajouté (et j'avais fait une petite erreur, regarde ce fichier : http://cjoint.com/confirm.php?cjoint=CLlrbMgoasw)


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?
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
11 déc. 2013 à 17:28
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
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 11/12/2013 à 17:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
11 déc. 2013 à 17:22
Et bien lis tout le post et tu auras la réponse.

:0)))
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 12/12/2013 à 12:17
Salut vous 2,

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
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
12 déc. 2013 à 12:22
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
12 déc. 2013 à 12:38
-> 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????
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
12 déc. 2013 à 14:04
Pijaku,

Je n'aurais pas 30 000 lignes, mais peut être 150-200.

-> Non, le nom complet de la pièce sera toujours différent de sa codification.
Pas de possibilité de double saisie????

=> Quel est le fond de ta pensée ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
12 déc. 2013 à 14:08
=> Quel est le fond de ta pensée ?
Aucune. Le sujet est donc résolu.
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
Modifié par DGVDR le 12/12/2013 à 14:30
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
12 déc. 2013 à 14:37
Le seul intérêt, dans ce cas, d'avoir une ListBox, est d'y indiquer toutes les caractéristiques de toutes les pièces lors d'un clic dans la listbox PlageMachine...
Sinon, il eu mieux valu avoir 4 textbox tout simplement.
Tu dis
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
12 déc. 2013 à 14:44
Entendu, je vais voir pour faire ça.

Merci
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
12 déc. 2013 à 14:45
Ceci dit je ne sais pas comment faire venir telles infos à tels endroit d'une listbox...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 12/12/2013 à 15:06
Juste pour le fun, en conservant une listbox nommée ListBox3 :
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
0
DGVDR Messages postés 158 Date d'inscription vendredi 10 août 2012 Statut Membre Dernière intervention 20 juillet 2015
12 déc. 2013 à 15:16
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
0