Userform zone de liste multiselect

Bonjour à tous,

Travaillant sur excel et vba depuis très peu de temps, j'essaye de créer un formulaire de saisie pour faciliter mon travail.

Le formulaire créé dans l'onglet Menu, permet de saisir des données afin de pouvoir les ajouter dans l'onglet "programmation de sortie".

Cependant, l'ajout des données ne se fait entièrement, mes zones de liste avec plusieurs choix (nomprenomresid et nomprenompro en multiselect) ne s'envoient pas sur la base.

J'ai essayé pas mal de code et je ne trouve pas, ni sur les tutos en ligne.

Ce que je souhaite faire :

Entrer mes données de la selection multiple dans une seule cellule.

Exemple : Je selectionne 3 lettres, a b et c. après avoir cliqué sur ajout dans la base, il faut que ces données soient ecrites sous ce format --> a, b, c dans la colonne et la ligne correspondante.

Et en allant à la case du dessous si celle ci est remplie.

J'espère que j'ai réussi à être claire dans mes explications, je vous remercie d'avance pour votre aide.

Ci dessous mon code (bouton ajout dans la base) :

Private Sub Ajoutbase_Click()

'Ajout des données

Sheets("programmation de sortie").Activate
Range("C4").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell = Datedemande.Value
ActiveCell.Offset(0, 1).Value = Lieusortie
ActiveCell.Offset(0, 2).Value = Datesortie
ActiveCell.Offset(0, 3).Value = theme
ActiveCell.Offset(0, 4).Value = horaire
ActiveCell.Offset(0, 5).Value = ListeVehicule
ActiveCell.Offset(0, 6).Value = Repas
ActiveCell.Offset(0, 7).Value = nomprenomresid
ActiveCell.Offset(0, 8).Value = ComboBox3
ActiveCell.Offset(0, 9).Value = ComboBox1
ActiveCell.Offset(0, 10).Value = nomprenompro
ActiveCell.Offset(0, 11).Value = ComboBox2
ActiveCell.Offset(0, 12).Value = referentsortie
ActiveCell.Offset(0, 13).Value = modifhoraire
ActiveCell.Offset(0, 14).Value = commentaires

MsgBox " Votre demande a bien été enregistrée et est en attente de validation."

End Sub

Cordialement.

20fichier-test.xlsm (115.56 Ko)

Bonjour Sek4569

Sans regarder le fichier, une ListBox mulitselect doit être parcouru pour pouvoir inscrire les données sélectionnées

Et sur le net, ce n'est pas ce qui manque de savoir comment gérer
https://www.google.com/search?q=listbox+multiselect

A+

Bonjour,

En plus de ce que BrunoM45 vous écrit et en regardant votre fichier, je vois que vous utilisez des instruction Rowsources
Ce n'est pas la première fois que l'on écrit d'éviter cette instruction qui pose quelques fois des soucis. Il faut lui préférer la méthode ADDITEM ou LIST (encore plus avec les tableaux structurés d'ailleurs)

Concernant le code que vous postez, vous êtes en tableau structuré (nommé Tableau13), d'où la programmation est différente et, grand principe, vous ne devez jamais avoir de lignes sans données. ce que je vois dans votre feuille Programmation Sortie

Il y a donc des ajustements à faire dans votre projet et que voulez-vous dire par Je selectionne 3 lettres, a b et c.

Crdlt

Bonjour,

Tout d'abord merci pour vos réponses.

Je vais continuer de chercher pour me débloquer.

Concernant le "je sélectionne 3 lettres" je voulais dire que je sélectionne 3 données de la listebox (tableau13).

Cdlt,

Re

En premier supprimez toutes les lignes vides depuis la dernière ligne de votre feuille jusque la ligne 5. Du coup votre tableau structuré sera dimensionné de A5 à T5

Votre tableau devrait être comme ceci

image


Petite remarque
: j'ai constaté que vous aviez colorié en blanc les cellules en ligne 1 et 2. A ne jamais faire. c'est parfois le meilleur moyen d'alourdir un fichier. Utilisez la fonctionnalité excel dans le menu affichage et décochez la case "Quadrillage".
C'est ce que j'ai fait dans la vue que vous voyez ci-avant

Tenez nous au courant

J'ai modifié mon fichier comme demandé.

image

Ca m'affiche une erreur dans mon code : Selection.Offset(1, 0).Select

image

J'imagine que je dois reprendre entièrement le code comme évoqué dans vos premiers messages ?

re

J'imagine que je dois reprendre entièrement le code comme évoqué dans vos premiers messages ?

Non comme Bruno vous a suggéré dans son lien, le code change. Essayez comme ceci :

Private Sub Ajoutbase_Click()
'Ajout des données
Dim i As Byte
Dim lig As Integer
Dim npresid As String

With Worksheets("programmation de sortie").ListObjects("Tableau13")
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    Else: .ListRows.Add: lig = .ListRows.Count
    End If
    With .DataBodyRange
        .Item(lig, 3) = Datedemande.Value
        .Item(lig, 4) = Lieusortie.Value
        .Item(lig, 5) = Datesortie.Value
        .Item(lig, 6) = theme.Value
        .Item(lig, 7) = horaire.Value
        .Item(lig, 8) = ListeVehicule.Value
        .Item(lig, 9) = Repas.Value

        For i = 0 To nomprenomresid.ListCount - 1
            If nomprenomresid.Selected(i) Then
                If npresid = vbNullString Then
                    npresid = nomprenomresid.List(i)
                Else:
                    npresid = npresid & nomprenomresid.List(i)
                End If
            End If
        Next i

        .Item(lig, 10) = npresid

        .Item(lig, 11) = ComboBox3.Value
        .Item(lig, 12) = ComboBox1.Value

        For i = 0 To nomprenompro.ListCount - 1
            If nomprenompro.Selected(i) Then
                If nppro = vbNullString Then
                    nppro = nomprenompro.List(i)
                Else:
                    nppro = nppro & nomprenompro.List(i)
                End If
            End If
        Next i

        .Item(lig, 13) = nppro
        .Item(lig, 14) = ComboBox2.Value
        .Item(lig, 15) = referentsortie.Value
        .Item(lig, 16) = modifhoraire.Value
        .Item(lig, 17) = commentaires.Value

    End With
End With
MsgBox " Votre demande a bien été enregistrée et est en attente de validation."

End Sub

Faites un test car je n'ai pas contrôlé...

rem : Mais voyez tout de même le lien proposé par Bruno pour comprendre.

Reste qu'il faudrait aussi changer vos Rowsources...
Vous devez charger vos combo dans un code comme ceci et bien sûr supprimer les Rowssources

Private Sub UserForm_Initialize()
'reste à placer les instructions pour le chargement de vos combo ici
End Sub

exemple ici --> https://forum.excel-pratique.com/s/goto/1068343

Crdlt


edit : code modifié. Ajout de .list

Merci pour votre aide précieuse et le temps accordé.

J'ai un message d'erreur de type incompatibilité (13) sur ce code :

npresid = nomprenomresid(i)

Il doit me manquer une donnée quelque part.

Pour les combo j'ai compris. Merci encore pour vos explications, ça me permet de comprendre en même temps.

cdlt

Re

Oui désolé... je n'avais pas contrôlé comme je vous l'ai écrit

Le code dans mon post précédent est modifié, donc reprenez celui là

Pour vous expliquer, en fait l'instruction doit être comme ceci

npresid = nomprenomresid.list(i)

J'ai aussi remplacé les Listbox1 par le nom des listes "resid" et "pro"

Oubliez pas de supprimer vos rowssources...

Merci beaucoup, ça fonctionne.

Je vais maintenant changer mes rowsources.

cdlt

Bon week end

Ok pas de soucis

Si besoin dites moi

Une fois terminé pensez à -->

Crdlt

Rechercher des sujets similaires à "userform zone liste multiselect"