Bonjour tout le monde,
Voilà, j’ai une application VB qui à été développé via le module Visual basic d’Excel (Excel 2003 soit la version 11). Dans cette application j’ai une feuille d’excel (Un devis) que je voudrais exporter/enregistrer dans un fichier excel. Pour permettre a mes clients de modifier ce devis si ils veulent rajouter des références ou autre. Dans cette feuille Excel il y a bien sur des formules, des objets graphiques, des colonnes qui ont des tailles différentes.
Je voudrais donc exporter cette feuille avec ça mise en pages, ces objets graphies et avec ses valeurs (Donc je ne veux pas conserver les formules mais uniquement les valeurs).
Ce qu’il faut s’avoir c’est que dans cette Application Visual Basic – Exel, il ne peut pas y avoir d’autre classeur Excel dans la même session (J’ai du mettre en place quelque que ligne de code pour permettre a mon application de s’exécuter seul dans une session unique d’Excel pour des raisons pratiques). Il est donc impossible de faire un simple copié collé de la feuille Excel en question, entre deux classeurs, puisqu’il n’y a aucun lien possible entre mon classeur Excel ou tourne mon application et éventuellement un autre classeur que l’on aurait ouvert pour copier la feuille Excel (ces deux classeurs ne pourront jamais être dans la même session).
J’ai des solutions mais qui me semble être plus du bidouillage que qu’elle que chose de propre. Je fais donc appel a vos lumières si vous avez des améliorations voir des méthodes différentes celles-ci sont les bienvenues
J’avais pensé à une autre méthode : Imprimer dans un fichier
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
30
31
32
33
34
35
36
37
38
39 Sub Save() Dim ApplicationName As String Dim ExcelVersion As Integer Dim ApplicationVersion As Integer ApplicationName = ThisWorkbook.Name 'je nettoie la feuille tampon qui va recevoir une copie de la feuille devis que je veux exporter Sheets("TempSheet").Select ActiveSheet.Shapes.SelectAll Selection.Delete ActiveSheet.Cells.Clear 'Je copie la la feuille qui contient mon devis Sheets("CHART-OFFER").Range("A1:H63").Copy Sheets("Tempsheet").Range("A1").Select 'Je test la version excel du client car la méthode paste special fonctionne differement celon la version d'excel 'Je copie d'abord la taille des colonnes de mon devis vers la feuille tampon If ApplicationVersion > ExcelVersion Then Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Else Selection.PasteSpecial Paste:=8, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If 'Ensuite je copie entierement mon devis vers la feuille tampon, ce qui me permet de copier mes objects graphique, mais les formules sont aussi copier, je vais donc les remplacer par leur valeurs grace a la ligne suivante Sheets("TempSheet").Paste Range("A1") 'Ensuite j'ecrase les formules precedement copier sur ma feuille tampon par les valeures de ma feuille devis Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'Je copie cette feuille tampon pour pouvoir l'exporter Sheets("TempSheet").Copy 'J'utilise la methode Save'as qui me permettra de choisir le nom du nouveau classeur excel qui contiendra ma feuille devis Application.Dialogs(xlDialogSaveAs).Show 'Je retourne sur mon application Windows(ApplicationName).Activate End sub
J’ai testé mais le fichier que j’obtiens en sortie je ne sais pas avec quoi l’ouvrir, donc ça ne me parait pas être une bopnne méthode mais je vous la mets quand même ça peut donner des idées
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 A) in Excel 97 : Sub prinTofile() Dim fileName As String fileName = "MyPint.prn" ChDrive "C" ChDir "C:\My Documents" If Dir(curdir & "\" & fileName) <> "" Then kill curdir & "\" & fileName SendKeys fileName & "{enter}" thisworkbook.Worksheets("Sheet1").PrintOut PrintToFile:=True End Sub B) in Excel 2000 : Time to switch over to Excel2000 where you can specify the filename as follows : thisworkbook.Worksheets("Sheet1").PrintOut PrintToFile:=True, Prtofilename:="C:\MyTest.prn"
Partager