Création fichier a partir d'un autre

jackfred

XLDnaute Junior
Bonjour,

J'ai un fichier comportant plusieurs onglets.
dont :
Base, Garde, COP1, COP2, BDD1, BDD2, Agence1, Agence2, Agence3...

Je souhaite, à partir de ce fichier, crer un autre fichier comportant les onglets que je définirait dans un tableau. (Car les onglets risquent de changer, ou d'y en avoir d'autres par la suite).

Le tableau se composerait ainsi.

Nom fichier à creer / Onglets à copier
Agence 11 / Garde
Agence 11 / BDD1
Agence 11 / BDD2
Agence 11 / Agence1
Agence 11 / Agence2
...

Merci de votre aide

Fred

ps : s'il vous faut un fichier, je vous prépare ca.
 

Bebere

XLDnaute Barbatruc
Re : Création fichier a partir d'un autre

bonsoir Jackfred
'trouvé le code sur un site anglais
regarde dans le module j'ai mis des commentaires
pour 'MYCriteria' j'ai essayé mais aucun résultat
fais une demande sur le forum
je regarde pour la suite
à bientôt
 

Pièces jointes

  • Classeur1.xls
    20 KB · Affichages: 53
  • Classeur1.xls
    20 KB · Affichages: 54
  • Classeur1.xls
    20 KB · Affichages: 57

nat54

XLDnaute Barbatruc
Re : Création fichier a partir d'un autre

Bonjour,Tu peux peut-être t'inspirer d'un de mes codes Macro 1 : créer les onglets d’un fichier à partir d’un filtre automatiqueSub Créer_objectifs_CC()Application.ScreenUpdating = False 'ne pas voir ce qui se passe à l'écran, diminue besoin mémoireFor lgn = 2 To 24 'pour boucler sur les lignes 2 à 24Sheets("Ref").Select 'on se place sur la feuille de référenceindic = Cells(lgn, 1).Value 'on variabilise, indic = cellule ligne de la boucle, colonne 1Sheets("Recap Objectif CC").Select ''on se place sur la feuille où se trouve la BDRange("e1").Select 'on choisit un indicateur dans filtre automatiqueSelection.AutoFilterSelection.AutoFilter Field:=5, Criteria1:=indic ‘ l’indicateur se trouve en colonne 5 Range("A1:R1500").Select Range("R1500").Activate Selection.Copy Sheets.Add After:=Worksheets(Worksheets.Count) 'on ajoute un onglet après les 2 premières feuillesActiveSheet.Name = indic 'on nomme l'onglet comme nom indicateurSelection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False ' on colle[E9] = "Somme" ‘facultatif : possibilité de faire total de chaque colonne sur chaque feuilleRange("F9").SelectActiveCell.FormulaR1C1 = "=IF(COUNT(R[-7]C:R[-2]C)=0,"""",SUM(R[-7]C:R[-2]C))"Range("F9").SelectSelection.AutoFill Destination:=Range("F9:Q9"), Type:=xlFillDefaultRange("F9:Q9").SelectActiveWindow.ScrollColumn = 1Range("E9").SelectNext lgn ' on continue sur 2nd, 3èm.. indicateur (boucle)Application.ScreenUpdating = TrueEnd SubLes lignes de 2 à 24 comportaient des noms d'indicateur à choisir dans un filtre autoTu dois pouvoir choisir la même chose pour un nom d'onglet
 

jackfred

XLDnaute Junior
Re : Création fichier a partir d'un autre

Salut Nat 54,


Tu peux me dire si c'est correct, il me mentionne des erreurs, mais je ne vois pas ou (je débute encore :) )



Option Explicit
'test
'créer les onglets d’un fichier à partir d’un filtre automatique

Sub Créer_objectifs_CC()

Application.ScreenUpdating = False
'ne pas voir ce qui se passe à l'écran, diminue besoin mémoireFor
lgn = 2 To 24
'pour boucler sur les lignes 2 à 24
Sheets("Ref").Select
'on se place sur la feuille de référence
indic = Cells(lgn, 1).Value
'on variabilise, indic = cellule ligne de la boucle, colonne 1
Sheets("Recap Objectif CC").Select '
'on se place sur la feuille où se trouve la BD
Range("e1").Select
'on choisit un indicateur dans filtre automatique
Selection.AutoFilterSelection.AutoFilte r Field:=5, Criteria1:=indic
'l’indicateur se trouve en colonne 5
Range("A1:R1500").Select Range("R1500").Activate
Selection.Copy Sheets.Add
After:=Worksheets(Worksheets.Count)
'on ajoute un onglet après les 2 premières feuilles
ActiveSheet.Name = indic
'on nomme l'onglet comme nom indicateur
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _False,
Transpose:=False
' on colle[E9] = "Somme" ‘facultatif : possibilité de faire total de chaque colonne sur chaque feuille
Range("F9").SelectActiveCell.FormulaR1C1 = "=IF(COUNT(R[-7]C:R[-2]C)=0,"""",SUM(R[-7]C:R[-2]C))"
Range("F9").SelectSelection.AutoFill Destination:=Range("F9:Q9"), Type:=xlFillDefaultRange("F9:Q9").SelectActiveWind
ow.ScrollColumn = 1
Range("E9").SelectNext lgn
' on continue sur 2nd, 3èm.. indicateur (boucle)Application.ScreenUpdating = TrueEnd SubLes lignes de 2 à 24 comportaient des noms d'indicateur à choisir dans un filtre autoTu dois pouvoir choisir la même chose pour un nom d'onglet


Merci
 

Bebere

XLDnaute Barbatruc
Re : Création fichier a partir d'un autre

bonjour jackfred,nat
j'ai mis le code dont vous parler dans le module1
à bientôt
 

Pièces jointes

  • Classeur1.xls
    24.5 KB · Affichages: 62
  • Classeur1.xls
    24.5 KB · Affichages: 70
  • Classeur1.xls
    24.5 KB · Affichages: 66

Bebere

XLDnaute Barbatruc
Re : Création fichier a partir d'un autre

re
touche Alt et F11
à tout hazard le code à mettre dans un module

Sub Creerfichier()
Dim FichAcreer As Collection, Item As Variant
Dim feuilacreer() As String 'Collection
Dim n As Integer, WbSource As Workbook, WbDest As Workbook
Dim m As Integer, Chemin As String
Dim i As Integer, Sh As Worksheet, NewSheet As Worksheet
Dim j As Integer

Set WbSource = ThisWorkbook

Chemin = WbSource.Path & "\"

'tu écris en minuscule,si pas de fautes les majuscules apparaissent
Set FichAcreer = New Collection
'Set feuilacreer = New Collection

Application.ScreenUpdating = False

With WbSource.Sheets("Base") '.Activate

For n = 2 To .Range("C65536").End(xlUp).Row 'agence
On Error Resume Next
FichAcreer.Add .Range("C" & n), CStr(.Range("C" & n))
On Error GoTo 0
Next n
'Workbooks("voiture_2007"),rmq tu ne sais pas avoir le même nom pour 2 feuilles
n = 0
For Each Item In FichAcreer
Set WbDest = Workbooks.Add


For m = 2 To .Range("D65536").End(xlUp).Row
If .Range("C" & m) = Item Then
ReDim Preserve feuilacreer(n)
feuilacreer(n) = .Range("D" & m)
n = n + 1
End If
Next m
Next Item
End With

For Each Item In FichAcreer

For i = LBound(feuilacreer) To UBound(feuilacreer)
Set NewSheet = WbDest.Worksheets.Add
WbSource.Sheets(feuilacreer(i)).UsedRange.Copy NewSheet.Range("A1")
NewSheet.Name = feuilacreer(i)
Next i

Application.DisplayAlerts = False
For Each Sh In WbDest.Worksheets
If Left(Sh.Name, 5) = "Feuil" Then Sh.Delete
Next Sh
Application.DisplayAlerts = True
WbDest.SaveAs Filename:=Chemin & Item
WbDest.Close
Next Item


Application.ScreenUpdating = True

End Sub

à bientôt
 

jackfred

XLDnaute Junior
Re : Création fichier a partir d'un autre

Re

superbe ca marche tres bien...

toutefois, oui je sais je suis pénible ;), les boutons et macro n'ont pas suivis dans la copie.

Je pensais à autre chose...
A l'inverse, est-il possible de copier le même fichier sous un autre non et de suprimer les onglets n'étant pas dans le tableau?

fred
 

jackfred

XLDnaute Junior
Re : Création fichier a partir d'un autre

Re encore moi (oui je saoul à force ;)

Je viens de me rendred compte que lors de la copie des onglets, les formules sont changée...

En fait elles récupèrent les données du classeur de base...

ex : au lieu d'avoir --> =BDD2!$E$2
On a : --> ='[voiture_2007---2.xls]BDD2'!$E$2

Y a moyen de modifier cela?

Merci

Dsl pour l'abus

fred
 

Bebere

XLDnaute Barbatruc
Re : Création fichier a partir d'un autre

jackfred
tes fichiers je les ai installer dans un dossier
dans le code tu as chemin="lettredisque\nom du dossier" & "\"
exemple********chemin="D:\jackfred" & "\"
le fichier créé est renvoyé dans ce dossier
tu n'es pas dans le même dossier'[voiture_2007---2.xls]BDD2'!$E$2
si tu veux envoyer le fichier créé il faut le dire et donner le chemin
ou tu mets le chemin dans la feuille
le code doit être dans voiture_2007---2.xls
les modules sont bien dans classeur1
as tu essayer le code pour importer les données
j'ai mis des explications dans le code
bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 465
Messages
2 088 650
Membres
103 904
dernier inscrit
thvalette