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


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’avais pensé à une autre méthode : Imprimer dans un fichier
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"