Ajouter une feuille dans fichier excel fermé en VBA(excel2003)

james1987 Messages postés 3 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 4 juin 2009 - 3 juin 2009 à 15:55
james1987 Messages postés 3 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 4 juin 2009 - 4 juin 2009 à 11:23
Bonjour,
Voici mon premier post sur le forum, avec un problème qui m'a bouffé à peu près 2 jours..... :/
Je m'explique.
Je suis en stage avec un projet de réalisation d'application avec Excel et VBA.
Je dois absolument rester sous Excel...
Donc j'ai un fichier qui sert à gérer mon appli, et d'autres fichiers Excel où je récupère des données, où j'en rentre, jusqu'ici tout va bien.
Seulement je veux insérer une feuille dans un fichier externe fermé.
J'ai essayé plusieurs codes sans succès, j'en ai un qui ne plante pas, c'est déjà ca, mais aucun résultat, la feuille n'est pas créée.
Voici le bout de code que j'utilise pour le moment.
Je rappel que je suis sous Excel 2003, sans projet de passage a 2007.

Dim ExcelCn As ADODB.Connection
Dim ExcelRst As ADODB.Recordset
Dim maBase As String, maFeuille As String, listeTable As String
Dim maTable As String, NomClasseur As String
Dim j As Integer
Dim Fld As ADODB.Field

'Classeur ou va être créée la nouvelle feuille
NomClasseur = "" & NameFichier & ""
'Nom de la nouvelle feuille Excel
maFeuille = "MaNouvelleFeuille"

'Connection au classeur Excel
Set ExcelCn = New ADODB.Connection
ExcelCn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &_
"Data Source=" & NomClasseur & _
";Extended Properties=Excel 8.0;"

'création nouvelle Feuille Excel
ExcelCn.Execute "create table " & maFeuille & ""

Set ExcelRst = Nothing
Set ExcelCn = Nothing

(NameFichier contient le chemin d'accès au fichier C:\mesdoc\blabla\fichier.xls)
Je ne veux pas ouvrir le fichier.xls, mais simplement créer une feuille dans celui ci.
Help please

3 réponses

steph064 Messages postés 90 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 10 juin 2009
3 juin 2009 à 17:09
Eh bien je me souviens que pour enregistrer les données d'une lisbox sous vb2005 il fallait ouvrir un fichier texte, écrire, et le refermer, mais on ne voyais rien. Ça doit pouvoir se faire avec ta feuille excel en vb6. Je ne peux pas t'aider plus dsl, quelqu'un d'autre de mieux avisé t'aidera j'espere.
Good luck
0
james1987 Messages postés 3 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 4 juin 2009
4 juin 2009 à 08:49
merci, mais ce n'est pas ce que je cherche^^
quand je dis que je veux créer une nouvelle feuille, c'est un nouvel onglet dans le classeur, pas écrire dedans ou paramétrer des champs.
0
james1987 Messages postés 3 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 4 juin 2009
4 juin 2009 à 11:23
j'ai contourné le problème, mais le code est sale, si jamais quelqu'un a une vraie solution permettant d'ajouter une feuille dans un classeur fermé, je suis tout ouïe.
Voici la solution que j'ai utilisé:

Private Sub btConnect_Click()
Dim i, j As Integer
'récupérer nom du fichier seulement, sans le chemin d'accès
nomfichier = Right(namefichier, Len(namefichier) - InStrRev(namefichier, ""))

'supprimer feuille si elle existe
On Error Resume Next
Application.DisplayAlerts = False
Sheets(txtNomFeuille.Value).Delete
On Error GoTo 0

'ajout d'une feuille dans le classeur actuel
ActiveWorkbook.Sheets.Add
'nommage de la feuille
ActiveSheet.Name = txtNomFeuille.Value
'copie du contenu de la feuille
Sheets(txtNomFeuille.Value).Copy

'on ouvre le fichier dans lequel on veut créer la feuille et copier le contenu
Workbooks.Open Filename:="" & namefichier & "", ReadOnly:=False
'on active le fichier
Windows("" & nomfichier & "").Activate
'on créé une feuille
ActiveWorkbook.Sheets.Add


'véification de l'existence d'une feuille du meme nom
j = Worksheets.Count
i = 1
Do Until j < i
If InStr(1, Worksheets(i).Name, txtNomFeuille.Value) = 1 Then
' suppression feuille si le nom est identique, après confirmation par l'utilisateur
If MsgBox("Une feuille de ce nom existe déjà, voulez vous la supprimer?", vbYesNo) = vbYes Then
Worksheets(i).Delete
j = j - 1
Else
Exit Sub
End If
Else
i = i + 1
End If
Loop

ActiveSheet.Name = txtNomFeuille.Value
Sheets(txtNomFeuille.Value).Select
Windows("" & nomfichier & "").Activate
ActiveSheet.Paste

'on ferme le nouveau classeur
ActiveWorkbook.Close SaveChanges:=True
'on ferme le classeur intermédiaire créé par l'application
ActiveWorkbook.Close
Windows("Classeur1.xls").Activate


'on supprime les alerte afin que cela soit transparent pour l'utilisateur
Application.DisplayAlerts = False
ActiveSheet.Delete
'on réactive enfin les alertes d'application
Application.DisplayAlerts = True

MsgBox ("Le tableau a été créé et insérer dans le fichier essai.xls")
txtNomFeuille = ""

End Sub


Je crée une feuille temporaire dans le classeur actif, je copie le contenu(futur contenu, genre tableau croisé) puis j'ouvre le classeur désiré, avec vérif de l'existence d'une feuille, puis je colle. fermeture avec sauvegarde, j'ai un fichier temporaire qui s'ouvre, je sais pas comment faire, je le ferme entre temps.
puis j'efface la feuille du fichier applicatif.
pas top mais ca marche
je préfèrerais quand meme pouvoir créer directement la feuille sans ouvrir
0
Rejoignez-nous