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 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

8 réponses

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
     
    Mince , pardon !

    Le mot de passe est "unzo"
    0
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  4. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
    2. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    3. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
    4. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    5. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Et bien lis tout le post et tu auras la réponse.

    :0)))
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  8. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      -> 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
    2. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      => Quel est le fond de ta pensée ?
      Aucune. Le sujet est donc résolu.
      0
  9. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      Entendu, je vais voir pour faire ça.

      Merci
      0
    3. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      Ceci dit je ne sais pas comment faire venir telles infos à tels endroit d'une listbox...
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    5. DGVDR Messages postés 158 Date d'inscription   Statut Membre Dernière intervention  
       
      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