Copie automatique

Résolu
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008 - 8 avril 2008 à 10:25
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 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.

Merci d`avance

Bijnok 

14 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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.

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
8 avril 2008 à 10:50
http://www.vbfrance.com/auteur/BIGFISHLEVRAI/510670.aspx




bigfish_le vrai a dit:









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 ?

Encore merci !
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 avril 2008 à 11:44
Re,
Mais tu as ouvert combien de topic??? et puis les deux sont il actifs?

Pour ne pas que Excel te demande confirmation
Application.DisplayAlerts = False je crois ou un truc dans le genre

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
8 avril 2008 à 11:49
non je ne m`occuppe plus que de celui-ci.

Merci pour la ligne de code :)
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 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.....

Merci pour votre aide.
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 avril 2008 à 12:40
re,

met un message box sur fname pour voir ce qu il vaut.
verifie que cela peuisse etre un chemin valide pour un classeur

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
9 avril 2008 à 12:46
euh oui bien sur, je fais ca comment ??!
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
9 avril 2008 à 12:50
Et il est a note que cela fonctionne sans les deux nouvelles lignes...
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 avril 2008 à 12:51
Re,
Euh....

fName = Sheets(1).Cells(i, 1).Value & " " & Sheets(1).Cells(i, 2).Value & ".xls"

MSGBOX FName 'ET al tu regarde si le chemin    te parait bon

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 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!
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 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

Dim A2 As String
A2 = Sheets(1).Cells(i, 1).Value

Dim B2 As String
B2 = Sheets(1).Cells(i, 2).Value

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("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...

Merci pour votre aide, j`en ai grandement besoin. 

I need your help please....
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
10 avril 2008 à 16:59
Jai oublie de dire que le "display alert" ne faisait rien actuellement.
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 avril 2008
10 avril 2008 à 17:11
j`ai une faute, il faut remplacer Sheets(1).Cells(i, 2).Value = B2 par Sheets(1).Cells(2, 2).Value = B2
3
cs_bijnok Messages postés 16 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 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

je n'ai pas testé ce bout de code

A+

</td>

----

<li>

Rép.

</li>
<li>

MP

</li>
<li>

287 msg

</li>
<li>

301 msg CS

</li>




</td>
</tr>
<tr style="COLOR: black; BACKGROUND-COLOR: white">
<td valign="top">



Re : copie automatique
le 08/04/2008 10:27:12





bijnok

,
Merci nouveau topic au bon endroit:

http://www.vbfrance.com/infomsg_COPIE-AUTOMATIQUE_1108230.aspx,

----

<li>

Rép.

</li>
<li>

MP

</li>
<li>

4 msg

</li>




</td>
</tr>
<tr style ="COLOR: black; BACKGROUND-COLOR: white">
<td valign= "top">



Re : copie automatique
le 08/04/2008 10:45:01





bijnok

,
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 ?

Encore merci !



</td>
</tr>
</tbody>
</table>
0
Rejoignez-nous