Ecriture t mise en page de access vers excel

nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008 - 28 nov. 2007 à 10:32
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008 - 29 nov. 2007 à 10:44
Bonjour,

Je dois à partir d'une table Access, ajouter une feuille Excel dans un classeur précis.

Cela parait très simple mais on m'a posé des contraintes très particulières :
Tout
d'abord, pas d'export : il FAUT (et ce n'est pas moi qui l'écris en majuscule) qu'on fasse
une lecture "cellule à cellule" (donc en fait ligne par lignes avec un recordset, pas de probleme).
Il faut choisir le classeur (par une boite de commande, ca, j'y arrive) et y rajouter une feuille (là j'ai plus de mal).
Ensuite (le pire et de loin), le formatage Excel doit être fait à
partir d'Access : taille et couleur de police, bordures et couleur de cellule, fusion de
cellules, hauteur de lignes et largeur de colonnes, format des données.


Ca peut paraitre idiot mais les boss ont toujours raison.

Comment envoyer des données dans une nouvelle feuille d'un classeur donné
?
Quelles sont les commandes VBA Access pour formater des cellules Excel ?

6 réponses

nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
28 nov. 2007 à 11:45
Hop, je m'excuse d'avoir posté ca, ce sujet est resolu par la decouvrte d'un tuto magique :
http://cafeine.developpez.com/access/tutoriel/excel/
(qui renvoie vers un autre tuto tout aussi bien fait)

J'ai cherché 4 heures hier sans rien trouver et aujourd'hui, la recherche sous google de "CreateObject("Excel.Application")" vient de me sauver la mise.
Je n'ai pas encore testé mais ca ne saurait tarder.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 nov. 2007 à 11:49
Fais des recherches sur
Excel.Application

Tu devrais trouver plusieurs sources sur ce site

Et tu pourrais utiliser l'enregistreur de macro dans Excel, faire les différentes actions nécessaires puis regarder le code généré. En utilisant les objets Excel, tu devrais pouvoir faire la même chose à partir d'Access, mais en ajoutant le nom d'un objet devant la commande

ex:
sous Excel
Range("A1") = 10

sous Access
xlSheet. Range("A1") = 10

MPi²
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
28 nov. 2007 à 12:45
Merci, je vais essayer ca.
Je peux me passer de l'enregistreur, meme si c'est vrai que ca aide, (en depit du code degueu que ca genere)
et j'avais essayé ta methode mais tout ne marchait pas aussi bien. On m'a donné une vieille macro qui faisait le formatage mais je vais probablement refaire qqch de propre ... enfin ... autant qu'on me le permet
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
28 nov. 2007 à 17:51
Je croyais avoir trouvé deux tutos magiques ... c'est ce qui s'appelle vendre la peau de l'ours avant de l'avoir tué.
Je me suis battu contre cet ours ci toute la journée :
http://access.developpez.com/sources/?page= ole#ExportExcel

Je ne doute pas que le code soit juste mais meme quand je telecharge la BDD exemple, elle ne fonctionne pas chez moi. Le probleme ne se situe donc pas à ce niveau. Ce n'est pas on plus les references qui posent probleme, j'ai coché les memes que celles presentes ici :
http://cafeine.developpez.com/access/tutoriel/excel/#LV

Quelqu'un aurait il une idée quand a ce qu'il manque ?

Quelques pistes :
* si je code
Dim oAppExcel As Excel.Application
Dim oClasseur As Excel.Workbook
Dim oFeuille As Excel.Worksheet
Dim oCell As Excel.Range
alors
Set oAppExcel = CreateObject("Excel.Application")
me renvoie un type mismatch

* si je code
Dim oAppExcel As Object
Dim oClasseur As Object
Dim oFeuille As Object
Dim oCell As Object
alors la methode Cells n'est pas reconnue pour un worksheet (oFeuille, parce qu'il a quand meme comprit que c'en etait un) quand je veux utiliser oCell.value = 1

*si je ne code rien, cela passe bien mais les methodes sont bridées :
Range ("A1:C1"). Merge -> Merge n'est pas reconnu pour la classe Range

feuille.Range("A2:C2").Borders.Weight = xlMedium -> OK
feuille.Range("A2:C2").Borders(xlVertical).Weight = xlNone -> la methode border de la classe range a echoué

Je suis un peu paumé, je me doute que ca ne doit pourtant pas etre compliqué (peut etre meme un simple truc à cocher quelque part). Merci d'avance pour l'aide que vous pourrez m'apporter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 nov. 2007 à 00:11
Si tu utilises CreateObject, le programme sera plus facilement portable parce que tu ne crées pas de référence directe à une version en particulier.

Par contre, quand tu codes, c'est plus facile d'utiliser une référence quitte à l'enlever une fois que le programme fonctionne bien. La référence te permet d'utiliser l'Intellisense.

Essaie comme ceci, après avoir créé une référence à ta version d'Excel.
Dim oAppExcel As New Excel.Application
Dim oClasseur As Excel.Workbook
Dim oFeuille As Excel.Worksheet
Dim oCell As Excel.Rang          'pas vraiment nécessaire...

Et quand tu fermes ton programme n'oublie pas de fermer tous les objets correctement

MPi²
0
nsolal Messages postés 10 Date d'inscription mercredi 28 novembre 2007 Statut Membre Dernière intervention 28 mars 2008
29 nov. 2007 à 10:44
MPi, t'es un génie (ne te vexe pas : c'est peut être pas
volontaire). Le fait que tu ai de parlé de portabilité, m'a donné l'idée
d'essayer le code sur une autre machine.

Le code exemple marche nickel. Idem pour mon propre code.

Et là, le choc, la découverte de l'évidence, j'eureka que sur mon poste est
installé une vieille version d'Excel (95). Et si je fais "Executer
>> Excel", c'est celle-ci que m'ouvre windows.

Donc ma question se modifie grandement :

Sachant que je ne suis pas administrateur et que je ne peux donc pas tout
formater pour tout remettre au propre, que je ne peux même pas désinstaller
cette vieillerie ... dans quel fichier systeme dois-je fouiller pour changer
le chemin qui mène windows à Excel ?
0
Rejoignez-nous