Connexion ADODB simultanées

nak

XLDnaute Occasionnel
Bonjour à tous,

J'utilise un fichier partagé avec un système d'enregistrement dans une base.xlsx

Malheureusement si plusieurs personnes enregistrent en même temps, j'ai une jolie erreur :(

J'ai vu que Excel ne gérait pas les verrouillages optimistes ou pessimistes. Exist-il quand même une parade, une fonction similaire ?

Merci

A+

Code:
Sub Fermer_et_sauvegarder()
Dim Cn As ADODB.Connection
Dim Cd As ADODB.Command
Dim Rst As ADODB.Recordset
Dim Fichier As String, NomFeuille As String
Dim VSearch As String, i As Integer, L As Integer
Dim DernLigne As Long

' Chemin d'accès de la base
Fichier = "D:\Base\Base_FI.xlsx"
'Nom de la feuille dans le classeur fermé
NomFeuille = "BaseFI"

' Créer la connexion
Set Cn = New ADODB.Connection
With Cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
    .Open
End With

Set Cd = New ADODB.Command
Cd.ActiveConnection = Cn

' Ouvrir 1000 lignes d'enegistrement
Cd.CommandText = "SELECT * FROM [BaseFI$A1:AA65000]"
Set Rst = New ADODB.Recordset
Rst.Open Cd, , adOpenKeyset, adLockOptimistic

' Boucler sur plusieurs lignes
DernLigne = Sheets("Fiche").Range("A" & Rows.Count).End(xlUp).Row
For L = 20 To DernLigne

' Chercher la valeur dans la BdD
Rst.Find "F1 = '" & Cells(L, 1) & "'", , adSearchForward, 1
    
' Si on se retrouve à la fin des enregistrement
' On en créé un nouveau
If Rst.EOF = True Then Rst.AddNew

    ' On rempli la ligne d'enregistrement avec les valeurs
    For i = 0 To 26 ' Mettre ici le nombre de champs -1
    Rst(i).Value = Sheets("Fiche").Cells(L, 1 + i)
    Next i

Next L

' Metre à jour la ligne d'enregistrement
Rst.Update
    
' Fermer la connexion
Cn.Close

' Effacer les variables objet
Set Cn = Nothing
Set Cd = Nothing
Set Rst = Nothing

End Sub
 

nak

XLDnaute Occasionnel
Re : Connexion ADODB simultanées

Bonsoir,

Alors personne n'a de solution pour mon problème ?

Voici la piste sur laquelle je suis en train de faire des tests.

Lorsque un utilisateur clique sur le bouton enregistrer :
- Je regarde si un fichier reserve.txt est présent dans un dossier temp.
- Si non :
- Je crée le fichier reserve.txt
- Je lance l'enregistrement avec ADODB
- Je temporise 2 secondes pour être certain que la connexion est fermée
- J'efface le fichier reserve.txt
- Si oui :
- MsgBox pour inviter l'utilisateur à relancer l'enregistrement

Que pensez vous de cette astuce ? Qui ressemble à du bricolage je vous l'accorde :)

A+
 

tototiti2008

XLDnaute Barbatruc
Re : Connexion ADODB simultanées

Bonsoir nak,

ça peut marcher, mais Excel n'est pas une base de données multi-utilisateur
Vouloir en faire une avec Excel, c'est peut-être se tromper d'outil, mais bon, ça peut marcher
Si j'ai compris, ton classeur est partagé ? Les expériences que j'ai eu sur classeur partagé et macros ne m'ont pas laissé de bons souvenirs, pas de soucis de ce côté là ?
Si tu utilises ton classeur partagé comme juste une base de données (celle à laquelle tu te connectes pour ajouter un enregistrement avec ADO), alors je te conseillerais de te connecter à une vraie base de données (même Access devrait pouvoir gérer une dizaine d'accès concurrents simultanés)
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa