Macro copier feuille dans fichier Template en boucle

Bonjour a tous,

j'ai besoin d'une aide svp j'ai fichiers Excel A qui contient module et formulaire et des fichiers b1,b2 contenent seulement une feuille qui s'appelle Feuil2.

Je dois copier la feuille Feuil 2 du fichier b1 dans fichier A puis sauvegarder sous le nom cellule A2& B2 de la feuil2 ensuite passer au fichier b2 faire la même opération puis etc....

A la fin de l'opération les fichiers b1,b2 etc... devinent une copie du fichier A et comme nom fichier la cellule A2& B2 de chaque fichier.

Un très grand merci d'avance !

13fichierb2.xlsx (465.25 Ko)
10fichierb1.xlsx (465.09 Ko)
16fichiera.xlsm (27.70 Ko)

Bonsoir,

Compte tenu de tes indications :

Sub ImporterFeuilles()
    Dim wss As Worksheet, cls$, ncl$, nf$, i%
    Application.ScreenUpdating = False
    For i = 1 To 2
        cls = "Fichierb" & i & ".xlsx"
        Set wss = Workbooks(cls).Worksheets("Feuil2")
        ncl = wss.[A2] & " " & wss.[B2]: nf = wss.[B2]
        ncl = Replace(ncl, "/", "-")
        With ThisWorkbook
            wss.Copy after:=.Worksheets(.Worksheets.Count)
            ActiveSheet.Name = nf
        End With
        Workbooks(cls).SaveAs ncl & ".xlsx"
    Next i
End Sub

Cordialement.

Bonjour MFerrand

Merci d'avoir pris le temps sur mon sujet

Malheureusement c'est pas vraiment ça je pense que je me sur mal exprimés.

Je souhaite une moulinette qui copie la feuil2 du fichierb1 dans le fichier A ensuite sauvegarder sous le fichier A en renomment

Avec le contenu des cellule A2&B2 de la feuil2 et reproduire la même chose avec le fichierb2.

Mais il possibles avoir plusieurs fichierbX c'est dire une boucle au tant de nouveaux fichier A que de fichierb.

Au finale dans notre exemple j'aurais deux nouveaux fichiers au meme format

que le fichier A contenant la nouvelle feuil2 et le nom des nouveaux fichiers les données des cellule de A2&B2 de la feuil2.

J'espère c Est plus clair pour toi.

Merci infiniment pour ton aide

Bonjour,

Tu t'étais peut-être mal exprimé... mais à nouveau c'est pas mieux !

Clarifions :

Fichier Excel ou Classeur c'est synonyme.

Copier une feuille, c'est copier la feuille entière (en tant que telle) : la feuille du fichier source se retrouve dans le fichier cible en tant que nouvelle feuille (s'agissant d'une copie, elle demeure dans le fichier source).

La macro prend donc la feuille de b1 et la copie dans A : à la fin car tu n'as rien précisé à ce sujet, elle la renomme (car tu n'as rien précisé non plus sur ce point et cumuler des Feuil2 ne serait pas rationnel, on prend le nom en B2 pour cela car A2&B2 risquerait de conduire à un nom trop long et comportant des caractères interdits, d'où risque d'erreur...)

Sauvegarder sous un nom, c'est nécessairement Enregistrer un classeur sous un nouveau nom !

Dans ta première demande :

Je dois copier la feuille Feuil 2 du fichier b1 dans fichier A puis sauvegarder sous le nom cellule A2& B2 de la feuil2

On ne peut qu'en déduire qu'on enregistre b1 sous le nouveau nom A2&B2 (dont il faut cependant extirper les caractères inadéquats).

Ton dernier post :

ensuite sauvegarder sous le fichier A en renomment

indiquerait qu'il s'agit d'enregistrer le fichier A !

C'est faisable, et dans ce cas Feuil2 peut garder son nom et on procèdera à l'enregistrement d'une copie de façon à continuer de travailler avec le fichier A...

Sub ImporterFeuilles()
    Dim wss As Worksheet, cls$, ncl$, i%
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For i = 1 To 2
        cls = "Fichierb" & i & ".xlsx"
        Set wss = Workbooks(cls).Worksheets("Feuil2")
        ncl = wss.[A2] & " " & wss.[B2]
        ncl = Replace(ncl, "/", "-") & ".xlsm"
        With ThisWorkbook
            wss.Copy after:=.Worksheets(.Worksheets.Count)
            .SaveCopyAs ncl
            .Worksheets(.Worksheets.Count).Delete
        End With
        Workbooks(cls).Close False
    Next i
End Sub

Voilà qui sauvegarde le fichierA sous un nouveau nom pour chaque fichier b, le fichier A initial étant conservé sous son nom.

A noter que cette nouvelle version, comme la précédente, présuppose que les fichiers b sont ouverts lorsque tu lances l'opération (tu n'as fourni aucune indication d'une autre procédure à suivre). De même les enregistrements se feront dans le répertoire courant (pas d'indication autre à ce sujet...)

Pour ce qui est de la boucle : tu as indiqué b1 et b2, on boucle donc sur ces deux. Si tu en ajoutes : b3 et b4 par exemple, il suffit de boucler de 1 à 4. En l'état des informations, la macro ne peut définir elle-même le terme de la boucle : supposons n classeurs de b1 à bn, il faudrait qu'elle puisse récupérer la valeur n indicative du nombre de classeurs à traiter quelque part pour pouvoir auto-définir la boucle.

Cordialement.

Re bonjour MFerrand

Merci encore une fois pour ton implication

ton code fait presque ce que je souhaite, j'ai trouvé une solution qui conviendrais a ma demande voir la moulinette en Pj "MacroChargementDonnées_V01.xlsm".

Etape1 : Je clique une première fois pour sélectionné le fichierb1.

Etape2 : je sélectionne le dossier que nous allons appelé "dossier cible" contenant le fichierA.

le résultat du traitement nous avons un un nouveau fichier dans le "dossier cible"

  • le nom du nouveau fichier = aux valeurs des la cellule A2& "_"&B2 de l'onglet "Feuil2" ---> OK
  • Nouvelle onglet "Feuil2" dans le le nouveau fichier---> OK

Mon problème je voudrais remplacer l'étape1 par la sélection d'un dossier source contenant plusieurs de type fichierb.

je ne sais pas comment faire pour bouclé sur plusieurs de type fichierb et avoir comme résultat dans le "dossier cible" au tant de nouveaux fichiers de type A.

Procédure :

  • Créer un dossier source mettre les fichierb1 et ficherb2
  • Créer un dossier Cible mettre le fichierA
Exécuter le fichier "MacroChargementDonnées_V01.xlsm"

et suivre les étapes ci-dessus.

j’espère que je me suis pas trop éparpillé

Merci à toi et au développeur de forum.

8fichierb2.xlsx (465.25 Ko)
11fichierb1.xlsx (465.09 Ko)
9fichiera.xlsm (27.70 Ko)

Bonjour,

ton code fait presque ce que je souhaite, j'ai trouvé une solution qui conviendrais a ma demande voir la moulinette en Pj "MacroChargementDonnées_V01.xlsm".

J'ai vu ! (pas lu !).

Je ne suis pas d'en d'assez bonnes dispositions ce jour pour me taper la lecture d'un code non parfaitement indenté (avec des règles strictes) et sans lignes sautées à tout bout de champ à l'intérieur des procédures.

La proc. Sub me paraît un peu longue pour ce qui est à faire. La mode consistant à lister les déclarations de variables (une ligne par variable) ne m'agrée pas spécialement, elle ne fait qu'allonger la proc. Cela met en évidence qu'il y a un grand nombre de variable et je ne serais donc pas étonné qu'au moins la moitié soient inutiles au regard des tâches à réaliser.

En outre, on place toujours dans un module les procédure Function avant les procédures Sub. C'est une convention, tout à fait justifiée par ailleurs, et qui de plus fait gagner du temps à l'usage. Et le mot Public est inutile s'agissant de procédures, en VBA toutes les procédures sont publiques par défaut...

Tu as donc ajouté un fichier destiné à la réalisation de l'opération. Le fichier A devient en quelque sorte un modèle pour la génération des nouveaux fichiers... Cela peut se concevoir.

[quote]Mon problème je voudrais remplacer l'étape1 par la sélection d'un dossier source contenant plusieurs de type fichierb./quote]

Tu utilises la fonction Dir pour cibler les fichiers de ton répertoire source et les traiter en boucle. En gros :

    '...
    Fich = Dir(CheminSource & "*.xlsx")
    Do While Fich <> ""
        'Traitement du fichier
        Fich = Dir()
    Loop
    '...

Cordialement.

Bonjour MFerrand,

Tu as exactement répondu a mes attentes et je t'en remercie!

a bientôt

Rechercher des sujets similaires à "macro copier feuille fichier template boucle"