Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 2011
-
25 août 2005 à 09:54
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 2011
-
6 oct. 2005 à 16:51
Bonjour,
J'ai donc un petit soucis lors de ce transfert de fichier, à partir d'ACCESS.
Je sais le faire à partir d'Excel, mais cette solution ne me satisfait pas pour ce que je veux faire.
A partir d'Access donc ...
J'utilise la commande TransferSpreadsheet pour transférer la requête dans mon fichier Excel
Mon petit bout de code :
DoCmd.TransferSpreadsheet acExport, , "Requête", Chemin, False
où Chemin est une variable contenant le chemin du fichier Excel.
Cela marche bien dans le sens où effectivement, je transfère ma requête dans le fichier Excel, mais elle se met dans une nouvelle feuille ayant pour nom le nom de la requête.
Ma question est :
Connaitriez-vous un moyen de transférer ma requête dans la feuille et à partir de la cellule de mon choix (par exemple, sur la Feuille 2, cellule "B5:D15") ?
Je préfèrerai éviter la solution consistant à créer une boucle et alimenter les cellules une par une, mon programme finira sans doute par être assez lourd et je voudrais qu'il s'exécute quand même assez rapidement. Et comme j'ai des dizaines de requêtes à exporter de cette façon.
P.S. : J'ai utilisé le moteur de recherche sur la fonction TransferSpreadsheet.
Aucune réponse ne convient.
Cette solution revient à chaque fois :
Comme il est expliqué dans l'aide en ligne :
"Lorsque vous effectuez une exportation vers une feuille de calcul, vous devez laisser cet argument vierge. Si vous tapez une plage, l'exportation échoue."
D'avance merci,
Molenn
A voir également:
Transfert d'une requête ACCESS dans une feuille Excel
thtdlx2
Messages postés17Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention 3 juillet 2008 25 août 2005 à 22:38
J'ai peut-être une solution pour toi. Le principe est de transférer tes données avec TransferSpraedSheet dans une feuille temporaire, d'ouvrir le fichier ou tu veux mettre tes données au final, et de copier, à partir de la feuille temporaire les données exactement où tu le souhaites dans la feuille finale. Pour ceci, j'exécute le code dans Access, mais en agissant sur les feuilles Excel.
Voici ce que le code donne :
Sub Transfert_Excel()
Dim myXL_Connection As Object
Dim myXL_export As Object
Dim myXL_final As Object
Dim nom_requete As String
Dim erreur_liaison As Boolean
Dim i, j As Integer
Dim blnRunning As Boolean
Dim Fichier_ouvert As Boolean
Dim nb_fichier_Excel_ouverts As Integer
Dim adresse_fichier_exportation As String
Dim adresse_fichier_final As String
On Error GoTo Gestion_Erreur
nom_requete = "Q_2_Arbre_des_Causes_Sous_Rubrique"
adresse_fichier_exportation = "C:\Temp\Donnees.xls" 'le nom du fichier vers lequel sera transféré les données temporairement
adresse_fichier_final = "C:\Temp\perso.xls" 'le nom du fichier dans lequel tu souhaites mettre les données au final
erreur_liaison = False
Connection:
Set myXL_Connection = GetObject(, "Excel.Application")
While myXL_Connection Is Nothing
GoTo Connection
Wend
If Err.Number <> 0 Then
Set myXL_Connection = CreateObject("Excel.Application")
blnRunning = False
Else
blnRunning = True
End If
'Il y a probablement des étapes redondantes, mais des fois, sans cette structure, ça ne marche pas
'et je n'ai jamais trouvé pourquoi
nb_fichier_Excel_ouverts = myXL_Connection.Workbooks.Count
For i = 1 To nb_fichier_Excel_ouverts
If myXL_Connection.Workbooks(i).Name = nom_du_fichier(adresse_fichier_exportation) Then
Fichier_ouvert = True
End If
Next i
'Si le fichier temporaire est déjà ouvert, on le ferme.
If Fichier_ouvert = True Then
myXL_Connection.Workbooks(nom_du_fichier(adresse_fichier_exportation)).Close SaveChanges:=False
End If
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, nom_requete, adresse_fichier_exportation
'J'ouvre les 2 fichiers dans Excel
myXL_Connection.Workbooks.Open adresse_fichier_exportation
myXL_Connection.Workbooks.Open adresse_fichier_final
'Je me connecte aux 2 fichiers sous Excel
Set myXL_export = myXL_Connection.Workbooks(nom_du_fichier(adresse_fichier_exportation)).Sheets(1)
Set myXL_final = myXL_Connection.Workbooks(nom_du_fichier(adresse_fichier_final)).Sheets(1)
'Je copie la plage qui m'intéresse (cela implique que tu connaisses le nombre de ligne et de colonne, mais je pense que tu sais faire ?
'si c'est un nombre qui peut changer, tu peux aussi les trouver à partir d'Excel en faisant quelquechose du style
' nb_ligne = myXL_export.End(xlDown).Row ou un truc comme ça (je ne connais pas la syntaxe exacte))
myXL_export.Range(myXL_export.Cells(1, 1), myXL_export.Cells(11, 2)).Copy
'copie des données à la ligne 3 et à la colonne 4 : tu met ce que tu veux.
myXL_Connection.Workbooks(nom_du_fichier(adresse_fichier_final)).Sheets(1).Cells(3, 4).Select
myXL_final.Paste
Gestion_Erreur:
If Err.Number <> 0 And Err.Number <> 20 Then
If Err.Number = 429 Then
If blnRunning = False Then
Shell "Excel.exe"
blnRunning = True
erreur_liaison = True
Resume Next
Else
Resume Next
End If
Else
MsgBox Err.Number & " " & Err.Description
End If
End If
End Sub
thtdlx2
Messages postés17Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention 3 juillet 2008 25 août 2005 à 22:40
j'ai oublié de joindre le code de la fonction
Function nom_du_fichier(chemin As String) As String
Dim i As Integer
i = Len(chemin)
While Mid(chemin, i, 1) <> ""
i = i - 1
Wend
nom_du_fichier = Mid(chemin, i + 1)
End Function
et j'ai oublié de préciser (je ne l'ai pas fait) que tu peux ensuite supprimer le fichier temporaire du disque dur.
Et le nom de requête "Q_2_Arbre_des_Causes_Sous_Rubrique" est à changer naturellement.
thtdlx2
Messages postés17Date d'inscriptiondimanche 10 octobre 2004StatutMembreDernière intervention 3 juillet 2008 31 août 2005 à 22:48
Si tu vois des simplifications à faire dans mon code, ça m'interesse ! J'ai appris sur le tas, et je dois avoir plein de mauvaises habitudes et de lacunes. C'est l'occasion d'apprendre tous les jours de nouvelles choses !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 6 oct. 2005 à 16:51
Hop, il m'a fallu du temps, mais bon, les congés sont passé par là aussi ^^
En fait, je n'ai gardé que l'idée, à savoir que je suis apssée par une feuille temporaire dans mon fichier Excel.
Pour me simplifier le tout, j'écris la requête directement dans ACCES.
Je l'exporte dans mon fichier Excel (pas besoin de l'ouvrir) avec un
DoCmd.TransferSpreadsheet acExport, , "Nom Requête", "Chemin fichier", False
J'ouvre ensuite mon fichier Excel, toujours à partir d'ACCESS :
Set FichierExcel = CreateObject("Excel.Application")
FichierExcel.Visible = True
Set FichierExcelAsset = FichierExcel.Workbooks.Open(Chemin)
Et je travaille mon fichier EXCEL, toujours à partir d'ACCESS, en utilisant des commandes du type :
Temp = FichierExcel.Worksheets("Nom Requête").Range("A1").Value
FichierExcel.Worksheets("Feuil1").Range("B3").Value = Transfert
Donc, je valide la réponse même si je ne l'ai pas utilisée en tant que telle ^^