Macro copier fichier Excel selon nombre liste avec changement de nom

debutantenmacro Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute sur le forum et en VBA et je n'ai pas réussi à adapter ce que j'ai trouvé à ma problématique.

Je possède 2 fichiers :
- fichier 1 : mon fichier à copier
- fichier 2 : fichier qui contiendra les macros et un onglets avec une liste de nom

On me demande de copier mon fichier 1 autant de fois que j'ai de nom sur ma liste en renommant le fichier créer.

J'ai fait le code suivant mais j'ai une fenêtre qui s'ouvre en demandant une objet requis.

Sub CréationFichiers()

Dim firstRow As Integer
Dim lastRow As Integer
Dim i As Integer
Dim nomf As Workbook


CheminSource = Range("E3").Value (j'ai mis dans des cellules les noms et chemins)
FichierSource = chemin + "\" + Range("E4").Value

firstRow = pCells.Range("B4").Row
lastRow = Cells([B200].End(xlUp).Row, 1).Row

For i = firstRow To lastRow

nomf = Range("B" & i) (mes noms de fichiers sont entre B4 et B100)
FichierSource.Copy
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "\" & nomf & ".xlsm"
.Close
End With

Next i

End Sub


Quelqu'un aurait-il une idée ?
Par la suite, il faudra que je sélectionne des données dans un troisième fichier et que je les colle dans le bon fichier selon son nom mais je n'en suis pas encore à cette étape.

Je vous remercie d'avance pour votre temps.
A voir également:

4 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,
Y a déjà ceci:
firstRow = pCells.Range("B4").Row
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

Et ça
Dim nomf As Workbook
à remplacer par
Dim nomf As String

Cdlmnt
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Peut être comme ceci

Sub CréationFichiers()
Dim firstRow As Long, lastRow As Long, i As Long
Dim nomCopie As String, CheminSource As String, FichierSource As String
CheminSource = Range("E3").Value '(j'ai mis dans des cellules les noms et chemins)
FichierSource = CheminSource + "\" + Range("E4").Value & ".xls"
firstRow = 4
lastRow = Range("B" & Rows.Count).End(xlUp).Row
For i = firstRow To lastRow
  nomCopie = Range("B" & i) '(mes noms de fichiers sont entre B4 et B100)
  Workbooks.Open FichierSource
  With ActiveWorkbook
    .SaveAs ThisWorkbook.Path & "\" & nomCopie & ".xls"
    .Close
  End With
Next i
End Sub

Cdlmnt
0
debutantenmacro Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci à tous,

J'ai testé ton code ccm81. Par contre j'ai encore une erreur (400).

Cordialement.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Par contre j'ai encore une erreur (400).
Sur quelle ligne ? Chez moi, ça fonctionne
Pou tester, passes en mode pas à pas
- tu mets un point d'arret (click en marge de la première ligne CheminSource ....)
- exécuter
- la touche F8 te permet d'avance dans l'exécution
- tu passes le curseur sur les variables et tu vérifies leur valeur

Cdlmnt
0
debutantenmacro Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta rapidité.
L'erreur se situe au moment de la sauvegarde du nouveau fichier.
Etant donné que ce fichier a lui-même des macros j'ai mis l'extension en xlsm. L'erreur vient-il de là ?
Cordialement.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
je ne pense pas
as tu vérifié la valeur de nomCopie sur la ligne où ça plante ?
0