cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008
-
8 avril 2008 à 10:25
cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008
-
10 avril 2008 à 17:11
Bonjour, je debute en VBExcel et je souhaite creer automatiquement de nouveaux classeurs dont les noms est contenu dans deux colonnes (id et nom) , et inserere le nom et l`id dans la nouvelle feuille ainsi qu`une structure predefinie.
J`ai reussi a creer une macro permettant de creer automatiquement tous mes nouveaux classeurs, voici le code:
Sub test()
Dim newW As Workbook
Application.ScreenUpdating = False
For i = Sheets(1).Range("A50000").End(xlUp).Row To 1 Step -1
fName = Sheets(1).Cells(i, 1).Value & " " & Sheets(1).Cells(i, 2).Value & ".xls"
Set newW = Workbooks.Add
newW.SaveAs Filename:=fName
Workbooks(fName).Close
Next
Application.ScreenUpdating = TrueEnd Subpuis creation d`un bouton:
Private Sub CommandButton1_Click()
test
End Sub
Maintenant j`aimerais que dans chque feuille apparraisse une structure predefinie identique dans tous les classeurs (en vert sur l`image) ainsi que l`id et le nom utilises (en gris sur l`image)... mais je ne vois pas comment inserer un copy-paste dans la boucle ci-dessus.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 8 avril 2008 à 10:44
Salut,
NOTE: On ne voit pas d'image...
Tu peux passer par une feuille "type" contenu dans ton classeur source et que tu compèterais dans la boucle avec id et le nom utilises avant de l'ajouter dans le nouveau classeur.
Sub test()
Dim newW As Workbook
Application.ScreenUpdating = False
For i = Sheets(1).Range("A50000").End(xlUp).Row To 1 Step -1
fName = Sheets(1).Cells(i, 1).Value & " " & Sheets(1).Cells(i, 2).Value & ".xls"
Set newW = Workbooks.Add
newW.SaveAs Filename:=fName
With Workbooks(fName)
'ici on crée une nouvelle feuille par copie d'une feuille template d'un fichier template prealablement ouvert
Workbooks("Template.xls").
Worksheets("Template").Copy Before:= .Sheets(1)
.Close
End With
Next
Application.ScreenUpdating = True
End Sub
je n'ai pas testé ce bout de code
A+
<hr />
Bijnok (moi) a repondu :
Merci pour le code, c`est presque xce que je voudrais mais je souhaiterais ne pas a voir a confirmer la sauvegarde parce que je dois avoir quelquechose comme 300 classeurs a creer! De plus, j`aimerais que les cellules A2 et B2 contiennent respectivement l`id et le nom utilise comme filename.
Est-ce possible avec une formule de reference sur une feuille contenant les noms du type
`=(i,1)` pour la colonne A et `=(i,2)` pour la B ?
cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008 9 avril 2008 à 12:35
Merci ! Au debut du programme j`ai rajoute:
Application.DisplayAlerts = False
et a la fin
Application.DisplayAlerts = True
Mais maintenant, la macro me cree un classeur et me met une erreur sur le filename.....
cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008 9 avril 2008 à 13:04
pour le prmier classeur c`est correct, mais pour celui d`apres le nom est vide : " .xls"
Apparement il ne prend rien comme id et comme nom, cela signifie t`ol que la macro ne remonte pas la colonne des id et celle des noms mais qu`elles changent de feuille ou je ne sais quoi?
En tout cas, bravo pour la text box, c`est bien vu!
cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008 10 avril 2008 à 16:58
J`ai essaye ceci:
Sub test()
Dim newW As Workbook
Application.ScreenUpdating = False
'Application.DisplayAlerts = False
For i = Sheets(1).Range("A50000").End(xlUp).Row To 1 Step -1
Set newW = Workbooks.Add
newW.SaveAs Filename:=FName
With Workbooks(FName)
'ici on crée une nouvelle feuille par copie d'une feuille template d'un fichier template prealablement ouvert
Workbooks("structure.xls").Worksheets("timetable") .Copy Before:=.Sheets(1)
Sheets(1).Cells(2, 1).Value = A2
Sheets(1).Cells(i, 2).Value = B2
.Close
End With
Next
'Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
mais la boucle s`arrete apres la creation du premier classeur (toujours le meme probleme de nom de sauvegarde vide).
De plus la cellule B2 de la nouvelle feuille reste vide alors que la A2 contient l`Id que je souhaite. Je ne compremd vraiment pas grand chose a VBA bien que je soit presque bon en C et Java...
Aussi, je ne fais que copier la valeur en A2, alors que je souhaiterais copier une formule du type "=............." afin de faire reference a la base de donnee; de cette facon chacune des feuilles sera mise a jour avec la base de donnees principale...
cs_bijnok
Messages postés16Date d'inscriptionlundi 7 avril 2008StatutMembreDernière intervention10 avril 2008 8 avril 2008 à 10:46
<table style= "WIDTH: 100%; BORDER-BOTTOM: black 1px solid">
----,
Salut,
Bon ben deja, t'es pas dans le bon theme... ben si... donc le bon theme le voici : Thèmes / Visual Basic 6 / Langages dérivés / VBA /
Sub test()
Dim newW As Workbook
Application.ScreenUpdating = False
For i = Sheets(1).Range(\"A50000\").End(xlUp).Row To 1 Step -1
fName = Sheets(1).Cells(i, 1).Value & \" \" & Sheets(1).Cells(i, 2).Value & \".xls\"
Set newW = Workbooks.Add
newW.SaveAs Filename:=fName
With Workbooks(fName)
'ici on crée une nouvelle feuille par copie d'une feuille template d'un fichier template prealablement ouvert
Workbooks(\"Template.xls\").Worksheets(\"Template\").Copy Before:= .Sheets(1)
.Close
End With
Next
Application.ScreenUpdating = True
End Sub
,
Merci pour le code, c`est presque xce que je voudrais mais je souhaiterais ne pas a voir a confirmer la sauvegarde parce que je dois avoir quelquechose comme 300 classeurs a creer! De plus, j`aimerais que les cellules A2 et B2 contiennent respectivement l`id et le nom utilise comme filename.
Est-ce possible avec une formule de reference sur une feuille contenant les noms du type
` =(i,1)` pour la colonne A et `=(i,2)` pour la B ?