Création fichier en vba

yenaac9476 Messages postés 5 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 13 décembre 2011 - 12 déc. 2011 à 15:17
yenaac9476 Messages postés 5 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 13 décembre 2011 - 13 déc. 2011 à 09:47
Bonjour tout le monde,

La question a sûrement déjà été posée mais je ne la trouve pas.

Pour créer un fichier excelle en VBA, j'utilise la fonction Workbooks.Add.
Ca me crée bien un fichier mais mon problème est que ça me crée des classeurs n'importe où sur mon réseau (bien que j'utilise la fonction ActiveWorkbook.SaveAs ensuite).

Est ce qu'il y a un moyen d'indiquer le chemin où le créer dans la fonction Workbooks.Add ?

Merci.

4 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
12 déc. 2011 à 16:09
Salut

Dans le .Add, non, mais dans le .SaveAs oui

La méthode .Add crée une instance de classeur :
Dim oNouveauClasseur As Workbook 
Set oNouveauClasseur = Workbooks.Add(...
Captures-tu cette instance, comme ici, ou fais-tu juste un .Add "en l'air" ?
Cela t'éviterais d'avoir à utiliser le ActiveWorkbook qui ne sera pas forcément ce classeur là (si qqun est au clavier)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
yenaac9476 Messages postés 5 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 13 décembre 2011
12 déc. 2011 à 17:27
Merci pour ta réponse, voici ce que je faisais:

Workbooks.Add
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets("Feuil2").Delete
ActiveWorkbook.Worksheets("Feuil3").Delete
Application.DisplayAlerts = True
Sheets("Feuil1").Name = "toto"
ActiveWorkbook.SaveAs Filename:=Chemin & Year(Date) & MoisDate & JourDate & "." & NumFichier(1) & ".xls"
Set Feuiltoto = Workbooks(Year(Date) & MoisDate & JourDate & "." & NumFichier(1) & ".xls").Worksheets("toto")


Mon problème est que ça me créée des fichiers Classeurs1... n'importe où.
Je vais essayer ta réponse.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
12 déc. 2011 à 23:15
Ce n'est pas le code que tu nous montres qui a créé des fichiers "Classeur1".
Penchez-toi sur le nom

Non, ma solution n'a rien à voir avec ton problème.
Je te donnais juste la bonne méthode :
Dim oNouveauClasseur As Workbook 
Set oNouveauClasseur = Workbooks.Add
With oNouveauClasseur 
' Et si le nouveau classeur n'a pas 3 feuilles ?
    Application.DisplayAlerts = False
    .Worksheets("Feuil2").Delete
    .Worksheets("Feuil3").Delete
    Application.DisplayAlerts = True
    .Sheets("Feuil1").Name = "toto"
' Que vaut "Chemin" ?
' NumFichier(1), MoisDate et JourDate : c'est quoi, quel type de donnée, que valent ces variables ?
    .SaveAs Filename:=Chemin & Year(Date) & MoisDate & JourDate & _
                      "." & NumFichier(1) & ".xls"
' La ligne suivante est bizarre :
' Où "Feuiltoto" est-il dimensionné ?
' Non    Set Feuiltoto = Workbooks(Year(Date) & MoisDate & JourDate & "." & NumFichier(1) & ".xls").Worksheets("toto")
    Set Feuiltoto = .Worksheets("toto")
End With

Débogage :
- F9 sur une ligne de code; elle change de couleur
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement
0
yenaac9476 Messages postés 5 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 13 décembre 2011
13 déc. 2011 à 09:47
La création de classeur1 vient nécessairement de cette partie car c'est le seul endroit où je crée un fichier Excel. De plus, si mon programme bug avant le save as, je vois bien un classeur1 ouvert.

Je n'ai pas mis à quoi correspondait tous les éléments car mon code est séparé en pas mal d'endroit.

Chemin est une variable string indiquant un endroit sur le réseau.
Les ordi utilisant cette application sont tous paramétrés avec des Excels avec 3 fauilles au départ. (mais je peux mettre Workbooks.Add(1) si je veux une seulle feuille si j'ai bien lu l'aide)
NumFichier(1), MoisDate et JourDate sont de type string. Ce passage ne me pose pas de problème car le fihier est sauvegardé sous le nom de fichier que je veux.
Feuiltoto a bien été déclarée.

Je vais utiliser ta méthode pour que ce soit plus "propre" masi je n'ai pas l'impression que ça réglera mon problème de création de fichier classeur n'importe où.
0