Modification de macros

bonjour à vous,

j'ai ce code pour fusionner plusieurs fichiers en un seul. Je voudrais modifier la ligne qui renomme l'onglet à ajouter, en mettant à la place de "ma page" le titre du document où l'onglet a été copié.

Par exemple si l'onglet ajouté provient du document xxx, nommer l'onglet dans le nouveau document de fusion xxx.

Voici le code:

Sub consolide()
  ChDir ActiveWorkbook.Path
  Set classeurMaitre = ActiveWorkbook
  sup
  compteur = 1
  nf = Dir("*.xls")
  Do While nf <> ""
    If nf <> classeurMaitre.Name Then
      Workbooks.Open Filename:=nf
      For k = 1 To Sheets.Count
        Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "Mapage" & compteur
        compteur = compteur + 1
      Next k
      Workbooks(nf).Close False
    End If
    nf = Dir
  Loop
End Sub

Merci à vous.

Bonjour

Sans test

essayes

Sub consolide()
  ChDir ActiveWorkbook.Path
  Set classeurMaitre = ActiveWorkbook
  sup
  compteur = 1
  nf = Dir("*.xls")
  Do While nf <> ""
    If nf <> classeurMaitre.Name Then
      Workbooks.Open Filename:=nf
      For k = 1 To Sheets.Count
        Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        [barrer]classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "Mapage" & compteur[/barrer]
        classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = ActiveWorkbook.Name  & compteur
        compteur = compteur + 1
      Next k
      Workbooks(nf).Close False
    End If
    nf = Dir
  Loop

Merci beaucoup pour cette reponse aussi rapide.

Il y a juste un problème ça me met le nom du classeur où je fusionne l'ensemble de mes documents, mais pas celui d'où proviennent les feuilles.

Merci encore.

Bonjour

Bizarre

Quand on ouvre un classeur, celui-ci devient actif

Attendre une autre réponse

Désolé

Ok pas de problème merci quand même.

Bonjour

J'insiste

Sub consolide()
Dim ClasseurOuvert As Workbook

  ChDir ActiveWorkbook.Path
  Set classeurMaitre = ActiveWorkbook
  compteur = 1
  nf = Dir("*.xls")
  Do While nf <> ""
    If nf <> classeurMaitre.Name Then
      Set ClasseurOuvert = Workbooks.Open(Filename:=nf)
      For k = 1 To Sheets.Count
        Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
        'classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = "Mapage" & compteur
        classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = ClasseurOuvert.Name & compteur
        compteur = compteur + 1
      Next k
      Workbooks(nf).Close False
    End If
    nf = Dir
  Loop
End Sub

Là c'est testé et cela fonctionne

ok je regarde ça desuite.

Sinon j'ai trouvé un moyen de le faire mais 2 fois:

1) je renomme toutes les feuilles par le nom du classeur auquel elles appartiennent

2) je les fusionne entre elles

Merci encore une fois


Ca marche très bien merci beaucoup!

Bonjour,

je reprends ce fil après quelques années car cette solution m'intéresse beaucoup.

J'ai également besoin de consolider plusieurs classeurs (à un onglet mais il pourrait m'arriver d'en avoir besoin pour plusieurs onglets) en un seul.

J'aimerais que l'onglet importé garde son nom d'origine ou alors ocmme dans la solution proposée ci dessus le nom de son classeur d'origine.

Voilà le code que j'ai essayé :

Sub consolide()
Dim ClasseurOuvert As Workbook

  ChDir ActiveWorkbook.Path
  Set classeurMaitre = ActiveWorkbook
  compteur = 1
  nf = Dir("*.xls")
  Do While nf <> ""
    If nf <> classeurMaitre.Name Then
      Set ClasseurOuvert = Workbooks.Open(Filename:=nf)
      For k = 1 To Sheets.Count
        Sheets(k).Copy After:=classeurMaitre.Sheets(classeurMaitre.Sheets.Count)
       classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = ClasseurOuvert.Name & compteur
        compteur = compteur + 1
      Next k
      Workbooks(nf).Close False
    End If
    nf = Dir
  Loop
End Sub

Seulement, cela fonctionne avec les deux premiers classueurs mais ensuite, un message d'erreur apparait : Run-timme error '1004', invalid name/ Cela concerne la ligne :

       classeurMaitre.Sheets(classeurMaitre.Sheets.Count).Name = ClasseurOuvert.Name & compteur

Quelqu'un peut-il m'aider là dessus ?

Merci !

Bonjour et bienvenu

Sans fichier test cela ne va pas être évident

Normalement si ce code fonctionnait il y a 2 ans il n'y a pas de raison qu'il bugge maintenant

Ce qui serait intéressant serait de savoir si c'est le 3ème fichier (dans tous les cas) ou seulement celui-là

Copies ce 3ème fichier dans un autre dossier

Fais le test et dis ce qui se passe

A suivre

Bonjour,

merci pour votre retour ! Et pardon pour le délai, je n'ai d'abord pas vu la réponse puis suis parti en vacances...

J'ai donc refais le test avec d'autre fichiers et c'est toujours le troisième fichier qui pose problème.

Cette fois ci (j'ai essayé avec Excel 2010), le message d'erreur est plus clair, il dit :

Run-Time error '1004':

You typed an invalid name for a sheet or chart. Make sure that:

>The name that you type does not exceed 31 characters.

>The name does not contain any of the following characters: :\/?*[ or ]

>You did not leave the name blank.

Alors que je nom des onglets est très simple dans cet exemple... L'erreur surligne une fois encore la même ligne que précédement après ce message d'erreur.

Je voudrais compiler tous les onglets des classeurs 1 à 5 dans le worksheet compile. L'exemple est bête mais si ça marche avec ça, ça marchera quand je dois le faire pour beaucoupl plus de fichiers !

Merci d'avance pour ton aide !

Bonjour

Je pense que l'erreur est celle-ci "The name that you type does not exceed 31 characters."

A tester

Merci, c'est parfait pour le moment : tout fonctionne !

Merci pour le coup de main, bonne journée !

Rechercher des sujets similaires à "modification macros"