1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| Option Explicit
Sub TransfertDATA()
MajXls ThisWorkbook.Sheets("PArametres").Range("B13") 'Appel Sub MajXls en lui fournissan la valeur de JI en paramettre ID
End Sub
Sub MajXls(ID As String) 'procédure personnalisé avec passage de parametre ID!
'On Error Resume Next
Application.ScreenUpdating = False
On Error GoTo ErrorUpdate
Dim Cn As New ADODB.Connection, Rs As New ADODB.Recordset, SQL As String, I As Integer, C As Integer 'Déclaration des variable
'je séléctionne tous les champs de la table Feuil1$ don ID est égale au parmetre passé à la procédure MajXls ThisWorkbook.Sheets("Feuil1").Range("J1")
SQL = "select * from [DATA$] WHERE ID=" & ID
With Cn '==>Open connection
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& ThisWorkbook.Sheets("Parametres").Range("B3") & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
Rs.Open SQL, Cn, 1, 3 'execution de la requête
With ThisWorkbook.Sheets("DATA")
I = SerchXls(.Range("BR:BR"), .Range("BR1"), ID, True) 'Recherche la lige de ID
If I = 0 Then Cn.Close: MsgBox "ID pas trouvé ! Bug": Exit Sub 'ID pas trouvé
'S'il s'agit d'une nouvelle ligne alors cération d'un nouvelle ligne'Rs.AddNew
If ThisWorkbook.Sheets("Parametres").Range("VerrouClient") = "New" Then
MsgBox "Le nouveau budget va être ajouté !", vbInformation, "Informations"
Rs.AddNew
End If
'
'If Rs.EOF Then Rs.AddNew: MsgBox "Les données du nouveau budget vont être sauvgardées !", vbInformation, "Informations" 'Si la requête ne touve pas ID alors nouvel enregistrement
For C = 0 To Rs.Fields.Count - 1
Rs.Fields(.Cells(1, "A").Offset(0, C).Value) = .Cells(I, "A").Offset(0, C).Value
'Rs.Fields(Trim(.Cells(1, "A").Offset(0, C).Value)) = .Cells(I, "A").Offset(0, C).Value 'charges les valeur dans le recordset
Next
Rs.Update 'met à jour le record set
End With
.Close
End With
'MsgBox "Les données du client ont bien été sauvgardées !", vbInformation, "Informations"
Exit Sub
ErrorUpdate:
On Error Resume Next
MsgBox "Les données n'ont pas pu être sauvgardées en raison d'un problème technique !", vbCritical, "Informations"
End Sub
Function SerchXls(Myrange As Range, MyCellule As Range, strRecherche, EntierCell As Boolean) As Integer '
On Error Resume Next
SerchXls = 0
SerchXls = Myrange.Cells.Find(What:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
:=Array(xlPart, xlWhole)(Abs(EntierCell)), SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=EntierCell).Row
If SerchXls <= MyCellule.Row Then SerchXls = 0
End Function |
Partager