Creer un nouveau classeur en fonction d'un tableau

Fmiste

XLDnaute Junior
Bonjour, voici mon soucis

J'ai un fichier qui contient un tableau

Dans celui ci, on rentre diverse informations concernant des ouvrages

Et j'aimerai, qu'a l'aide d'un clic sur un bouton, un nouveau classeur se crée, avec un onglet pour chaque ouvrage du tableau. Le nom des onglets serait celui de la cellule désignation.

Voici le fichier joint avec un début ...

C'est une fonctionnalité que je souhaiterais faire en plusieurs étape, celle ci étant la premiere.

J'aimerais également récuperer la partie main d'oeuvre pour chaque ouvrage dans leur onglets respectifs...

Cordialement :)
 

Pièces jointes

  • test.xls
    78.5 KB · Affichages: 43
  • test.xls
    78.5 KB · Affichages: 38
  • test.xls
    78.5 KB · Affichages: 43

Fmiste

XLDnaute Junior
Re : Creer un nouveau classeur en fonction d'un tableau

Bonjour, je reviens vers vous car j'ai un petit soucis.

Lors du passage dans ma boucle for, alors que les variables sont initialisées a des valeurs, celle ci n'ont pas ces bonnes valeurs dans le débogueur.

Par Exemple, la variable k initialisée a 7 se retrouve égale a 26, et donc ma boucle ne fonctionne pas, de meme pour l qui devrait valoir 1 au premier tour de boucle et qui vaut 20 !

Si une personne pouvait jeter un oeil a ma boucle, j'en serais ravi :)
 

Pièces jointes

  • test.xls
    81 KB · Affichages: 37
  • test.xls
    81 KB · Affichages: 38
  • test.xls
    81 KB · Affichages: 32

tototiti2008

XLDnaute Barbatruc
Re : Creer un nouveau classeur en fonction d'un tableau

Bonjour Fmiste,

Un essai

Code:
Sub generer()


Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim i As Integer, j As Integer, k As Integer, l As Integer

i = 7 'numéro de cellule qui doit etre vérifié dans la premiere boucle
j = 0 'variable qui récupere le nombre de feuille a creer
l = 1 'numéro des feuilles crées


While Sheets("retranscription").Range("C" & i) <> 0
        j = j + 1
        i = i + 1
Wend
i = i - 1
   'On créer l'objet Excel
  Set xlApp = CreateObject("Excel.Application")
        
   'On défini le nombre d'onglets
  xlApp.SheetsInNewWorkbook = j
  
   'On ajoute un classeur
   Set xlBook = xlApp.Workbooks.Add


   For k = 7 To i
    'nom de la feuille l = cellule C&K
    xlBook.Sheets(k - 6).Name = Range("C" & k).Value
    l = l + 1
   Next k
   
    'On donne un nom au classeur
    xlBook.SaveAs (Sheets("retranscription").Range("A1"))
    
    'On rend le classeur visible
    xlApp.Visible = True
    
    
    
    
    'On créer l'objet onglet dans le nouveau classeur créé
     Set xlSheet = xlBook.Worksheets(1)
    'On affecte un nom aux l'onglets
    'xlSheet.name = "Janvier"
    'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
    'Set xlSheet = Nothing
    '
    '
 
    '
    '....... On donne un nom à chaque onglets
    '
    '
    'On remet la propriété de l'application à 3 (par défaut)
    'xlApp.SheetsInNewWorkbook = 3


End Sub
 

Fmiste

XLDnaute Junior
Re : Creer un nouveau classeur en fonction d'un tableau

Re,

J'ai bien avancé depuis le dernier message posté, mais un dernier soucis m'empeche de finaliser ma fonction ...

L'ajout des feuilles se fait correctement, la mise en place des titres aussi. Dans la feuille 1, les informations du sousdetailPU1 sont entrés comme je le souhaite, mais pas pour la feuille 2 qui doit reprendre le tableau main d'oeuvre de la feuille sousdetailPU2.

Sachant que :
deb_etu représente la cellule B181 des feuilles sousdetailsPU
deb_atereprésente la cellule B197 des feuilles sousdetailsPU
deb_pose représente la cellule B212 des feuilles sousdetailsPU


Il faut regarder dans le module 18. Il s'agit certainement d'un soucis dans ma boucle, mais, ayant cherché depuis 14h, je n'arrive pas a voir ou est mon soucis.

J'espere que quelqu'un trouvera mon soucis

Le fichier test est le fichier ou se trouve le module 18 en question.
L'autre fichier vous montrera mon avancement dans l'ajout, et quand vous jonglez entre les deux feuilles, vous allez voir ce qu'il manque ...

Le fichier test sera hoster via Cjoint car trop volumineux : http://cjoint.com/?3Fhq06NbaKt

Merci a celui qui prendra le temps de regarder mon code loin d'être optimisé :D
 

Pièces jointes

  • Projet en cours.xls
    14.5 KB · Affichages: 39

MichD

XLDnaute Impliqué
Re : Creer un nouveau classeur en fonction d'un tableau

Bonjour,

Attache cette macro à ton bouton dans ton fichier :

Attention : Chaque fichier créé est nommé d'après le nom de la feuille copiée.
À voir si des doublons sont possibles pour le nom des classeurs dans
le répertoire de destination...

'------------------------------------------
Sub test()
Dim Rg As Range, C As Range, Ligne As Long, Sh As Worksheet
With Feuil1
Set Rg = .Range("C7:C50")
End With
Application.ScreenUpdating = False
For Each C In Rg
If C <> 0 Then
If C <> "" Then
Set Sh = Workbooks.Add(-4167).Worksheets(1)
Sh.Name = C.Value
Feuil1.Range("A1:A5").EntireRow.Copy Sh.Range("A1")
Ligne = Sh.Range("A65536").End(xlUp)(2).Row
If Ligne = 4 Then Ligne = 6
C.EntireRow.Copy Sh.Range("A" & Ligne)
End If
End If
With Sh.Parent
.SaveAs Filename:=ThisWorkbook.Path & "\" & C.Value & ".xlsx", FileFormat:=51
.Close False
End With
Next
Application.ScreenUpdating = True
End Sub
'----------------------------------------------
'----------------------------------------------
 
Dernière édition:

Fmiste

XLDnaute Junior
Re : Creer un nouveau classeur en fonction d'un tableau

Merci a vous, mais j'ai toujours le meme probleme, a savoir que ma boucle effectue le boulot dans mon premier passage de boucle et le fait a moitié dans le second passage.

Je redépose le fichier ici, avec une feuille d'explications pour vous guider dans mon soucis, en esperant que quelqu'un trouve le probleme ...

Je n'ai laissé que le strict necessaire au fonctionnement du classeur.
En esperant trouver de l'aide pour ce dernier probleme qui m'est posé :)

Voici le fichier:
http://cjoint.com/?BFlj0m0mHMM

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 793
Messages
2 092 154
Membres
105 241
dernier inscrit
Mixlsm