Update avec userform entre Excel et ms access

bonjour

vous pouvez m'aider de corrige le code de update entre user form excel et base de donne access

merci

'_____________________________________________________

Private Sub cmdUpdate_Click()

end sub

Bonjour,

Pourrais-tu envoyer la base Access, même vide, pour avoir la structure des tables ?

Bouben

BONJOUR

MERCI

9excel-et-acces.rar (120.41 Ko)

BONJOUR

VOILA MES FICHIERS EXCEL ET ACCESS

MERCI

Bonsoir,

Avec la base, c'est bien mieux

Avant la résolution du problème, plusieurs points revus.

La déclaration des variables au bon endroit est importante, notion de portée (privé, publique).

Les recordsets sont propres à chaque utilisation.

Dans ta version, on a un recordset déclaré en public pour tout le monde, et on utilise ce même recordset à différents endroits, pour différents besoins. On ne sait plus ce qu'il y a dans le recordset, et s'il ouvert, fermé.

Il est préférable de déclarer un recordset dans chaque procédure (donc privé)

Dim oRS As Recordset

de l'instancier au début

Set oRS = New Recordset

de le fermer et le désinstancier à la fin

oRS.Close
 Set oRS = Nothing

A l'inverse, la connexion à la base de données peut être globale (comme déjà fait)

Public nConnection As New ADODB.Connection     'Db

mais il n'est pas utile d'ouvrir systématiquement la connexion avant l'exécution d'une requête et de refermer la connexion juste après.

La connexion peut être ouverte une fois pour toute, au début (par exemple à l'initialisation du formulaire)

Public Sub Connect()

Et refermée à la fin (par exemple lors de la fermeture du formulaire)

Public Sub Deconnect()

Dans la procédure de déconnexion à la base, il n'y a donc pas lieu de refermer le recordset

nRecordset.Close

En complément, une bonne indentation du code facilite toujours la lecture

Enfin, lorsqu'un bloc important d'instructions est dupliqué à différents endroits, il est préconisé de l'extérioriser dans une procédure ou fonction dédiée.

Exemple pour le contrôle de saisie, identique pour la création et la modification, création d'une fonction appelée aux 2 endroits :

Private Function SaisieOK() As Boolean

En prenant en compte ces différents points, le problème se résout plus facilement.

Tu trouveras en PJ une nouvelle version, à tester.

Il y a beaucoup de modifications, mais tu t'y retrouveras sans problème, j'en suis certain

Bonne soirée

Bouben

BONJOUR

MERCI BIEN

CHAPEAU

BONJOUR

Je reviens ver vous.

j' ai coincé pendant la réalisation d'un listbox

merci

bonjour

Private Sub Cmd_Afficher_Click()
 Dim sqlrech As String 'sql
    Dim Recset As Recordset
    Dim gend As String
    Dim table
    'Call Reset_Form
    Application.EnableCancelKey = xlDisabled
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False

    sqlrech = "Select * from tblEmployee where [Employee Name]  like  '%" & txtEmpID.Text & "%'"
     'sqlrech = "SELECT * FROM tblEmployee WHERE [Employee Name]  Like '" & Me.txtEmpID.Text & " *' ORDER BY [Employee Prenom]"
    Set Recset = New ADODB.Recordset

    Recset.Open Source:=sqlrech, ActiveConnection:=nConnection, CursorType:=adOpenKeyset, LockType:=adLockOptimistic

' On s'assure qu'il y a des enregistrements à récupérer ...

    If Recset.EOF Then
        MsgBox "Aucun enregistrement !", vbExclamation
    Else
        With Recset
        Usf_search.ListBox1.Clear
        Usf_search.ListBox1.ColumnCount = 10
        Usf_search.ListBox1.ColumnWidths = "40;60;60;60;60;60;60;60;60;160"
        Usf_search.ListBox1.AddItem
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 0) = Recset.Fields("Employee ID").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Recset.Fields("Employee Name").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Fields("Employee Prenom").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Recset.Fields("DOB").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Recset.Fields("Gender").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Recset.Fields("Qualification").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Recset.Fields("Mobile Number").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Recset.Fields("Email ID").Value
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Recset.Fields("Address").Value
        End With

    End If

    Recset.Close
    Set Recset = Nothing

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
 '   MsgBox " Les Données Soumises Avec Succès ! "
    Exit Sub

ErrorHandler:

    MsgBox Err.Description & " " & Err.Number, vbOKOnly + vbCritical, "Database Error"
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

 'Ferme le jeu d'enregistrements s'il est toujours ouvert ...
nConnection.Close

End Sub
Rechercher des sujets similaires à "update userform entre access"