Créer 3 colonnes par item de Listbox sélectionné, une contenant le nom de l
Bonjour à tous,
pour ceux qui étaient intervenus sur mon problème précédent https://forum.excel-pratique.com/viewtopic.php?f=2&t=124666&p=765674#p765674 ma direction a changé d'avis sur la façon de présenter mes données. Je dois maintenant avoir une colonne "Service concerné" par service coché dans ma listbox et les colonnes "Accord" et "Visa" allant avec. La colonne "Accord" contiendra la date d'accord du service concerné si accord il y a et simplement NON le cas contraire. La colonne "Visa" contiendra le nom de la personne responsable dudit service en guise de signature électronique.
Ma responsable veut quelque chose comme ceci :
Le service informatique m'a donné une piste à explorer mais j'avoue ne pas comprendre comment faire :
"Le plus simple et le plus efficace est de prévoir à l’avance les colonnes services.
La liste de services étant fixe, il suffit de créer les colonnes correspondantes pour chaque service (Services concernés, Accord, Visa) et ensuite en fonction de la coche dans le formulaire, on va remplir les bonnes colonnes.
Dans la boucle qui parcours les valeurs de la liste service, en fonction de l’ID et de la valeur TRUE, au lieu de concaténer le temp, il suffit de directement écrire les valeurs dans les colonnes correspondantes au lieu de la colonne 8."
Comment traduire tout ceci en langage non VBA pour que le profane que je suis comprenne ? Et surtout comment le traduire en langage VBA pour que mon formulaire comprenne et réalise mes souhaits puisque cette pauvre machine ne fait que ce qu'on lui demande . Ci-joint mon fichier actuel qui met toutes mes sélections de listbox en colonne 8 dans la ligne correspondant à un produit dans une case en les séparant par une virgule.
Je suppose que les colonnes "Accord" et "Visa" sont à remplir manuellement via textbox c'est actuellement ma seule "certitude".
Edit : Je pense aussi devoir créer toutes les colonnes dont j'ai besoin à la main et avancer à coup de Range et de Ifnot " " si il y a plusieurs services.
Je vous remercie par avance pour l'aide que vous pourrez m'apporter !
Bien à vous,
Erwan
Bonjour,
Option Compare Text
Dim nomtableau
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
For s = 1 To 4
Me("Service" & s).List = [Tableau2].Value
Next s
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, 4)
Me.Textbox5 = Range(nomtableau).Item(enreg, 5)
Me.Textbox6 = Range(nomtableau).Item(enreg, 6)
Me.Textbox7 = Range(nomtableau).Item(enreg, 7)
For i = 9 To 11
Me("TextBox" & i) = Range(nomtableau).Item(enreg, i)
Next i
'--- services
For s = 1 To 4
Me("service" & s) = Range(nomtableau).Item(enreg, 8 + (s - 1) * 3)
Me("accord" & s) = Range(nomtableau).Item(enreg, 9 + (s - 1) * 3)
Me("visa" & s) = Range(nomtableau).Item(enreg, 10 + (s - 1) * 3)
Next s
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
temp = Range(nomtableau).Item(enreg, 4): If IsDate(temp) Then temp = CDate(temp)
Range(nomtableau).Item(enreg, 4) = temp
temp = Range(nomtableau).Item(enreg, 5): If IsDate(temp) Then temp = CDate(temp)
Range(nomtableau).Item(enreg, 5) = temp
Range(nomtableau).Item(enreg, 6) = Me.Textbox6
Range(nomtableau).Item(enreg, 7) = Me.Textbox7
Range(nomtableau).Item(enreg, 35) = Me.TextBox11
For i = 9 To 11
Range(nomtableau).Item(enreg, i) = Me("TextBox" & i)
Next i
'-- services
For s = 1 To 4
Range(nomtableau).Item(enreg, 8 + (s - 1) * 3) = Me("service" & s)
Range(nomtableau).Item(enreg, 9 + (s - 1) * 3) = Me("accord" & s)
Range(nomtableau).Item(enreg, 10 + (s - 1) * 3) = Me("visa" & s)
Next 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
Sub raz()
For i = 2 To 7
Me("TextBox" & i) = ""
Next i
For i = 9 To 11
Me("TextBox" & i) = ""
Next i
For s = 1 To 4
Me("service" & s) = ""
Me("accord" & s) = ""
Me("visa" & s) = ""
Next s
End SubBoisgontier