Bonjour,
Avec l'aide grandiose de rdurupt et de dysorthographie, j'ai crée une code vba qui me permet d 'éxécuter une requete paramatrée à partir d'une feuille Excel. (code ci dessous macro1).
Le soucis, c'est que je souhaiterais faire la même chose avec avec une requete création de table paramétrée ( avec comme parametre date debut et fin).
Lorsque je lance le code ci dessous avec ma requete création de table paramétrée, j'ai un message d'erreur qui s'affiche à la ligne 41
Set rs = Cm.Execute 'on recupere le résultat de la requête
le message d'erreur est le suivant:
Une requête action ne peut etre utilisée comme contenu
Merci d'avance pour votre aide
Sub Macro1()
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
| Dim sql As String
Dim GenereCSTRING As String
Dim Debut As Object
Dim Fin As Object
Dim Cm As Object 'Pour utiliser une requête parametrés il faut utiliser l'oblet Command!
Dim cn As Object 'Pour ce connecter à un base de données Access il faut utiliser l'objet Connection!
Dim rs As Object
Dim i As Integer
sql = "SELECT * FROM requete1" ' je détermine une requête sql qui pointe sur ta requête Acces."
Set cn = CreateObject("ADODB.Connection")
Set Cm = CreateObject("Adodb.Command")
GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=P:\chemin\BaseDonnee.accdb;;Persist Security Info=False" 'Je defini un chêne de texte qui contient les information de ma connection.
cn.Open GenereCSTRING 'J'ouvre ma connection.
Cm.CommandText = sql 'je passe ma requête à mon objet command
Cm.ActiveConnection = cn 'j'affecte ma connection à ma commande
Const adDate = 7 'defini le type de parametre
'c'est avec l'objet Parameter que je vais renseigner les parmetres de ma requête Access.
'Cellule où est stokcé la date cdate(format(ThisWorkbook.Sheets("Feuil1").range("B1").value,"yyyy-mm-dd hh:mm"))
Set Debut = CreateObject("ADODB.Parameter")
Debut.Name = "debut": Debut.Type = adDate: Debut.Value = CDate(Format(ThisWorkbook.Sheets("Feuil1").Range("B1").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Debut
Set Fin = CreateObject("ADODB.Parameter") 'c'est avec l'objet Parameter que je vais reseigner les parmetres de ma requête Access.
Fin.Name = "Fin": Fin.Type = adDate: Fin.Value = CDate(Format(ThisWorkbook.Sheets("Feuil1").Range("B2").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Fin
Set rs = Cm.Execute 'on recupere le résultat de la requête.
With ThisWorkbook.Sheets("Feuil2")
For i = 0 To rs.Fields.Count - 1 'On place le nom des champs sur la ligne 4 de ma feuille Excel
.Range("A1").Offset(0, i) = rs(i).Name 'ligne desactivé seulement aprés avoir été validé la 1ere fois
Next
.Range("A2").CopyFromRecordset rs 'la on copie le résultat de la requête!
End With
End Sub |
Partager