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

14suivi-v2.xlsm (48.40 Ko)

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.

Rechercher des sujets similaires à "mise jour listbox choisie"