Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENREGISTRER UNE NOUVELLE SAISIE DANS UN COMBOBOX.


Information sur la source

Catégorie :Modules Source .NET ( DotNet ) Classé sous : combobox, liste, enregistrement, dataset, dataview Niveau : Débutant Date de création : 27/08/2006 Date de mise à jour : 27/08/2006 21:44:06 Vu / téléchargé: 11 982 / 4 258

Note :
5,5 / 10 - par 2 personnes
5,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Le sub contenu dans le module1 permet d'enregistrer dans une table (ici Access) une valeur entrée dans un combobox, tout en vérifiant que celle-ci n'existe pas déjà. Vous pouvez appeler ce sub sur tous les combobox ou vous souhaitez offrir à l'utilisateur la possibilité d'enregistrer une nouvelle valeur.

L'appel
CtrlEnregSaisieCbo(ByVal ChampCtrl As ComboBox, ByVal SqlFiltre As String)

ChampCtrl = Me.NomDuCombobox
SqlFiltre = "SELECT NomDeLaTable.NomDuChampRechercheEtDAjout, NomDeLaTable.AutresChamps FROM NomDeLaTable ORDER BY NomDeLaTable.NomDuChampATrier;"

 

Source

  • Imports System
  • Imports System.Data
  • Imports System.Data.OleDb
  • Module module1
  • Sub CtrlEnregSaisieCbo(ByVal ChampCtrl As ComboBox, ByVal SqlFiltre As String)
  • Dim Connection As New OleDb.OleDbConnection
  • Try
  • If ChampCtrl.Text <> "" Then
  • '' -> PARAMETRE DE CONNECTION
  • ' Connection
  • Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  • "Data Source =" & Application.StartupPath & "\Source\Voiture.mdb;"
  • '' -> EXTRACTION DU NOM DE LA TABLE ET DU NOM DU CHAMP DE RECHERCHE
  • ' Format de SqlFiltre : SELECT NomDeLaTable.NomDuChampRecherche, NomDeLaTable.AutresChamps FROM NomDeLaTable;"
  • Dim NomTable As String
  • Dim NomChamp As String
  • 'Recherche de la position du 1er espace
  • Dim PositionEspace As Integer
  • PositionEspace = SqlFiltre.IndexOf(" ")
  • 'Recherche de la position du point
  • Dim PositionPt As Integer
  • PositionPt = SqlFiltre.IndexOf(".")
  • 'Recherche de la position de FROM
  • Dim PositionVirg As Integer
  • PositionVirg = SqlFiltre.IndexOf(",")
  • 'Extraction du nom de la table
  • NomTable = SqlFiltre.Substring(PositionEspace + 1, PositionPt - PositionEspace - 1)
  • 'Extraction du nom du champ de la table
  • NomChamp = SqlFiltre.Substring((PositionPt + 1), PositionVirg - PositionPt - 1)
  • '' -> AJOUTER
  • ' DataAdapter, DataSet, DataTable, DataView
  • 'Connection
  • Connection.Open()
  • ' Création du DataAdapter, DataSet, DataTable, Création du DataView avec son filtre
  • Dim DtAdapter = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)
  • Dim DtSet As New DataSet
  • DtAdapter.Fill(DtSet, NomTable)
  • Dim DtTable As DataTable
  • DtTable = DtSet.Tables(NomTable)
  • Dim dtView As New DataView(DtTable)
  • dtView.RowFilter = NomChamp & " = '" & ChampCtrl.Text.Replace("'", "''") & "'"
  • ' Vérifier dans la table l'existance de la saisie de l'utilisateur
  • If dtView.Count = 0 Then
  • 'Création de la messagebox
  • Dim Message As String
  • Dim Titre As String
  • Dim Bouton As MessageBoxButtons
  • Dim Icone As MessageBoxIcon
  • Dim Resultat As String
  • Message = ChampCtrl.Text & " n'est pas enregistré." & _
  • vbCr & "Voulez-vous l'enregistrer ?"
  • Titre = "Sélection incorrecte"
  • Bouton = MessageBoxButtons.YesNo
  • Icone = MessageBoxIcon.Exclamation
  • Resultat = MessageBox.Show(Message, Titre, Bouton, Icone)
  • If Resultat = vbYes Then
  • '' -> ENREGISTREMENT DE LA VALEUR SAISIE
  • Dim NewLigne As DataRow
  • ' Création de la nouvelle ligne
  • NewLigne = DtSet.Tables(NomTable).NewRow
  • ' Remplir les champs
  • NewLigne(NomChamp) = ChampCtrl.Text
  • ' Ajout de la ligne à la table
  • DtSet.Tables(NomTable).Rows.Add(NewLigne)
  • Dim CmdBuild As OleDbCommandBuilder
  • CmdBuild = New OleDb.OleDbCommandBuilder(DtAdapter)
  • DtAdapter.InsertCommand = CmdBuild.GetInsertCommand()
  • DtAdapter.Update(DtSet, NomTable)
  • '' -> ACTUALISER LES DONNEES DE LA LISTE
  • ' Enregistrer la valeur saisie
  • Dim saisie As String
  • saisie = ChampCtrl.Text
  • ' Création du DataAdapter, DataSet
  • Dim DtAdapterActu = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)
  • Dim DtSetActu As New DataSet
  • DtAdapterActu.Fill(DtSetActu, NomTable)
  • ' Remplissage de la liste
  • ChampCtrl.DisplayMember = NomChamp
  • ChampCtrl.ValueMember = "ID_" & NomChamp
  • ChampCtrl.DataSource = DtSetActu.Tables(NomTable)
  • ChampCtrl.Refresh()
  • ChampCtrl.Text = saisie
  • 'CODE POUVANT ETRE SUPPRIME
  • '''''''''''''''''''''
  • Form1.txtInfos.Text = "Nom de la Table: " & NomTable & vbCrLf & _
  • "Nom du champ: " & NomChamp & vbCrLf & _
  • "Nom de la liste: " & ChampCtrl.Name & vbCrLf & _
  • "Valeur de la liste: " & ChampCtrl.Text & vbCrLf & _
  • "Index de la sélection: " & ChampCtrl.SelectedIndex & vbCrLf & _
  • "Valeur de la sélection: " & ChampCtrl.SelectedValue
  • ''''''''''''''''''''
  • Else
  • ChampCtrl.Text = ""
  • 'CODE POUVANT ETRE SUPPRIME
  • '''''''''''''''''''''
  • Form1.txtInfos.Text = ""
  • ''''''''''''''''''''
  • End If
  • End If
  • End If
  • Catch ex As Exception
  • 'Message d'erreur
  • MessageBox.Show(ex.ToString, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
  • Finally
  • 'Fermer la connection
  • Connection.Close()
  • End Try
  • End Sub
  • End Module
Imports System
Imports System.Data
Imports System.Data.OleDb

Module module1

    Sub CtrlEnregSaisieCbo(ByVal ChampCtrl As ComboBox, ByVal SqlFiltre As String)

        Dim Connection As New OleDb.OleDbConnection

        Try
            If ChampCtrl.Text <> "" Then

                '' -> PARAMETRE DE CONNECTION

                ' Connection
                Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                              "Data Source =" & Application.StartupPath & "\Source\Voiture.mdb;"

                '' -> EXTRACTION DU NOM DE LA TABLE ET DU NOM DU CHAMP DE RECHERCHE
                ' Format de SqlFiltre : SELECT NomDeLaTable.NomDuChampRecherche, NomDeLaTable.AutresChamps FROM NomDeLaTable;"

                Dim NomTable As String
                Dim NomChamp As String

                'Recherche de la position du 1er espace
                Dim PositionEspace As Integer
                PositionEspace = SqlFiltre.IndexOf(" ")
                'Recherche de la position du point
                Dim PositionPt As Integer
                PositionPt = SqlFiltre.IndexOf(".")
                'Recherche de la position de FROM
                Dim PositionVirg As Integer
                PositionVirg = SqlFiltre.IndexOf(",")

                'Extraction du nom de la table
                NomTable = SqlFiltre.Substring(PositionEspace + 1, PositionPt - PositionEspace - 1)
                'Extraction du nom du champ de la table
                NomChamp = SqlFiltre.Substring((PositionPt + 1), PositionVirg - PositionPt - 1)

                '' -> AJOUTER
                ' DataAdapter, DataSet, DataTable, DataView

                'Connection
                Connection.Open()

                ' Création du DataAdapter, DataSet, DataTable, Création du DataView avec son filtre
                Dim DtAdapter = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)

                Dim DtSet As New DataSet
                DtAdapter.Fill(DtSet, NomTable)

                Dim DtTable As DataTable
                DtTable = DtSet.Tables(NomTable)

                Dim dtView As New DataView(DtTable)
                dtView.RowFilter = NomChamp & " = '" & ChampCtrl.Text.Replace("'", "''") & "'"

                ' Vérifier dans la table l'existance de la saisie de l'utilisateur 
                If dtView.Count = 0 Then

                    'Création de la messagebox
                    Dim Message As String
                    Dim Titre As String
                    Dim Bouton As MessageBoxButtons
                    Dim Icone As MessageBoxIcon
                    Dim Resultat As String

                    Message = ChampCtrl.Text & " n'est pas enregistré." & _
                              vbCr & "Voulez-vous l'enregistrer ?"
                    Titre = "Sélection incorrecte"
                    Bouton = MessageBoxButtons.YesNo
                    Icone = MessageBoxIcon.Exclamation

                    Resultat = MessageBox.Show(Message, Titre, Bouton, Icone)

                    If Resultat = vbYes Then

                        '' -> ENREGISTREMENT DE LA VALEUR SAISIE

                        Dim NewLigne As DataRow
                        ' Création de la nouvelle ligne 
                        NewLigne = DtSet.Tables(NomTable).NewRow
                        ' Remplir les champs
                        NewLigne(NomChamp) = ChampCtrl.Text
                        ' Ajout de la ligne à la table
                        DtSet.Tables(NomTable).Rows.Add(NewLigne)

                        Dim CmdBuild As OleDbCommandBuilder
                        CmdBuild = New OleDb.OleDbCommandBuilder(DtAdapter)
                        DtAdapter.InsertCommand = CmdBuild.GetInsertCommand()
                        DtAdapter.Update(DtSet, NomTable)

                        '' -> ACTUALISER LES DONNEES DE LA LISTE

                        ' Enregistrer la valeur saisie
                        Dim saisie As String
                        saisie = ChampCtrl.Text

                        ' Création du DataAdapter, DataSet
                        Dim DtAdapterActu = New OleDb.OleDbDataAdapter(SqlFiltre, Connection)

                        Dim DtSetActu As New DataSet
                        DtAdapterActu.Fill(DtSetActu, NomTable)

                        ' Remplissage de la liste
                        ChampCtrl.DisplayMember = NomChamp
                        ChampCtrl.ValueMember = "ID_" & NomChamp
                        ChampCtrl.DataSource = DtSetActu.Tables(NomTable)
                        ChampCtrl.Refresh()
                        ChampCtrl.Text = saisie

                        'CODE POUVANT ETRE SUPPRIME
                        '''''''''''''''''''''
                        Form1.txtInfos.Text = "Nom de la Table: " & NomTable & vbCrLf & _
                                              "Nom du champ: " & NomChamp & vbCrLf & _
                                              "Nom de la liste: " & ChampCtrl.Name & vbCrLf & _
                                              "Valeur de la liste: " & ChampCtrl.Text & vbCrLf & _
                                              "Index de la sélection: " & ChampCtrl.SelectedIndex & vbCrLf & _
                                              "Valeur de la sélection: " & ChampCtrl.SelectedValue


                        ''''''''''''''''''''

                    Else
                        ChampCtrl.Text = ""

                        'CODE POUVANT ETRE SUPPRIME
                        '''''''''''''''''''''
                        Form1.txtInfos.Text = ""
                        ''''''''''''''''''''

                    End If

                End If

            End If

        Catch ex As Exception
            'Message d'erreur
            MessageBox.Show(ex.ToString, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally
            'Fermer la connection
            Connection.Close()

        End Try

    End Sub

End Module

Conclusion

Je débute en VB, soyez indulgent :-P.... Je prend quand même les critiques, les modifis, les erreurs, et les solutions, ... bref tout ce qui fait avancer.

Merci à VbFrance, ou j'ai pu trouver des sources afin de comprendre certains fonctionnements de VB.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

27 août 2006 20:05:32 :
Aucune j'ai fermé mon navigateur trop vite... Le balo ! ;-)
27 août 2006 21:44:08 :
La première version ne comportait qu'une seule table avec qu'une liste. J'ai ajouté deux autres tables avec les listes qui vont avec.

Commentaires et avis

signaler à un administrateur
Commentaire de KFECREM le 23/09/2006 09:17:04

Bonjour.
Je suis débutant sur ACCESS (1an1/2)et je suis interressé par ce programme, j'ai décompressé le zip mais à l'ouverture de la base "voiture" rien ne se passe.
Alors question totalement stupiude.
Que dois-faire de tout les fichiers ?
Dans l'attente d'un sérieux coup de main je vous souhaite la bonne journée.
Merci
KFECREM

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

items des comboBox sous VBA [ par pearl ] j'ai initialisé mon form en ajoutant une liste d'item à mon combo.N'ayant pas la liste complete de tous les items, je voudrais que quand l'utilisateur Combo Box [ par riton ] Tout le monde connaît le contrôle COMBOBOX !!!Pour faire défiler la liste on utilise la souris ou la touche F4. Mais si on veut faire défiler la liste Important:Liste deroulante dans un Combobox [ par banton_two ] Messieurs, je vous prie d'accepter mes excuses pour ce petit derangement mais je voudrais savoir si vous vous y connaissez bien an VBA et si vous seri aidez-moi! trier des données dans une liste [ par sony22 ] A partir d'un ou plusieurs chiffres tapées dans un textbox(départements)trier dans une colonne les données correspondantes et afficher dans un combobo Rien dans la liste de la Combobox [ par Nico ] N'y arrivant pas avec une Datacombo, j'essaie maintenant avec une Combobox mais j'obtiens ce message: Variable objet non définie... Kess'ki manque ? L data et combobox,forcer le positionnemnt d'un data [ par skaferadics ] comment faire pour forcer le placment d'un data?c'est a dire le faire aller sur l'enregistrement 5 par exemple!en fait j'ai une combobox avec une list ComboBox modifiable [ par Patrik ] Salut,Je suis à la recherche du code source me permettant De gérer le contrôle ComboBox ayant une liste (propiété List ; ou résultat d'une requête SQL Liste de choix [ par filou ] Salut le forum,Je veux faire une petite liste de selection non modifiable par l'utilisateur (saisie d'informations) J'ai essayé avec une combobox ! Av mettre un combobox avec une liste de fichiers [ par chico79 ] Bonjour,comment on fais si on veut créer un combobox avec la liste des fichiers qu'on a dans un répertoire qu'on précise auparavntexemple :un combobox Fichier->Tableau->ComboBox [ par iubito ] Bonjour @ tous !Voilà g 1 truc à faire que je sais bien faire en Access (base de données+formulaire+VBA) mais pas en VB pur.J'ai dans un fichier .txt


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,749 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.