récupérer les données dune listbox dans un userform Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 30 août 2017, 06:56

Bonjour,
j'ai fait une erreur à la base comme tu l'as d'ailleurs fait remarquer sur l'incrémentation de la première ligne de ma base de données qui ne doit pas être non vide .... mais vide
Désolé, je ne saisi pas ce que tu veux dire !
Ensuite j'ai des problèmes avec l'ajout des données quand bizaremment les 2 premiers items de ma listbox1 sont sélectionnés. Cela m'ouvre automatiquement les msgbox installé pour la modification. Idem qd je sélectionne le premier item de la listbox2.
Là, il faut que je regarde d'où vient le couac !
Enfin, pour modifier le données d'une seule list box je dois modifier les 2 et cela me génère des entrées supplémentaires dans ma bdd.
Je ne comprend pas, quand tu choisis de modifier un enregistrement, au préalable tu as chargé les valeurs de cet enregistrement dans le formulaire en cliquant dans la ComboBox et donc, les champs ne sont pas vides si ils étaient renseignés auparavant, tu n'as donc pas à re-saisir tous les champs puisqu'ils contiennent déjà des valeurs, il te faut juste modifier les champs concernés et les valeurs qui ne sont pas modifiées seront à nouveau inscrites dans la base !
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
X
Xavier22
Membre habitué
Membre habitué
Messages : 54
Inscrit le : 7 août 2017
Version d'Excel : 2016

Message par Xavier22 » 30 août 2017, 07:08

Bonjour,

Pour le premier point, il m est impossible de démarrer mon formulaire avec une bdd vierge. Le formulaire ne se lance "message d erreur". Il ne se lance que si A3 est renseigné. (Ex.:matricule =1).

Pour le reste je pense que le troisième couac est du au deuxième.

Merci et excellente journée à toi
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 30 août 2017, 08:18

Re,

Le mieux alors est de ne pas vider les champs, les valeurs inscrites seront remplacées le cas échéant. Il en est de même pour les messages, car dans les ListBox, si les valeurs sont surlignées, elles ne sont pas pour autant prises en compte dans la boucle si il n'y a pas eu de clic sur au moins l'un d'entre eux enfin, c'est ce que je pense et encore, c'est pas toujours vrai, je me pencherai dessus pour en connaître la raison.
Indentes ton code, il est plus simple à lire :
'ajouter le Nouvel intervenant à ma bdd
Private Sub CommandButton1_Click()

    Dim L As Long
    
    If MsgBox("Confirmez-vous l'insertion de ce nouveau contact ?", vbYesNo, "Demande de confirmation d'ajout") = vbNo Then Exit Sub
    
    
    L = Sheets("bdd").Range("A" & Rows.Count).End(xlUp).Row + 1 'Pour placer le nouvel enregistrement ? la premi?re ligne de tableau non vide
    
    Inscrire L

End Sub

'Pour le bouton Modifier
Private Sub CommandButton2_Click()

    Dim Ws As Worksheet
    Dim L As Long
    Dim C As Integer
    
    If MsgBox("Confirmez-vous la modification de ce contact ?", vbYesNo, "Demande de confirmation de modification") = vbNo Then Exit Sub
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    
    L = Me.ComboBox1.ListIndex + 3
    
    Inscrire L
    
End Sub

Sub Inscrire(L As Long)

    Dim Ws As Worksheet
    Dim I As Integer
    Dim mobilite As String
    Dim domaine As String
    Dim Tbl
    
    Range("A" & L).Value = CDbl(ComboBox1)
    Range("B" & L).Value = TextBox1
    Range("C" & L).Value = TextBox2
    Range("D" & L).Value = TextBox3
    Range("E" & L).Value = TextBox4
    Range("F" & L).Value = TextBox5
    Range("G" & L).Value = TextBox6
    Range("H" & L).Value = TextBox7
    Range("I" & L).Value = TextBox8
    
    Set Ws = Worksheets("bdd")
    
    'récup des choix
    For I = 0 To Me.ListBox1.ListCount - 1
    
        If Me.ListBox1.Selected(I) Then domaine = domaine & Me.ListBox1.List(I) & ";"
    
    Next
    
    'splite dans un tableau...
    Tbl = Split(domaine, ";")
    
    'et dispatche dans les colonnes
    With Ws
    
        .Range("j" & L).Value = domaine
        .Range(.Cells(L, 12), .Cells(L, 12 + UBound(Tbl))).Value = Tbl
    
    End With
    
    For I = 0 To Me.ListBox2.ListCount - 1
    
        If Me.ListBox2.Selected(I) Then mobilite = mobilite & Me.ListBox2.List(I) & ";"
    
    Next I
    
    Tbl = Split(mobilite, ";")
    
    With Ws
    
        .Range("K" & L).Value = mobilite
        .Range(.Cells(L, 15), .Cells(L, 15 + UBound(Tbl))).Value = Tbl
    
    End With
    
    Unload Me
    UserForm1.Show
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message