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 SubCordialement.
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
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
Re,
Un peu de lecture sur l'utilisation des TS en VBA
https://forum.excel-pratique.com/astuces/tableau-structure-instructions-vba-specifiques-a-cet-objet-...
A+
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 SubFaites 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 Subexemple 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

