Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/06/2009, 19h43   #1
Invité de passage
 
Inscription : juin 2009
Messages : 2
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2009
Messages : 2
Points : 1
Points : 1
Par défaut Création d'une nouvelle feuille pour une liste de fichier

Bonjour,

Voici mon problème :

Je voudrais rajouter une feuille dans plusieurs classeur à la suite. J'ai bien réussi à ouvrir les classeurs, mais les feuilles sont crées dans le fichier du lancement de la macro.

Voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Workbook_Open()
Dim LstFich, xfile
Application.ScreenUpdating = False
'Ouverture des fichiers
LstFich = Application.GetOpenFilename("Fichiers Excel(*.xls),*.xls", , _
"Sélection des fichiers à convertir", , True) 'true pour une selection multiple
 
If Not IsArray(LstFich) Then Exit Sub
 
For Each xfile In LstFich
 
    Workbooks.Open FileName:=xfile
    On Error Resume Next
    Workbooks(xfile).Activate
    Sheets.Add
    On Error GoTo 0
    ActiveWorkbook.Save
    ActiveWorkbook.Close
 
Next xfile
 
ActiveWorkbook.Close
End Sub
Si quelqu'un a une solution à me proposer je suis preneur.

Merci.

Dernière modification par Philippe JOCHMANS ; 30/06/2009 à 21h19. Motif: Ajout des balises codes (sélection du code dans la fenêtre de rédaction des messages, puis un clique sur (#), ce n'est pas facultatif
Cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 01h39   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 832
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 41
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 832
Points : 9 482
Points : 9 482
en utilisant ActiveWorkbook.Sheets.Add plutôt que Sheets.Add tout court ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 10h01   #3
Membre Expert
 
Homme Frédéric
Développeur informatique
Inscription : juin 2009
Messages : 944
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France, Vosges (Lorraine)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2009
Messages : 944
Points : 1 249
Points : 1 249
Bonjour
A la place de :
Code :
1
2
3
4
    Workbooks(xfile).Activate
    Sheets.Add
    ActiveWorkbook.Save
    ActiveWorkbook.Close
Essaye :
Code :
1
2
    Workbooks(xfile).Sheets.Add
      Workbooks(xfile).Close , True

Dernière modification par AlainTech ; 05/07/2009 à 07h41. Motif: Balises [code]
fgiambelluco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 10h05   #4
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Une solution pour maitriser ce que l'on fait est d'instancier :


Code :
1
2
3
4
5
6
7
8
Dim wb As Workbook
Dim F1 As Worksheet
 
Set wb = Workbooks.Open(Filename:=xfile)
Set F1 = wb.Worksheets.Add
With F1
    .Name = "LanouvelleFeuille"
End With
Finalement en reprenant ton code ça donne ceci :

Code :
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
40
41
42
Dim wb As Workbook
Dim F1 As Worksheet
Dim LstFich, xfile
 
Application.ScreenUpdating = False
'-------------------------------------'
'Ouverture des fichiers
'-------------------------------------'
LstFich = Application.GetOpenFilename("Fichiers Excel(*.xls),*.xls", , _
"Sélection des fichiers à convertir", , True) 'true pour une selection multiple
 
If Not IsArray(LstFich) Then Exit Sub
 
For Each xfile In LstFich
 
    Set wb = Workbooks.Open(Filename:=xfile)
    '-----------------------'
    ' Ajout d'une feuille
    '-----------------------'
    Set F1 = wb.Worksheets.Add
    With F1
     .Name = "LanouvelleFeuille"
    End With
 
    '-------------------------------------'
    ' Sauvegarde et fermeture du classeur
    '-------------------------------------'
    With wb
        .Save
        .Close
    End With
 
 
Next xfile
 
'-----------------------------------------------'
' Fermeture du classeur ou se trouve cette macro
'-----------------------------------------------'
ThisWorkbook.Close
 
Application.ScreenUpdating = True ' il parait que c pas ncr mais je le met tjrs
End Sub
__________________

Dernière modification par AlainTech ; 05/07/2009 à 07h42. Motif: Fusion de 2 messages
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 17h38   #5
Invité de passage
 
Inscription : juin 2009
Messages : 2
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juin 2009
Messages : 2
Points : 1
Points : 1
Merci c'est impécable !

Ca fonctionne à merveille

Merci pour les conseils et la solution !
Cedrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 17h53   #6
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Une dernière chose que j'ai oublié dans le code, liberer les objets.

Fin du code :

Code :
1
2
3
4
5
6
7
8
9
'-----------------------------------------------'
' On libère les objets
'-----------------------------------------------'
Set F1 = Nothing
Set wb = Nothing
'-----------------------------------------------'
' Fermeture du classeur ou se trouve cette macro
'-----------------------------------------------'
ThisWorkbook.Close
Citation:
Ca fonctionne à merveille
Je trouve aussi, le code est intéressant
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 15h13.


 
 
 
 
Partenaires

Hébergement Web