Bonsoir,
Je peux vous proposer une solution. A vous de voir si elle ne vous parait pas trop difficile à mettre en œuvre.
Etape 1 : créer une liaison entre votre classeur et celui du serveur contenant la BDD
1- ouvrir les 2 classeurs
2- copier avec liaison une cellule du classeur du serveur vers une cellule de votre classeur qui ne sera jamais modifiée.
Etape 2 : au niveau du code de votre formulaire
1- à l'initialisation du formulaire, ouvrir en lecture seule le classeur du serveur à partir de la liaison créée, via une 2ème instance d'Excel pour que cette ouverture reste invisible
2- à la fermeture du formulaire, clore la 2ème instance d'Excel, ce qui fermera automatiquement le classeur du serveur.
ci-dessous exemple de code :
Dim xl As Excel.Application
Dim classeur_BDD As Workbook
Private Sub UserForm_Initialize()
Dim liaisons()
'création 2ème instance Excel
Set xl = New Application
'récupération tableau liaisons Excel
liaisons = ThisWorkbook.LinkSources(xlExcelLinks)
'ouverture en lecture seule et assignation du classeur contenant la BDD
Set classeur_BDD = xl.Workbooks.Open(Filename:=liaisons(1), ReadOnly:=yes)
End Sub
Private Sub UserForm_Terminate()
'fermeture 2ème instance Excel
xl.Quit
End Sub
Private Sub TextBox_AfterUpdate()
Dim val_cherchée As Variant
val_cherchée = Application.VLookup(Me.TextBox.Value, classeur_BDD.Worksheets("BDD").Range("a:d"), 4, False)
If Application.IsText(val_cherchée) Or IsNumeric(val_cherchée) Then Me.Label.Caption = val_cherchée: Exit Sub
If CVErr(val_cherchée) = CVErr(xlErrNA) Then
TextBox.Value = Empty: TextBox.SetFocus
MsgBox "Vérifiez votre saisie"
Exit Sub
End If
End Sub