Mise a jour Excel selon listbox choisie
Bonjour
j'ai un fichier avec 2 listbox (qui ont une feuille chacune)
j'aimerais lorsque je choisie une ligne de la listbox (l'une ou l'autre) pouvoir mettre à jour 2 informations
mon problème est que je ne sais pas comment gérer 2 listbox en même temps et renvoyer la bonne information dans la bonne feuille de la bonne ligne.
j'ai
"lstvoiture" et "lstcamion" nom des listbox
j'ai 2 textbox qui vont contenir la maj "txt_date_maj" et "txt_km_maj"
et un bouton "boutton_suivi_maj"
je ne demande pas le truc tout fait mais si vous avez des pistes ou tuto.
ceux que j'ai vu ne traitait qu'une list (ce que j'ai déjà dans un autre user)
merci
précision si quelqu'un regarde la txt_date_maj arrive en J1
txt_km_maj dans la colonne J de la feuille (de la list)de la ligne sélectionné dans la listbox
Salut tihneeos, le fil
On se retrouve....
Une solution parmi tant d'autres.
Nous allons travailler avec les .tag des listbox; Dans un premier temps tu renseignes le nom de ta feuille et l'index quand tu cliques dans la ListBox.
Private Sub lstcamion_Click()
Me.lstvoiture.Tag = ""
Me.lstcamion.Tag = "Feuille:=camions;Index:=" & lstcamion.ListIndex
Call label_noir
boutton_ajout.Visible = True
Dim numligne As Integer
Et pour la deuxième....
Private Sub lstvoiture_Click()
Me.lstcamion.Tag = ""
Me.lstvoiture.Tag = "Feuille:=voiture;Index:=" & lstvoiture.ListIndex
Call label_noir
boutton_ajout.Visible = True
Dim numligne As Integer/code]
Ensuite il ne te reste plus qu'a gérer tout ça sur le Click de ton bouton mise à jour...
[code]Private Sub boutton_suivi_maj_Click()
Dim controle As Control
'If txt_date_maj.Value = "" Or txt_km_maj.Value = "" Then Exit Sub
For Each controle In Me.Controls
If TypeOf controle Is MSForms.ListBox Then
If controle.Tag <> "" Then
With Worksheets(getTheValue(controle.Tag, "Feuille"))
.Range("J1").Value = Me.txt_date_maj
.Range("J" & controle.ListIndex + 2).Value = CDbl(Me.txt_km_maj)
End With
'...
'...
End If
End If
Next
End Sub
Et pour finir la fonction qui sert à isoler le nom de la feuille et l'index à mettre dans un module...
Public Function getTheValue(strTag As String, strValue As String) As String
On Error Resume Next
Dim workTb() As String
Dim Ele() As String
Dim myVariabs() As String
Dim i As Integer
workTb = Split(strTag, ";")
ReDim myVariabs(LBound(workTb) To UBound(workTb), 0 To 1)
For i = LBound(workTb) To UBound(workTb)
Ele = Split(workTb(i), ":=")
myVariabs(i, 0) = Ele(0)
If UBound(Ele) = 1 Then
myVariabs(i, 1) = Ele(1)
End If
Next
For i = LBound(myVariabs) To UBound(myVariabs)
If strValue = myVariabs(i, 0) Then
getTheValue = myVariabs(i, 1)
End If
Next
End Function
Voili,voilou....
Merci le travail de nuit...
Encore plus simple tu gères directement la propriété ControlSource de tes TextBox, et là tu as un rafraichissement automatique et plus besoin du bouton de validation.
Private Sub lstcamion_Click()
Me.txt_date_maj.ControlSource = "camions!J1"
Me.txt_km_maj.ControlSource = "camions!J" & lstcamion.ListIndex + 2
Call label_noir
boutton_ajout.Visible = True
Dim numligne As Integer
Private Sub lstvoiture_Click()
Me.txt_date_maj.ControlSource = "voitures!J1"
Me.txt_km_maj.ControlSource = "voitures!J" & lstvoiture.ListIndex + 2
Call label_noir
boutton_ajout.Visible = True
Dim numligne As Integer
Tu devrais même utiliser une sub pour gérer les ControlSource de tes objets ça simplifierait l'écriture, et tu pourrais ne garder que trois colonne dans tes ListBox
Sub InitControl(Sheet As String, Index As Long)
Me.txt_de.ControlSource = Sheet & "!D" & Index
Me.txt_ds.ControlSource = Sheet & "!E" & Index
'...
'...
End Sub
Et l'appel se ferais au niveau du Click de tes deux ListBox
Private Sub lstcamion_Click()
InitControl "camions", lstcamion.ListIndex + 2
Call label_noir
boutton_ajout.Visible = True
Dim numligne As Integer
Tu n'a plus à gérer la lecture et l’écriture dans tes TextBox tant que tu ne cliques pas sur une autre voiture ou camion.
ps : le fichier n'est pas à jour de la deuxième méthode il va faloir un peu d'huile de coude...
ok super merci pour ça je regarde ce que je peux faire avec.