Excel Macro et VB
Dernière réponse : dans Programmation
Bonjour,
J'ai quelques problèmes avec Excel. Je dois générer plus ou moins 4000 fiches qui comportent chacune 6 champs de saisie. Mais je n'ai pas d'expérience en ce qui concerne les macro et encore moins en ce qui concerne VB.
Voici mon problème:
J'ai une "fiche" type (vierge) qui comporte les 6 champs à remplir. J'ai un autre document excel avec les données (rangées dans un tableau) à insérer dans chaque fiche (une ligne du tableau correspond à une fiche).
Pour le moment, j'ai trouver ces lignes-ci pour enregistrer les pg excel:
Mais je n'ai pas besoin de la date dans le nom du document il me faudrait une incrémentation (1,2,3...) et pas de bouton sinon faut que j'ouvre les 4000 fiches :S.
J'ai aussi créé la macro suivante:
Qui elle sert juste a affecter la valeur au champ de la fiche à partir du tableau contenu dans le 2eme document.
Ce que je voudrait faire, c'est une boucle while qui répette ces tâches en incrémentant (pour passer à la ligne suivante du tableau) en enregistrant chaque fois la fiche avec le nom et le n°.
Je sais pas si j'ai été assez claire?
Je vous remercie de pretter attention à mon problème.
J'ai quelques problèmes avec Excel. Je dois générer plus ou moins 4000 fiches qui comportent chacune 6 champs de saisie. Mais je n'ai pas d'expérience en ce qui concerne les macro et encore moins en ce qui concerne VB.
Voici mon problème:
J'ai une "fiche" type (vierge) qui comporte les 6 champs à remplir. J'ai un autre document excel avec les données (rangées dans un tableau) à insérer dans chaque fiche (une ligne du tableau correspond à une fiche).
Pour le moment, j'ai trouver ces lignes-ci pour enregistrer les pg excel:
Public Sub CommandButton1_Click() 'copie sauvegarde classeur Dim nom As String nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & ActiveWorkbook.Name ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur") End Sub
Mais je n'ai pas besoin de la date dans le nom du document il me faudrait une incrémentation (1,2,3...) et pas de bouton sinon faut que j'ouvre les 4000 fiches :S.
J'ai aussi créé la macro suivante:
Sub Remplissage() ' ' Remplissage Macro ' ' Range("C8").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C5" Range("F8").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C4" Range("J8").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C9" Range("C13").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C1" Range("G13").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C2" Range("J13").Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C3" Range("J14").Select End Sub
Qui elle sert juste a affecter la valeur au champ de la fiche à partir du tableau contenu dans le 2eme document.
Ce que je voudrait faire, c'est une boucle while qui répette ces tâches en incrémentant (pour passer à la ligne suivante du tableau) en enregistrant chaque fois la fiche avec le nom et le n°.
Je sais pas si j'ai été assez claire?
Je vous remercie de pretter attention à mon problème.
Autres pages sur : excel macro
Lassé par la pub ? Créez un compte
Meilleure solution
Oufti !!!!!
C'est du grand n'importe quoi, ça, mon ptit zeb >:/
s_wb est un Workbook, un classeur, quoi.
Workbooks(x).Worksheets(y) est la Worksheet (feuille de calcul) y du Workbook (classeur) x.
On ne peut pas affecter une feuille à un classeur.
Aller, on recommence :
C'est du grand n'importe quoi, ça, mon ptit zeb >:/
N'y a-t-il rien qui te gêne ?
Dim s_wb As Workbook
Set s_wb = Workbooks("L1RACK_FC_EA.xls" ).Worksheets("L1RACK_FC_EA" )
s_wb est un Workbook, un classeur, quoi.
Workbooks(x).Worksheets(y) est la Worksheet (feuille de calcul) y du Workbook (classeur) x.
On ne peut pas affecter une feuille à un classeur.
Aller, on recommence :
Public Sub ZolieProc(wb_1 As Workbook)
Dim num As Integer
Dim nom As String
Dim t_wb As Workbook
Dim s_ws As Worksheet
Dim t_ws As Worksheet
Set s_ws = Workbooks("L1RACK_FC_EA.xls" ).Worksheets("L1RACK_FC_EA" )
For num = 1 To 4000
nom = numeroter_fichier(wb_1.Path & "\" & wb_1.Name, num)
wb_1.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
Set t_ws = t_wb.Worksheets(1)
t_ws.Range("C8" ).Value = s_ws.Range("E2" ).Value
t_ws.Range("F8" ).Value = s_ws.Range("D2" ).Value
t_ws.Range("J8" ).Value = s_ws.Range("I2" ).Value
t_ws.Range("C13" ).Value = s_ws.Range("A2" ).Value
t_ws.Range("G13" ).Value = s_ws.Range("B2" ).Value
t_ws.Range("J13" ).Value = s_ws.Range("D2" ).Value
t_wb.Save
t_wb.Close
Next
End Sub
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
ZolieProc ActiveWorkbook
End Sub
A la lecture de ton message : Et hop, encore un qui confond EXCEL avec un gestionnaire de base de données.
Non mais, 4000 fiches !
_____________________________________________________
On t'oblige à utiliser Excel ?
Bon aller, un peu d'aide tout de même...
Non mais, 4000 fiches !
Sub ExcelAsDB()
Dim t As Balloon
Assistant.On = True
Set t = Assistant.NewBalloon
t.Animation = 11
t.Button = 1
t.Heading = StrReverse(".ruelbat nu tse lecxE" )
t.Text = StrReverse(".seénnod ed esab ed eriannoitseg nu sap tse'n eC" )
t.Show
Assistant.Visible = False
Set t = Nothing
Assistant.On = False
End Sub
_____________________________________________________
On t'oblige à utiliser Excel ?
Bon aller, un peu d'aide tout de même...
Bon, pas mal.
Public Sub CommandButton1_Click() 'copie sauvegarde classeur Dim nom As String nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & ActiveWorkbook.Name ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur" ) End Sub
Cependant, je t'engage à ne pas trop te servir des objets actifs. Excel étant parfois espiègle, il changera inopinément l'objet actif en cours. Donc, quand tu en tiens un (un objet actif), pointe dessus avec une variable pour pouvoir d'y référer ensuite :
Tu ne déclares pas rep. C'est mal. C'est très mal ! Ose me dire que tu n'as pas mis Option Explicit au début de ton code !!!!
Public Sub CommandButton1_Click() 'copie sauvegarde classeur Dim nom As String Dim wk As Workbook Set wk = ActiveWorkbook nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & wb.Name wb.SaveCopyAs wb.Path & "\" & nom rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur" ) End Sub
![[:zeb:4] [:zeb:4]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e9/8b/zeb:4.gif)
En plus, pourquoi ce rep puisque tu ne t'en sers pas !
Public Sub CommandButton1_Click() 'copie sauvegarde classeur Dim nom As String Dim wk As Workbook Set wk = ActiveWorkbook nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & wb.Name wb.SaveCopyAs wb.Path & "\" & nom MsgBox "Vos données seraient mieux dans un vrai SGBD ! " & vbCrLf & _ "En attendant, les voilà sauvées dans : " & nom, _ vbYes + vbInformation, _ "Copie sauvegarde classeur" End Sub
Alors, c'est cool. A part que ce n'est pas ce que tu veux ^^
Tu veux un nom avec un numéro.
Ben le voilà le numéro :
Bon, alors pour numéroter un fichier, c'est très facile sur le papier :
Bref, il faut éclater le nom complet du ficher et le recréer.
C'est du boulot sous VB. Voici comment faire grâce à l'objet FileSystemObject :
Allez, hop, 4000 fois !
Tu vas en avoir marre de cliquer avant les 4000
([Ctrl+Pause] pour arrêter le massacre.)
Tu veux un nom avec un numéro.
Ben le voilà le numéro :
Dim Numero As Integer
Numero = 1
Bon, alors pour numéroter un fichier, c'est très facile sur le papier :
C:\chemin\fichier.extention
|
`- ajouter là le numéro.
C:\chemin\fichier_numéro.extention
Bref, il faut éclater le nom complet du ficher et le recréer.
C'est du boulot sous VB. Voici comment faire grâce à l'objet FileSystemObject :
Function numeroter_fichier(fichier As String, numero As Integer) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
numeroter_fichier = FSO.GetParentFolderName(fichier) & "\" & _
FSO.GetBaseName(fichier) & "_" & numero & "." & _
FSO.GetExtensionName(fichier)
End Function
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
Dim nom As String
Dim wk As Workbook
Dim num As Integer
Set wk = ActiveWorkbook
num = 1
nom = numeroter_fichier(wb.Path & "\" & wk.Name, num)
wb.SaveCopyAs nom
rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur" )
End Sub
Allez, hop, 4000 fois !
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
Dim nom As String
Dim wk As Workbook
Dim num As Integer
Set wk = ActiveWorkbook
For num = 1 To 4000
nom = numeroter_fichier(wb.Path & "\" & wk.Name, num)
wb.SaveCopyAs nom
MsgBox "Vos données seraient mieux dans un vrai SGBD ! " & vbCrLf & _
"En attendant, les voilà sauvées dans : " & nom, _
vbInformation, _
"Copie sauvegarde classeur"
Next
End Sub
Tu vas en avoir marre de cliquer avant les 4000
([Ctrl+Pause] pour arrêter le massacre.)
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
Dim wk As Workbook
Dim num As Integer
Set wk = ActiveWorkbook
For num = 1 To 4000
wb.SaveCopyAs numeroter_fichier(wb.Path & "\" & wk.Name, num)
Next
End Sub
Sub Remplissage() ' ' Remplissage Macro ' ' Range("C8" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C5" Range("F8" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C4" Range("J8" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C9" Range("C13" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C1" Range("G13" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C2" Range("J13" ).Select ActiveCell.FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C3" Range("J14" ).Select End Sub
Beurk
Quelle horreur !!!!
Alors d'abord, on vire les Select/Active !
Sub Remplissage() ' Remplissage Macro Range("C8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C5" Range("F8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C4" Range("J8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C9" Range("C13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C1" Range("G13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C2" Range("J13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C3" End Sub
Ensuite on explicite la source et la cible.
A-t-on besoin que les cellules contiennent une formule ou une valeur ?
La réponse à cette question doit venir de toi.
Sub Remplissage() ' Remplissage Macro Dim target As Worksheet Set target = ActiveWorksheet target.Range("C8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C5" target.Range("F8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C4" target.Range("J8" ).FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C9" target.Range("C13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C1" target.Range("G13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C2" target.Range("J13").FormulaR1C1 = "=[L1RACK_FC_EA.xls]L1RACK_FC_EA!R2C3" End Sub
Sub Remplissage() ' Remplissage Macro Dim source As Worksheet Dim target As Worksheet Set source = Workbooks("L1RACK_FC_EA.xls").Worksheets("L1RACK_FC_EA") Set target = ActiveWorksheet target.Range("C8" ).Value = source.Range("E2").Value target.Range("F8" ).Value = source.Range("D2").Value target.Range("J8" ).Value = source.Range("I2").Value target.Range("C13").Value = source.Range("A2").Value target.Range("G13").Value = source.Range("B2").Value target.Range("J13").Value = source.Range("D2").Value End Sub
Aller, 4000 fois :
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
Dim num As Integer
Dim nom As String
Dim a_wb As Workbook
Dim s_wb As Workbook
Dim t_wb As Workbook
Set a_wb = ActiveWorkbook
Set s_wb = Workbooks("L1RACK_FC_EA.xls" ).Worksheets("L1RACK_FC_EA" )
For num = 1 To 4000
nom = numeroter_fichier(a_wb.Path & "\" & a_wb.Name, num)
a_wb.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
t_wb.Range("C8" ).Value = s_wb.Range("E2").Value
t_wb.Range("F8" ).Value = s_wb.Range("D2").Value
t_wb.Range("J8" ).Value = s_wb.Range("I2").Value
t_wb.Range("C13").Value = s_wb.Range("A2").Value
t_wb.Range("G13").Value = s_wb.Range("B2").Value
t_wb.Range("J13").Value = s_wb.Range("D2").Value
t_wb.Save
t_wb.Close
Next
End Sub
Tu vas me dire que je suis completement gauche mais je n'arrive pas a faire fonctionner le code. Et je comprend pas le début ou tu parle de chemin (vu que logiquement il copie dans le même dossier que celui de la source).
J'ai copier coller ton code ds VB et lorsque je click, il m'indique qu'il manque un objet :S...
J'ai copier coller ton code ds VB et lorsque je click, il m'indique qu'il manque un objet :S...
Rhooooooo, c'est beau.
Et on fait une zolie procédure sans activetruc parce que je n'aime pas ça !
L'est pas belle la vie ?
Et on fait une zolie procédure sans activetruc parce que je n'aime pas ça !
Public Sub ZolieProc(wb_1 As Workbook)
Dim num As Integer
Dim nom As String
Dim s_wb As Workbook
Dim t_wb As Workbook
Set s_wb = Workbooks("L1RACK_FC_EA.xls" ).Worksheets("L1RACK_FC_EA" )
For num = 1 To 4000
nom = numeroter_fichier(wb_1.Path & "\" & wb_1.Name, num)
wb_1.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
t_wb.Range("C8" ).Value = s_wb.Range("E2").Value
t_wb.Range("F8" ).Value = s_wb.Range("D2").Value
t_wb.Range("J8" ).Value = s_wb.Range("I2").Value
t_wb.Range("C13").Value = s_wb.Range("A2").Value
t_wb.Range("G13").Value = s_wb.Range("B2").Value
t_wb.Range("J13").Value = s_wb.Range("D2").Value
t_wb.Save
t_wb.Close
Next
End Sub
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
ZolieProc ActiveWorkbook
End Sub
L'est pas belle la vie ?
Oui merci a toi et à ton bos!!
.
Bon alors la j'ai copier coler ds VB ceci:
Et lorsque je vais clicker sur le bouton, j'ai un message qui me dit:
Incompatibilité de type
Que dois-je faire??
.Bon alors la j'ai copier coler ds VB ceci:
Function numeroter_fichier(fichier As String, numero As Integer) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
numeroter_fichier = FSO.GetParentFolderName(fichier) & "\" & _
FSO.GetBaseName(fichier) & "_" & numero & "." & _
FSO.GetExtensionName(fichier)
End Function
Public Sub ZolieProc(wb_1 As Workbook)
Dim num As Integer
Dim nom As String
Dim s_wb As Workbook
Dim t_wb As Workbook
Set s_wb = Workbooks("L1RACK_FC_EA.xls").Worksheets("L1RACK_FC_EA")
For num = 1 To 4000
nom = numeroter_fichier(wb_1.Path & "\" & wb_1.Name, num)
wb_1.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
t_wb.Range("C8").Value = s_wb.Range("E2").Value
t_wb.Range("F8").Value = s_wb.Range("D2").Value
t_wb.Range("J8").Value = s_wb.Range("I2").Value
t_wb.Range("C13").Value = s_wb.Range("A2").Value
t_wb.Range("G13").Value = s_wb.Range("B2").Value
t_wb.Range("J13").Value = s_wb.Range("D2").Value
t_wb.Save
t_wb.Close
Next
End Sub
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
ZolieProc ActiveWorkbook
End Sub
Et lorsque je vais clicker sur le bouton, j'ai un message qui me dit:
Incompatibilité de type
Que dois-je faire??
Salut Picpic le belge
Mi euj suis Picard.
(Un boyau rouge, c'est un Artésien, et par extension, un habitant du Pas-de-Calais, immatriculé 62 ^^ )
Bon, alors si la ligne "Set s_wb..." est en rouge, c'est parce que tu as fais F9 dessus, c'est le point d'arrêt. Normal.
Donc tu lances ton programmes, il s'arrête gentiment sur la ligne "Set s_wb = " parce que tu y as mis un point d'arrêt, et quand tu redémarres avec un F8, il plante aussitôt, avec une erreur 13.
Un erreur 9 sera plus vraisemblable :
---------------------------
Erreur d'exécution '9': L'indice n'appartient pas à la sélection.
---------------------------
Le classeur L1RACK_FC_EA.xls existe ?
Est-il ouvert ?
Possède-t-il une feuille L1RACK_FC_EA ?
Mi euj suis Picard.
(Un boyau rouge, c'est un Artésien, et par extension, un habitant du Pas-de-Calais, immatriculé 62 ^^ )
Bon, alors si la ligne "Set s_wb..." est en rouge, c'est parce que tu as fais F9 dessus, c'est le point d'arrêt. Normal.
Donc tu lances ton programmes, il s'arrête gentiment sur la ligne "Set s_wb = " parce que tu y as mis un point d'arrêt, et quand tu redémarres avec un F8, il plante aussitôt, avec une erreur 13.
Un erreur 9 sera plus vraisemblable :
---------------------------
Erreur d'exécution '9': L'indice n'appartient pas à la sélection.
---------------------------
Le classeur L1RACK_FC_EA.xls existe ?
Est-il ouvert ?
Possède-t-il une feuille L1RACK_FC_EA ?
Je viens de tester ca marche nickel!!! Il y a juste un truc... il passe pas à la ligne suivante du tableau... donc dans les lignes t_ws.Range("C8" ).Value = s_ws.Range("E2" ).Value il reste tout le temps en E2 (dans ce cas ci) et moi j'aimerais qu'a chaque page, il passe en 3 puis 4...
Je te remercie déja pour tout ce que tu as fai pour moi... je ne sais comment te remercier!
Je te remercie déja pour tout ce que tu as fai pour moi... je ne sais comment te remercier!
Comment me remercier...
Et bien en ouvrant l'aide en ligne (l'aide d'Excel, en faisant F1) sur la fonction Range. Intéressant, n'est-ce pas ?
Maintenant, la fonction Cell. Pas mal, non ?
Remplace Range par Cell dans les lignes 17 à 22. Oui, oui, tout seul, comme un grand, sans autre aide que celle d'Excel.
Ca marche ? Ben maintenant, à toi de trouver comment décaler
Et bien en ouvrant l'aide en ligne (l'aide d'Excel, en faisant F1) sur la fonction Range. Intéressant, n'est-ce pas ?
Maintenant, la fonction Cell. Pas mal, non ?
Remplace Range par Cell dans les lignes 17 à 22. Oui, oui, tout seul, comme un grand, sans autre aide que celle d'Excel.
Ca marche ? Ben maintenant, à toi de trouver comment décaler
Je te remercie pour ton aide précieuse, j'ai trouvé hier en faisant une recherche pour incrémentation+VB et j'ai pu observer la syntaxe
Voici le code définitif:
Voici le code définitif:
Function numeroter_fichier(fichier As String, numero As Integer) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
numeroter_fichier = FSO.GetParentFolderName(fichier) & "\" & _
FSO.GetBaseName(fichier) & "_" & numero & "." & _
FSO.GetExtensionName(fichier)
End Function
Public Sub ZolieProc(wb_1 As Workbook)
Dim num As Integer
Dim nom As String
Dim t_wb As Workbook
Dim s_ws As Worksheet
Dim t_ws As Worksheet
Set s_ws = Workbooks("L1RACK_FC_EA.xls").Worksheets("L1RACK_FC_EA")
For num = 1 To 5
i = num + 1
nom = numeroter_fichier(wb_1.Path & "\" & wb_1.Name, num)
wb_1.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
Set t_ws = t_wb.Worksheets(1)
t_ws.Range("B8").Value = s_ws.Range("E" & i).Value
t_ws.Range("F8").Value = s_ws.Range("D" & i).Value
t_ws.Range("F10").Value = s_ws.Range("I" & i).Value
t_ws.Range("B15").Value = s_ws.Range("A" & i).Value
t_ws.Range("G15").Value = s_ws.Range("B" & i).Value
t_ws.Range("J15").Value = s_ws.Range("C" & i).Value
t_wb.Save
t_wb.Close
Next
End Sub
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
ZolieProc ActiveWorkbook
End Sub
Pas mal.
Voici ce que je te proposais de découvrir :
Parce que là, ce sont des nombres, mais s'il avait fallu prendre la colonne suivante à la colonne D ?
Et encore mieux, parce que c'est plus lisible et plus variable :
Enjoy !
Voici ce que je te proposais de découvrir :
For num = 1 To 5
i = num + 1
...
t_ws.Cells(8, 2).Value = s_ws.Cells(i, 5).Value
t_ws.Range(8, 6).Value = s_ws.Cells(i, 4).Value
...
Next
Parce que là, ce sont des nombres, mais s'il avait fallu prendre la colonne suivante à la colonne D ?
Et encore mieux, parce que c'est plus lisible et plus variable :
For num = 1 To ...
...
t_ws.Cells(8, 2).Value = s_ws.Cells(num + 1, 5).Value
t_ws.Range(8, 6).Value = s_ws.Cells(num + 1, 4).Value
...
Next
Enjoy !
Et si tu cherchais un peu...
Lis donc ça : http://www.presence-pc.com/forum/ppc/Programmation/vous... (C'est de moi
)
Des que tu sauras faire pour un, tu pourras le mettre dans ta boucle pour le faire pour tous.
(En repassant ici et en montrant comment tu as fais, tu pourras recevoir d'autres critiques (objectives) et tu montreras un exemple que d'autres pourront réutiliser, c'est là tout ce qu'on te demande en remerciement
puisque tu posais la question.)
Lis donc ça : http://www.presence-pc.com/forum/ppc/Programmation/vous... (C'est de moi
)Des que tu sauras faire pour un, tu pourras le mettre dans ta boucle pour le faire pour tous.
(En repassant ici et en montrant comment tu as fais, tu pourras recevoir d'autres critiques (objectives) et tu montreras un exemple que d'autres pourront réutiliser, c'est là tout ce qu'on te demande en remerciement
puisque tu posais la question.)
Voila Zeb, j'ai trouvé en enregistrant une macro. Je sais qu'il y a des champs dans Print que je peux virer (style les 1 mais pas le nom de l'imprimante ou alors ca imprimera sur l'imprimante par défaut). Voici le code (dans l'attente de suggestions pour l'améliorer):
Function numeroter_fichier(fichier As String, numero As Integer) As String
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
numeroter_fichier = FSO.GetParentFolderName(fichier) & "\" & _
FSO.GetBaseName(fichier) & "_" & numero & "." & _
FSO.GetExtensionName(fichier)
End Function
Public Sub ZolieProc(wb_1 As Workbook)
Dim num As Integer
Dim nom As String
Dim t_wb As Workbook
Dim s_ws As Worksheet
Dim t_ws As Worksheet
Set s_ws = Workbooks("L1RACK_FC_EA.xlsx").Worksheets("L1RACK_FC_EA")
For num = 1 To 2
i = num + 1
nom = numeroter_fichier(wb_1.Path & "\" & wb_1.Name, num)
wb_1.SaveCopyAs nom
Set t_wb = Workbooks.Open(nom)
Set t_ws = t_wb.Worksheets(1)
t_ws.Range("B8").Value = s_ws.Range("E" & i).Value
t_ws.Range("F8").Value = s_ws.Range("D" & i).Value
t_ws.Range("F10").Value = s_ws.Range("I" & i).Value
t_ws.Range("B15").Value = s_ws.Range("A" & i).Value
t_ws.Range("G15").Value = s_ws.Range("B" & i).Value
t_ws.Range("J15").Value = s_ws.Range("C" & i).Value
t_wb.Save
Application.ActivePrinter = "PDFCreator sur Ne00:"
ExecuteExcel4Macro _
"PRINT(1,,,1,,,,,,,,2,""PDFCreator sur Ne00:"",,TRUE,,FALSE)"
t_wb.Close
Next
End Sub
Public Sub CommandButton1_Click() 'copie sauvegarde classeur
ZolieProc ActiveWorkbook
End Sub
Lassé par la pub ? Créez un compte
- Contenus similaires :

)