XL 2016 Formulaire avec plusieurs listbox différentes

Sparfell29

XLDnaute Nouveau
Bonjour à tous,
lors de ma dernière visite j'avais reçu de l'aide pour mettre au point un formulaire d'arrêt de commercialisation comportant 9 listbox identiques devant être reportées toutes les 3 colonnes à partir de la colonne H. https://www.excel-downloads.com/thr...-dune-colonne-precise.20031953/#post-20234909
Je dois aujourd'hui essayer de l'adapter pour en faire un formulaire de Non conformité (Voir image). J'en suis actuellement à la première page j'ai donc 6 listbox différentes pour un total de 9 listbox (les 4 risques différents sont côtés avec les mêmes 4 indices : acceptable, modéré, élevé, inacceptable).
J'essaye de faire comme dans le formulaire précédent et de charger mes listbox avec les listes contenues dans ma deuxième feuille intitulée "Listes" lors de l'initialisation du formulaire. A mon grand damne je n'ai visiblement rien compris à ce qui a été fait avec moi précédemment et je n'arrive pas à faire l'adaptation seul.

VB:
Option Compare Text
Dim nomtableau

'Initialisation du formulaire
Private Sub UserForm1_Initialize()
  nomtableau = "produit"
  Me.enreg = Range(nomtableau).Rows.Count + 1
  Me.ID = Application.Max(Range(nomtableau).Columns(1)) + 1
  Tbl = Range(nomtableau).Value
  Tri Tbl, LBound(Tbl), UBound(Tbl), 1
  Me.Recherche.List = Tbl
  For s = 1 To 4
    Me("Criticité" & s).List = [Tableau3].Value
  Next s
End Sub

J'ai tenté comme ça mais ça ne fonctionne pas, pareil avec Array(), je n'ai pas tenté avec Rowsource car je voudrais vraiment comprendre ce truc d'appel de donnée d'une liste du tableur pour remplir une listbox à l'initialisation.
Enfin bref au secours quoi :( !
Je vous ai mis en PJ mon travail actuel, celui de la dernière fois et une capture d'écran du formulaire sous format Word pour donner une idée globale de "la chose"
Je vous remercie par avance de l'aide que vous voudrez bien m'apporter !
Cordialement,
Erwan.
 

Pièces jointes

  • Formulaire de NC 2.xlsm
    26.4 KB · Affichages: 18
  • Formulaire de NC.PNG
    Formulaire de NC.PNG
    88.6 KB · Affichages: 23
  • Arret de commercialisation Forum.xlsm
    171.1 KB · Affichages: 15

Sparfell29

XLDnaute Nouveau
1032707

Les voila les vilaines ! Une seule colonne pour toutes. J'ai réussi avec la fonction Rowsource à afficher les items de la liste "Criticité"dans ma listbox correspondante mais je voudrais bien comprendre pourquoi ça ne marche pas avec Array ou Range comme dans mon précédent travail
 

Sparfell29

XLDnaute Nouveau
Si jamais je ne réponds plus c'est que je n'avais plus accès au pc/internet et non pas par impolitesse. Auquel cas je pourrai de nouveau te lire plus tard dans la nuit ou demain matin en arrivant sur le lieu de mon stage (pour lequel je dois réaliser ce travail). Merci de l'attention que tu portes à mon problème =D
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Classique.
Pour ne pas vous tromper, utilisez les listes déroulantes qui surmontent la fenêtre de code pour implanter les procédures évènements.
(Mais même frappé manuellement, il est curieux que l'erreur ne soit jamais commise pour un évènement Activate d'objet Worksheet Feuil1 par exemple: ils mettent bien Worksheet_Activate et non Feuil1_Activate. Mais pour un UserForm, sous prétexte qu'il s'appelle UserForm1, ils mettent UserForm1_Initialize au lieu de UserForm_Initialize)
 

ChTi160

XLDnaute Barbatruc
Bonjour Sparfell29
Bonjour Bernard ,le Forum
comme indiqué par Dranreb ,pourquoi des ListBox ?
en passant par des ComboBox on obtient bien (comme dans l'exemple)le résulat !
VB:
Private Sub UserForm_Initialize()
  nomtableau = "produit"
  Tbl = Range(nomtableau).Value
  For s = 1 To 4
     Me.Controls("ComboBox" & s).List = [Tableau3].Value
  Next s
End Sub
ou alors un truc du genre :
VB:
Private Sub UserForm_Initialize()
    With Me
     .ComboBox1.List = [Tableau3].Value
      .ComboBox2.List = [Tableau4].Value
       .ComboBox3.List = [Tableau5].Value
        .ComboBox4.List = [Tableau6].Value
         .ComboBox5.List = [Tableau7].Value
    End With
End Sub
jean marie
 

Sparfell29

XLDnaute Nouveau
Effectivement je suis très peu observateur et j'avais pris mes combobox du travail précédent pour des listbox. Je m'en suis rendu compte il y quelques minutes avant de te lire :oops::rolleyes:. Et j'arrive au meme résultat que toi :D:D ! J'ai cannibalisé et adapté mon code précédent et je suis sûr ça actuellement
VB:
Option Compare Text
Dim nomtableau


'Initialisation du formulaire
Private Sub UserForm_Initialize()
nomtableau = "produit"
  Me.enreg = Range(nomtableau).Rows.Count + 1
  Me.Id = Application.Max(Range(nomtableau).Columns(1)) + 1
  Tbl = Range(nomtableau).Value
  Tri Tbl, LBound(Tbl), UBound(Tbl), 1
  Me.Recherche.List = Tbl
    Criticité.RowSource = "Listes!A2:A5"
 
  ' déprotection de la feuille "Produits" à éditer
  Sheets("Produits").Unprotect Password:="iknowvba"
End Sub
Private Sub Recherche_Change()
  Me.enreg = Application.Match(Val(Me.Recherche), Range(nomtableau).Columns(1), 0)
  Me.Id = Me.Recherche
  For i = 2 To 3
    Me("TextBox" & i) = Range(nomtableau).Item(enreg, i)
  Next i
 
  Me.Textbox4 = Range(nomtableau).Item(enreg, 5)
  Me.Textbox5 = Range(nomtableau).Item(enreg, 6)
  Me.Textbox6 = Range(nomtableau).Item(enreg, 7)
  Me.Textbox7 = Range(nomtableau).Item(enreg, 8)
  Me.TextBox8 = Range(nomtableau).Item(enreg, 9)
  Me.TextBox9 = Range(nomtableau).Item(enreg, 10)
  Me.TextBox10 = Range(nomtableau).Item(enreg, 11)
  Me.TextBox11 = Range(nomtableau).Item(enreg, 4)
End Sub
Private Sub B_valid_Click()
  enreg = Me.enreg
  Range(nomtableau).Item(enreg, 1) = Val(Me.Id)
  For i = 2 To 3
    Range(nomtableau).Item(enreg, i) = Me("TextBox" & i)
  Next i
  Range(nomtableau).Item(enreg, 4) = Me.TextBox11
  Range(nomtableau).Item(enreg, 5) = Me.Textbox4
  Range(nomtableau).Item(enreg, 6) = Me.Textbox5
  Range(nomtableau).Item(enreg, 7) = Me.Textbox6
  Range(nomtableau).Item(enreg, 8) = Me.Textbox7
  Range(nomtableau).Item(enreg, 9) = Me.TextBox8
  Range(nomtableau).Item(enreg, 10) = Me.TextBox9
  Range(nomtableau).Item(enreg, 11) = Me.TextBox10

  Range(nomtableau).Item(enreg, 12) = Me("criticité" & s)

   raz
   UserForm_Initialize
End Sub
Private Sub B_sup_Click()
  If MsgBox("Etes vous sûr de supprimer " & Me.enreg & "?", vbYesNo) = vbYes Then
     Range(nomtableau).Rows(Me.enreg).Delete
     Me.Recherche.List = Range(nomtableau).Value
  End If
End Sub
Private Sub B_ajout_Click()
  raz
  Me.Id = Application.Max(Range(nomtableau).Columns(1)) + 1
  Me.enreg = Range(nomtableau).Rows.Count + 1
End Sub
'remise à zéro du formulaire
Sub raz()
  For i = 2 To 8
     Me("TextBox" & i) = ""
  Next i
 
End Sub
Private Sub B_suivant_Click()
 If Me.Recherche.ListIndex < Me.Recherche.ListCount - 1 Then
   Me.Recherche.ListIndex = Me.Recherche.ListIndex + 1
  End If
End Sub
Private Sub b_précédent_Click()
  If Me.Recherche.ListIndex > 0 Then
    Me.Recherche.ListIndex = Me.Recherche.ListIndex - 1
  End If
End Sub
Private Sub bouton_quitter_Click()
Unload Me
' Reprotection de la feuille "Produits" à éditer
Sheets("Produits").Protect Password:="iknowvba"
End Sub
Sub Tri(a, gauc, droi, colTri) ' Quick sort
  ref = a((gauc + droi) \ 2, colTri)
  g = gauc: d = droi
  Do
    Do While a(g, colTri) < ref: g = g + 1: Loop
    Do While ref < a(d, colTri): d = d - 1: Loop
    If g <= d Then
       For c = LBound(a, 2) To UBound(a, 2)
          temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
       Next
       g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi, colTri)
   If gauc < d Then Call Tri(a, gauc, d, colTri)
End Sub
 

Sparfell29

XLDnaute Nouveau
Super top ca fonctionne !
Code:
Private Sub UserForm_Initialize()
  nomtableau = "produit"
  Tbl = Range(nomtableau).Value
  For s = 1 To 4
     Me.Controls("ComboBox" & s).List = [Tableau3].Value
  Next s
End Sub

Ca va me servir pour les 4 combobox qui doivent afficher les mêmes items je pense. Ca boucle entre 1 et 4 pour éviter d'avoir à tout retaper à la main c'est ça ?
 

Discussions similaires