Bonjour à tous
Etant un débutant sur VBA, je demande de l'aide . Je dispose d'un tableau sur Excel que je veux importer sur Access, pour cela, j'ai codé un bouton sur un formulaire Access en vba.
Avec mon code actuel, j'arrive déjà à copier les valeurs du tableau et à les disposer dans les champs de ma table .
Mon problème est le suivant : j'aimerai appliquer une formule pour l'une des cellules de mon Excel et écrire le résultat dans un des champs de ma table. Lorsque j'exécute le code, vba m'affiche une erreur : Erreur d'exécution 13 : Incompatibilité de type au niveau de ma formule :
Worksheets("Feuil1").Range("I4").Formula = "=IFERROR(VALUE(IFERROR(MID(P3,SEARCH(V$1,P3)+7,SEARCH(" - ",P3,SEARCH(V$1,P3))-(SEARCH(V$1,P3)+7)),"")),"")"
Comment pour qu'il exécute la formule ?
Merci d'avance
voici mon code actuel:
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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| Private Sub Commande0_Click()
Dim appexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim r As Long
'Dim db As DAO.Database
'Dim SQL As String
' Connexion à la base Access
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=C:\xxxxxxxx.accdb"
' Ouvre un recordset
Set rs = New ADODB.Recordset
rs.Open "modifications", cn, adOpenKeyset, adLockOptimistic, adCmdTable
Set appexcel = CreateObject("Excel.Application")
appexcel.Visible = False
Set wbexcel = appexcel.Workbooks.Open("C:\xxxxxxxxxx")
appexcel.Sheets("Feuil1").Select
Worksheets("Feuil1").Range("I4").Formula = "=IFERROR(VALUE(IFERROR(MID(P3,SEARCH(V$1,P3)+7,SEARCH(" - ",P3,SEARCH(V$1,P3))-(SEARCH(V$1,P3)+7)),"")),"")"
' Virtualisation de la table
r = 4 ' Première ligne du tableau excel ----------------------------------------------------------------------------
For r = 4 To Selection.SpecialCells(xlCellTypeLastCell).Row
' Réalise la boucle jusqu'à la dernière cellule de la plage utilisé
Do Until Len(Range("G" & r).Formula) = 0
' Boucle tant que la cellule G n'est pas vide
With rs
.AddNew ' Crée un nouvel enregistrement
' Renseigne les valeurs des champs
.Fields("titi") = Range("G" & r).Value
.Fields("toto") = Range("H" & r).Value
.Fields("truc") = Range("I" & r).Value
.Update ' MAJ du nouvel enregistrement
End With
r = r + 1 ' Ligne suivante
Loop
'fin de la boucle Do until
Next r
'fin de la boucle For
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
'fermeture du fichier et de la connection à la BD
End Sub |
Partager