Importation des données d'une listbox dans un tableau d'une feuille Excel

Bonjour le forum !

J'ai besoin d'aide pour l'importation de données d'une listbox dans un tableau de mon fichier excel.

Voici donc mon problème :

Après avoir rempli mon formulaire et cliquer sur le bouton ajouter , j'aimerais que les données qui se trouve dans ma list box (sous forme de ligne) aillent s'exporter dans ma base de données.

Je n'arrive seulement à exporter que la première ligne.

Pouvez-vous m'aider ?

Merci par avance

'Ajouter les formations dans la base de données
'*********
Private Sub btnajout_Click()

Sheets("Source").Activate
Range("A1").Select

Cells(Rows.Count, 1).End(xlUp).Offset(0, 0).Select 'on se positionne sur la dernière ligne non vide
Selection.Offset(1, 0).Select 'on se décale d'une ligne vers le bas

ActiveCell = txtnom.Value
ActiveCell.Offset(0, 1).Value = Txtprenom
ActiveCell.Offset(0, 2).Value = cbomachine
ActiveCell.Offset(0, 3).Value = cboniveau
ActiveCell.Offset(0, 4).Value = Txtdate
ActiveCell.Offset(0, 5).Value = cboformateur
ActiveCell.Offset(0, 6).Value = ListBoxRecap.List

Dim i As Integer
For i = 0 To ListBoxRecap.ListCount
If ListBoxRecap.Selected(i) = True Then
ActiveCell.Offset(0, 6).Value = ListBoxRecap.List
End If

Next

Dim j As Integer
Dim L As Integer 'L ligne

For j = 1 To ListBoxRecap.ListCount
If ListBoxRecap.ListCount > 1 Then

'ListBoxRecap.Selected(i) = False

ActiveCell.Offset(1 + L, 0).Value = txtnom
ActiveCell.Offset(1 + L, 1).Value = Txtprenom
ActiveCell.Offset(1 + L, 2).Value = cbomachine
ActiveCell.Offset(1 + L, 3).Value = cboniveau
ActiveCell.Offset(1 + L, 4).Value = Txtdate
ActiveCell.Offset(1 + L, 5).Value = cboformateur
ActiveCell.Offset(1 + L, 6).Value = ListBoxRecap.List

End If

Next

MsgBox "La formation a bien été ajouté à la base de données", vbOKOnly + vbInformation, "CONFIRMATION"

End Sub

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Bonjour et bienvenue sur le forum Excel-Pratique,

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum
- Quelques fonctionnalités du forum à connaître

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Pour votre demande

- Veillez à mettre votre profil à jour en mentionnant votre version Excel (2016, 2019, MAC 2019, ....)

Merci pour votre participation

Cordialement


Edit : Votre listboxrecap contient combien de colonnes ? Parce que je ne vois pas ce que vous voulez faire avec cette instruction --> ActiveCell.Offset(0, 6).Value = ListBoxRecap.List
Je verrais plutôt ceci : vous avez une liste d'item dans cette listbox avec une seule colonne, vous voulez reporter chaque item de la liste en colonne G. juste ?

Rebonsoir Dan

J'utilise Excel 2016

J'ai retravaillé mon fichier.

Private Sub btnajout_Click()

                Dim j As Integer
                Dim Nb As Integer 'Nombre de ligne dans ma listboxrecap
                Dim Ligne As Integer 'Ligne de mon tableau

                Nb = Me.ListBoxRecap.ListCount
                Ligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row + 1 'Numéro de ligne de la première cellule vide de la colonne 1 en partant du bas de la feuille

                For j = 0 To Nb
                If Me.ListBoxRecap.Selected(j) = True Then

                        With Sheets("Source")
                            .Cells(Ligne, 7) = Me.ListBoxRecap.List(j) 'numéro 7 correspond à la 7eme colonne de mon tableau

                        End With

                        Ligne = Ligne + 1

                End If

                Next j
                Feuil1.Activate

MsgBox "La formation a bien été ajouté à la base de données", vbOKOnly + vbInformation, "CONFIRMATION"

End Sub

Dans ma listBox, je n'ai qu'une seule colonne mais 1 ou plusieurs lignes suivants ce que je souhaite enregistrer dans ma base de données.

Mon problème ici qu'il faut que ma ligne soit sélectionner dans ma listbox pour pouvoir s'exporter dans la base de données. Je n'arrive pas à tout sélectionner pour pouvoir y importer d'un seul coup.

Je vous joins mon fichier

21excel-forum.xlsm (42.65 Ko)

Bonjour,

Merci du fichier dans lequel j'ai commencé à modifier deux codes. Toutefois pourriez vous m'expliquer comment cela fonctionne

Dans votre fichier j'ai 4 feuilles (certaines étaient masquées).
De ce que je comprends, vous complétez les textbox et combobox au dessus de l'USF.
Ensuite vous choisissez les compétences dans la listboxcomptence à gauche et que vous sélectionnez et placez dans la listboxrecap à droite.

Ma première question est de savoir ce que doit contenir la listboxcompetence à gauche à l'ouverture de l'USF

Rem : vous auriez pu n'avoir qu'une seule listbox et faire un choix multiple des compétences

Bonjour

Voici le fonctionnement:

- Je remplie les informations sur la personne (nom , prénom...)

- Je sélectionne le niveau (1er niveau / 2ème niveau) grâce auquel j'obtiens des compétences (listboxcompétences)

- Je sélectionne ensuite les compétences que la personne à acquises à l'aide du bouton >. Elles passent alors dans la listbox recap. En cas d'erreur de mauvaise sélection, je resélectionne la compétences dans la listboxrecap et la refait basculer dans la listbox compétences avec le bouton < .

- J'aimerais qu'ensuite en appuyant sur le bouton ajouter que les données de la listboxrecap s'exportent dans ma base de données "source"

S'il y a plusieurs lignes, il faut que lorsque l'exportation se fait. sur chaque ligne du tableau "source" on retrouve le nom prénom, niveau...

Pour répondre à votre question lorsque l'userform s'ouvre tout est vide.

Ok merci des infos

Je sélectionne le niveau (1er niveau / 2ème niveau) grâce auquel j'obtiens des compétences (listboxcompétences)

- Pourquoi n'avez-vous pas mis cela dans la feuille "Liste" ?

- Vos feuilles feuil1 et Source ont un mot de passe. Quel est-il ?

- Dans la combo niveau, est-ce que vous ne devriez pas plutôt avoir la liste des niveau en colonne A de la feuille Liste, plutôt que celle de la colonne E de la feuil1 ?
Si oui, dans la colonne B de la feuille 1 vous pourriez mettre les mêmes noms que ceux de la feuille Liste
Donc en colonne B de la feuil1 on aurait "Opérateur 1" au lieu de "Opérateur Niv1"
La colonne E de la feuil1 serait dans ce cas supprimée

Je vous ai transmis le mdp par message privé.

J'ai décidé d'y mettre dans une autre feuille, car les données des autres feuilles ne doivent pas être modifiés par la personne qui rempli le formulaire.

Concernant la liste des niveaux, le fichier est un peu brouillon... je m'en excuse. Je ne sais plus comment je l'ai programmé. Mais oui il y a des tableaux en trop

J'ai décidé d'y mettre dans une autre feuille, car les données des autres feuilles ne doivent pas être modifiés par la personne qui rempli le formulaire.

Concernant la liste des niveaux, le fichier est un peu brouillon... je m'en excuse. Je ne sais plus comment je l'ai programmé. Mais oui il y a des tableaux en trop

OK. Je vous propose de laisser "Opérateur 1" plutôt que "Opérateur niv 1". Bon pour vous cela ?

Ensuite supprimer la colonne E dans la feuil 1 ou alors supprimer la colonne A dans la feuille Liste mais ne garder qu'une seule liste des niveaux et dans une seule feuille

Oui, cela sera plus propre

OK mais quid de la deuxième question ?

Ce serait plutôt de supprimer la colonne A de la feuille Liste

Ok. Votre fichier en retour pour test et dans lequel j'ai modifié

- le code dans le moduleformation
- Supprimé les Rowssource (à éviter avec VBA !)
- les codes dans l'USF :
--- Initialize (au lieu de activate)
--- Private Sub Cmdenlever_Click
--- Private Sub Cmdajout_Click()
--- Private Sub btnajout_Click() --> Le code va ajouter dans la feuille Source une ligne par compétence

D'autres codes peuvent être adaptés aussi. Notamment peut être éviter le doublon dans la lisboxrecap

Bonne lecture

Repartez bien de ce fichier là pour vous éviter des erreurs

Pensez à cloturer le fil si tout est ok et terminé.

Crdlt

20excel-forum2.xlsm (43.62 Ko)

En testant, j'ai remarqué qu'il me faut au moins deux compétences (dans la listbox recap) pour pouvoir en insérer une. J'ai donc fait quelques modifs que j'ai marqué dans le code ci-dessous.

Private Sub btnajout_Click()

Dim i As Byte
Dim lig As Integer

For i = 0 To Me.ListBoxRecap.ListCount - 1 'Modif ici i=1 est devenu i=0

         With Feuil1.ListObjects("TableauSource")
                If .ListRows.Count = 0 Then
                    .ListRows.Add: lig = 1
                Else:       .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne

        End If
                    With .DataBodyRange
                    .Item(lig, 1) = txtnom.Value
                    .Item(lig, 2) = Txtprenom.Value
                    .Item(lig, 3) = cbomachine.Value
                    .Item(lig, 4) = cboniveau.Value
                    .Item(lig, 5) = Format(Txtdate.Value, "mm/dd/yyyy")
                    .Item(lig, 6) = cboformateur.Value
                    .Item(lig, 7) = Me.ListBoxRecap.List(i)

                End With

Feuil1.Activate

MsgBox "La formation a bien été ajouté à la base de données", vbOKOnly + vbInformation, "CONFIRMATION"
End With 'Rajout ici
Next i 'Déplacement du Next i
End Sub

Il me reste un dernier problème. Lors de ma saisie sur le formulaire, je peux avoir à saisir des compétences de différents niveaux. Malheureusement lors de l'importation, les niveaux ne "suivent" pas. Je me retrouve avec des compétences de différents niveaux mais inscrit sous le même niveau. Avez-vous une piste ?

J'ai donc fait quelques modifs que j'ai marqué dans le code ci-dessous.

Ok désolé.
Ce n'est pas bon là. Avec ce que vous avez fait, vous allez activer la feuil1 et le msgbox à chaque valeur de i

Vous devez mettre le END WITH et le NEXT i juste entre le premier END WITH et Feuil1.activate
Les 3 dernières lignes doivent être ceci :

Feuil1.Activate
MsgBox "La formation a bien été ajouté à la base de données", vbOKOnly + vbInformation, "CONFIRMATION"
End Sub

Malheureusement lors de l'importation, les niveaux ne "suivent" pas. Je me retrouve avec des compétences de différents niveaux mais inscrit sous le même niveau. Avez-vous une piste ?

Je n'ai pas compris ce point là quand vous écrivez "les niveaux ne suivent pas"


Edit : au début de la boucle FOR --> vous devez aussi changer i = 1 par i = 0

Ah oui merci !

Pour le i j'avais déjà changé

Bien vu pour le message de confirmation !

image

Lorsque j'exporte, "Utilisation de la marqueuse pneumatique" devrait être affectée sous "Opérateur 1".

Cela est normal car dans la programmation la valeur exportée dans le tableau est celle de la cboniveau.

Peut-être dois-je ne pas importer cette valeur et utiliser une fonction excel directement dans le tableau ?

Lorsque j'exporte, "Utilisation de la marqueuse pneumatique" devrait être affectée sous "Opérateur 1".

Heu... comment vous arrivez à faire cela puisque dans la feuil1 cette compétence est dans l'opérateur 1

Vous avec changé le niveau alors que la listboxrecap contient une compétence de l'opérateur 1 ??

Si oui, vous devez ajouter cette ligne au début dans la Private Sub cboniveau_Change()

Me.ListBoxRecap.Clear

De cette manière vous viderez les deux listbox si vous changez le niveau dans la cboniveau

Il me semblait l'avoir expliqué pourtant... Sûrement une erreur de ma part.

Je veux sélectionner des compétences de plusieurs niveaux dans la listboxrecap.

"Vous avez changé le niveau alors que la listboxrecap contient une compétence de l'opérateur 1 ??

Si oui, vous devez ajouter cette ligne au début dans la Private Sub cboniveau_Change()

Me.ListBoxRecap.Clear

De cette manière vous viderez les deux listbox si vous changez le niveau dans la cboniveau"

Exact, je veux changer le niveau mais en gardant les compétences déjà dans la listboxrecap.

Je ne suis pas sûr que Clear soit approprié ?

Je veux sélectionner des compétences de plusieurs niveaux dans la listboxrecap.

Ok mais là cela voudrait dire qu'une même personne peut avoir à la fois les compétences de deux niveaux opérateur ?

Voilà exactement

Rechercher des sujets similaires à "importation donnees listbox tableau feuille"