Bonjour à tous,
Quelques lignes pour resituer le problème :
Je travaille sous Access2007 et j'ai développé un petit applicatif Access qui génère un Fichier Excel servant de source à un publipostage.
Cet outil est utilisé sur d'autres postes qui n'ont pas forcement Access (utilisation de runtime) ou qui ont des Access en version différentes (2010/2013). L'outil est accessible sur un réseau commun.
Au départ j'avais activé la librairie "Microsoft Excel 12.0 Object Library" dans les références. Sauf que lorsque certains utilisateurs l'ouvraient, cette référence était modifiée (passait en 14.0) et du coup le code plantait lorsqu'un utilisateur avec runtime essayait de la réutiliser.
J'ai cherché un peu sur le net et j'ai vu qu'il était possible de désactiver ces bibliothèques à la fermeture et de les réactiver à l'ouverture de l'application comme ça elle s'activait toujours avec la version de l'Excel installé sur le poste de l'utilisateur, par contre, cela ne semble pas fonctionner pour les utilisateurs du runtime (je pense que le runtime empêche la modification des références et donc la réactivation de la référence Excel).
J'ai fait de nouvelles recherches et il était proposé d'utiliser des déclarations "tardives".
J'ai désactivé la bibliothèque Excel et j'ai fait des déclarations "Object" affectée plus tard dans mon code, mais je suis de nouveau bloqué sur un collage spécial valeur qui ne passe pas :
Cette méthode est-elle liée à la bibliothèque que j'ai désactivée et n'est-elle donc pas utilisable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Dim appExcel As Object Dim wbExcel As Object Dim wsExcel As Object Dim wsExcel2 As Object ... Set appExcel = CreateObject("Excel.Application") Set wbExcel = appExcel.Workbooks.Add ... Set wsExcel2 = wbExcel.Worksheets(2) wbExcel.Worksheets(2).Name = "Courrier" ... For i = 1 To cptcourrier - 1 wsExcel2.Cells(i + 1, 2).Formula = "=if(G" & i + 1 & ">1,""Consorts "" & VLOOKUP(A" & i + 1 & ",questionnaire!B:S,18,FALSE),VLOOKUP(A" & i + 1 & ",questionnaire!B:S,7,False))" wsExcel2.Cells(i + 1, 3).Formula = "=if(VLOOKUP(A" & i + 1 & ",questionnaire!B:S,9,False)=0,"""",VLOOKUP(A" & i + 1 & ",questionnaire!B:S,9,False))" wsExcel2.Cells(i + 1, 4).Formula = "=if(VLOOKUP(A" & i + 1 & ",questionnaire!B:S,10,False)=0,"""",VLOOKUP(A" & i + 1 & ",questionnaire!B:S,10,False))" wsExcel2.Cells(i + 1, 5).Formula = "=VLOOKUP(A" & i + 1 & ",questionnaire!B:S,11,False)" wsExcel2.Cells(i + 1, 6).Formula = "=VLOOKUP(A" & i + 1 & ",questionnaire!B:S,16,False)" wsExcel2.Cells(i + 1, 8).Formula = "=if(left(B" & i + 1 & ",2)=""M "",""Monsieur"",if(left(B" & i + 1 & ",4)=""MME "",""Madame"",if(left(B" & i + 1 & ",4)=""MLE "",""Mademoiselle"",""Madame, Monsieur"")))" ... Next i With wsExcel2.Range("A1:H" & cptcourrier) '(avant j'avais mis "A:H" mais celà ne marchait pas non plus) .Copy .Pastespecial Paste:=xlPasteValues 'ca plante ici End With ...
D'autre part si vous avez d'autres pistes pour ces problèmes de compatibilité entre version/runtime, ... cela m’intéresse.
Cordialement
Partager