Insérer des lignes dans excel depuis vba d'access

I

informatixo

Guest
Bonjour,

J'ai trouvé une solution paliative à mon problème que je vais évoquer mais j'aimerais avoir l'opinion de quelqu'un pour savoir si ce que je voulais faire au début est réalisable.

Tout d'abord Windows XP PRO SP1 et access et excel 2003.

J'ai une base de données et je me sers d'une requête pour éditer un état sous acces.

J'ai réalisé une macro sous access qui me permet d'exporter les données de cette fameuse requête vers excel en utilisant la commande "copier vers" et en mettant "oui" à "Lancement auto." pour qu'il me laisse le classeur ouvert pour pouvoir voir le résultat directement dans access..

Je me retrouve donc avec un classeur excel "essai.xls" ouvert avec le contenu de ma requête sur la première feuille.

Ce que je voudrais faire, c'est insérer 2 lignes et écrire des informations sur les 4 premières cellules de la première ligne. C'est-à-dire, écrire "Période du :" en A1, la date de début obtenue par une requête SQL en A2, "au" en A3 et la date de fin obtenue par une requête SQL en A4.

Pour cela j'ai écris une deuxième commande dans la macro access à la suite de "copier vers" qui est "executer code" où j'exécute une fonction que j'ai créé depuis l'environnement VBA.

------------------------------------------------------------------------------------------------
Private Function insertiondansexcel()
' Macro excel.

' Permet d'insérer 2 lignes sur une feuille de tableur et d'y ajouter la période.

' Déclaration des variables nécessaires pour travailler sur le classeur excel.
Dim appexcel As Excel.Application
Dim classeurexcel As Excel.Workbook
Dim feuilleexcel As Excel.Worksheet

'je n'ai pas encore mis les requêtes SQL pour obtenir la date de début et de fin pour ce test.

'Ouverture de l'application
Set appexcel = CreateObject("Excel.Application")

'Ouverture d'un fichier Excel
Set classeurexcel = appexcel.Workbooks.Open("essai.xls")

'feuilleExcel correspond à la première feuille du fichier
Set feuilleexcel = classeurexcel.Worksheets(1)

feuilleexcel.Rows("1:1").Select
Selection.Insert Shift:=xlDown
Selection.Insert Shift:=xlDown
feuilleexcel.Range("A1").Value = "Période du :"
feuilleexcel.Range("C1").Value = "au"

End Function
------------------------------------------------------------------------------------------------

Le problème que j'ai quand j'exécute cette macro c'est que je n'arrive pas insérer les lignes et les données dans excel car le classeur excel est ouvert et donc la ligne de code "Set classeurexcel = appexcel.Workbooks.Open("essai.xls")" ne fonctionne pas et access me renvoie une erreur puisque le classeur excel est déjà ouvert.

J'ai donc essayé de mettre "Set classeurexcel = appexcel.ActiveWorkbook" à la place mais encore une malchance car le classeur est ouvert mais pas actif donc encore un message d'erreur.

Suite à celà j'ai donc trouvé comme solution paliative dont je parlais au départ, de mettre "non" à "Lancement auto." de "copier vers".

Ainsi l'export ce fait sans avoir le classeur ouvert et quand "executer code" vient s'exécuter ma fonction avec le "Set classeurexcel = appexcel.Workbooks.Open("essai.xls")" fonctionne.

Existe t-il un code me permettant de faire quelquechose du style "set classeurexcel = prend le classeur ouvert" ? Ou bien une commande qui me permette de redonner le focus au classeur pour pouvoir me servir du "Active Workbook" ?

Ainsi je pourrais laisser "Lancement auto." de "Copier vers" à "oui" et tout faire d'un seul coup sans être obliger de faire l'export vers excel en silence et rouvrir le classeur derrière pour insérer ces 2 lignes et cette période.

Voilà désolé pour la longueur et j'espère avoir été assez clair. Je remercie par avance toutes les personnes qui vont prêter attention à ce fil et qui pourront me venir en aide.

informatixo
 

Discussions similaires

Statistiques des forums

Discussions
312 178
Messages
2 085 982
Membres
103 079
dernier inscrit
sle