Transférer Données listbox Multiselect (Userform) dans Base de données

Bonjour,

nouveau dans le monde VBA et sur ce forum, je fais appel à votre expertise.(Je suis encore sous XLS 2007)

J'ai créé un userform de saisie pour alimenter un tableau XLS.

En phase de finalisation, j'ai réalisé qu'il me fallait une multi-sélection sur une combobox que j'ai donc transformée en listbox.

Mon objectif :

1/Pouvoir sélectionner 1 ou plusieurs choix parmi une liste évolutive (mise donc sous forme de tableau dans ma feuille "LD")

2/Transférer ses choix dans une seule cellule (Titi, Tata, Toto)

Je bloque sur cette 2eme étape, voici où j'en suis :

=> CBOX initialement créée remplacée par Listbox1 puis paramétrée

=> Remplacement du nom CBOX par Listbox1 dans toutes les macro concernées

Lorsque je saisie mon userform, toutes les données s'affichent dans ma base de donnée à l'exception de la cellule concernée (Type de suivi)

Voici en mon fichier, 1000 mercis par avance à ceux qui pourront m'aider dans mon initiation.

14matrice-sylvie-v4.zip (342.36 Ko)

1) Supprimez des Références "Manquant : Microsoft Calendar 2007"

2) Dans la procédure Initialize de l'UF, remplacez "clear" par "0" (Feuil2.Range("B1:F1").Interior.ColorIndex = Clear)

3) essayez ceci :

Private Sub BTOSAVE_Click()
        Dim typeSuivi As String
        Dim i As Byte
    ' On mémorise les sélections        
        typeSuivi = ""
        For i = 0 To Me.ListBox1.ListCount - 1
            If Me.ListBox1.Selected(i) = True Then typeSuivi = typeSuivi & Me.ListBox1.List(i) & " | "
        Next i
        typeSuivi = Left(typeSuivi, Len(typeSuivi) - 3)

    'On teste que les contrôles ont bien été saisie        
        If Len(Me.TXTNOM) = 0 Then
            Me.lblmessage = "Veuillez saisir le nom de l'élève."
            Me.TXTNOM.SetFocus
        ElseIf Len(Me.TXTPRENOM) = 0 Then
            Me.lblmessage = "Veuillez saisir le prénom de l'élève."
            Me.TXTPRENOM.SetFocus
        ElseIf Len(Me.TXTNAISS) = 0 Then
            Me.lblmessage = "Veuillez saisir la date de naissance de l'élève."
            Me.TXTNAISS.SetFocus
        ElseIf Len(Me.CBOECOLE) = 0 Then
            Me.lblmessage = "Veuillez sélectionner l'école de rattachement de l'élève."
            Me.CBOECOLE.SetFocus
        ElseIf Len(Me.CBOCLASSE) = 0 Then
            Me.lblmessage = "Veuillez sélectionner la classe de l'élève."
            Me.CBOCLASSE.SetFocus
        ElseIf Len(Me.CBOENSEIGN) = 0 Then
            Me.lblmessage = "Veuillez sélectionner le nom de l'enseignant en charge de l'élève."
            Me.CBOENSEIGN.SetFocus
        ElseIf Len(Me.CBOCENTRE) = 0 Then
            Me.lblmessage = "Veuillez sélectionner le centre de soin."
            Me.CBOCENTRE.SetFocus
        ElseIf Len(Me.ListBox1) = 0 Then
            Me.lblmessage = "Veuillez sélectionner le type de suivi de l'élève."
            Me.ListBox1.SetFocus
        ElseIf Len(Me.TXTINTERV) = 0 Then
            Me.lblmessage = "Veuillez saisir le nom de l'intervenant."
            Me.TXTINTERV.SetFocus
        ElseIf Len(Me.CBOSANTE) = 0 Then
            Me.lblmessage = "Veuillez sélectionner le type de problème de santé."
            Me.CBOSANTE.SetFocus
        ElseIf Len(Me.CBOGROUPE) = 0 Then
            Me.lblmessage = "Veuillez sélectionner le numéro de groupe de suivi de l'élève."
            Me.CBOGROUPE.SetFocus
        ElseIf Len(Me.CBOMAINTIEN) = 0 Then
            Me.lblmessage = "Veuillez sélectionner la classe de maintien de l'élève."
            Me.CBOMAINTIEN.SetFocus
        Else       'Si tous les champs sont complet Alors on peut sauvegarder la source
            'On cherche la prochaine ligne vide de la source
            Feuil2.Activate
            Feuil2.Range("A1048576").End(xlUp).Offset(1, 0).Select
            'On affecter les données du formulaire dans la source
            If ActiveCell.Offset(-1, 0) = "CODE ENFANT" Then
                ActiveCell = 1
            Else
                ActiveCell = ActiveCell.Offset(-1, 0) + 1
            End If
            ActiveCell.Offset(0, 1) = Me.TXTNOM
            ActiveCell.Offset(0, 2) = Me.TXTPRENOM
            ActiveCell.Offset(0, 3) = CDate(Me.TXTNAISS)
            ActiveCell.Offset(0, 5) = Me.CBOECOLE
            ActiveCell.Offset(0, 6) = Me.CBOCLASSE
            ActiveCell.Offset(0, 7) = Me.CBOENSEIGN
            ActiveCell.Offset(0, 8) = Me.CBOCENTRE
            ActiveCell.Offset(0, 9) = typeSuivi                    ' La liste calculée au début **************************
            ActiveCell.Offset(0, 10) = Me.TXTINTERV
            ActiveCell.Offset(0, 11) = Me.CBOSANTE
            ActiveCell.Offset(0, 12) = Me.CBOGROUPE
            ActiveCell.Offset(0, 13) = Me.CBOMAINTIEN
            'On vide le formulaire pour une prochaine saisie
            Call BTO_ANNULER_Click
            Unload Me
            Feuil2.Activate
        End If
End Sub

Merci 1000 fois OPTIMIX pour ton retour express avec LA résolution à mon pb sur lequel j'ai passé 24 h!

Je vais pouvoir suivre le rugby en toute sérénité!

Impatient de suivre ma formation VBA pour pouvoir à terme essayer d'apporter mon aide sur ce forum.

Encore merci!

J'espère que l'essai inscrit puis refusé aux Samoa ne vous sera pas resté en travers de la gorge. Avant d'inscrire ce "19" fatidique, les organisateurs auraient dû attendre.

Votre code est quand même à revoir : essayez d'entrer un espace dans la zone de saisie "NOM", il sera valide car la longueur vaudra 1. Il vaudrait mieux écrire :

If Trim(TXTNOM) = "" then

au lieu de :

If Len(TXTNOM) = 0

De même, essayez d'entrer 24/12/199 dans la date de naissance, elle sera validée mais provoquera une erreur. Et malgré l'erreur, le code de l'enfant, ses nom et prénom seront enregistrés. C'est un problème de schéma fonctionnel : n'enregistrez rien tant que tout n'est pas au carré.

Bonne continuation.

Rechercher des sujets similaires à "transferer donnees listbox multiselect userform base"