Copie de plusieurs WSheet -> Nouveau WBook

Bonjour a tous,

Je suis confronte a un petit soucis sur un morceau de code emprunte sur un forum anglais...

A partir d'une macro, (appellee "Export") je souhaite pouvoir copier certains onglets listes dans l'onglet Export.

Jusqu'ici tout va bien..

La ou cela commence a coicner, c'est que je souhaite casser le liens uniquement pour les onglets "tableau 1" et "tableau 2" du nouveau calsseur, et de garder les formules actives dans le nouveau classeur pour l'onglet recap.

Bien entedu ces formules doivent ne doivent pas etre liees au classeur source mais au niveau..

Est-ce quelque chose de faisable?

Une idee ou une piste d'idee pour m'aider?

Bien entendu en piece jointe un fichier exmple.

Si je n'ai pas ete assez clair, je peux re-expliquer !

Merci a tous de votre aide !

Gilles

Bonjour

A tester

Bonjour Bonzai64,

Merci de ton aide.

J'ai regardé ton fichier et cela semble correspondre a mes attentes, du moins a adapter bien sur !

En revanche, j'aurais besoin de quelques précisions sur tes lignes de code, quelques commentaires pour faciliter l'adaptation !

Sub Export()
Dim wbOld As Workbook
Dim I As Integer, Indice As Integer
Dim J As Long
Dim LesFeuilles()
Dim Chemin As String, Fichier As String

  Application.ScreenUpdating = False

  Chemin = ThisWorkbook.Path & "\"
  Fichier = "Les Tableaux"

  With Sheets("Export")
    For J = 5 To .Range("B" & Rows.Count).End(xlUp).Row
      ReDim Preserve LesFeuilles(Indice)
      LesFeuilles(Indice) = .Range("B" & J)
      Indice = Indice + 1
    Next J
  End With

  Sheets(LesFeuilles).Copy

  For I = 0 To UBound(LesFeuilles) - 1
    With Sheets(LesFeuilles(I))
      .Select
      .Cells.Copy
      .Range("A1").PasteSpecial Paste:=xlPasteValues
      .Range("A1").Select
    End With
  Next I
  Application.DisplayAlerts = False     ' Ecrase l'ancien sans prévenir
  ActiveWorkbook.SaveAs Chemin & Fichier, FileFormat:=xlOpenXMLWorkbook
  ActiveWorkbook.Close
  MsgBox "Le fichier" & vbCr & Fichier & vbCr & "est dans le dossier" & vbCr & Chemin
End Sub

A quel moment vba sait quelle est la feuille qu'il doit copier en cassant le liens, et les autres pour lesquels les liens doivent rester actifs?

Est-il possible de définir une plage de cellules dont les liens vont etre cassés et une autre ou les formules vont rester actives sur un meme onglet?

Enfin, je ne vois pas de procédure de création de workbook !? (oui je suis encore novice, mais là ca m'intrigue quand meme ! )

Merci ton aide !

Bien cordialement,

Gilles

Bonjour

Jay_Stu a écrit :

A quel moment vba sait quelle est la feuille qu'il doit copier en cassant le liens, et les autres pour lesquels les liens doivent rester actifs?

D'après ce que tu as marqué

Jay_Stu a écrit :

c'est que je souhaite casser le liens uniquement pour les onglets "tableau 1" et "tableau 2" du nouveau calsseur, et de garder les formules actives dans le nouveau classeur pour l'onglet recap.

et dans la liste "recap" est placé en dernier

Jay_Stu a écrit :

Est-il possible de définir une plage de cellules dont les liens vont etre cassés et une autre ou les formules vont rester actives sur un meme onglet?

Je pense que c'est faisable if faut remplacer

      .Cells.Copy
      .Range("A1").PasteSpecial Paste:=xlPasteValues

par

      .Range("C4:F20").Copy       ' Zone de perte de lien
      .Range("C4").PasteSpecial Paste:=xlPasteValues
Jay_Stu a écrit :

je ne vois pas de procédure de création de workbook !?

Voir commentaire

A lire

Bonjour,

Merci pour les commentaires ajoutes et les explications.

J'ai donc repris le code et l'ai copie dans mon fichier. Pas d'adaptation particuliere, hormis le nombre total d'onglets a copier (32).

Neanmoins le code bloque sur la ligne :

Sheets(LesFeuilles).Copy                  ' Création du nouveau fichier

Avec pour message Run-time error '9': Subscript out of range.

Le debut se deroule sans problemes, "LesFeuilles(Indice)" trouve bien le nom de chaque feuille qui est a copier.

Mais apres, le meme message se repete, sans comprendre pourquoi..

Par ailleurs dans la ligne :

Sheets(LesFeuilles).Copy                  ' Création du nouveau fichier

je ne vois pas en quoi un nouveau classeur est cree ? Est-ce dans la declaration des variables avec "Dim LesFeuilles ()" ?

Merci de l'aide,

Ok, une erreur basique et stupide de mar part.. une faute d'ortographe sur le nom d'une feuille !

Je vais regarder ce que ca donne de plus pres maintenant du coup !

Bonjour

Jay_Stu a écrit :

je ne vois pas en quoi un nouveau classeur est cree ?

Extrait de l'aide

Sheets.Copy, méthode

Cette méthode copie la feuille à un autre emplacement dans le classeur.

Syntaxe

expression.Copy(Before, After)

Remarques

Si vous ne spécifiez ni l'argument Avant ni l'argument Après, Microsoft Excel crée un nouveau classeur contenant la feuille copiée.

Bonjour Bonzai64,

Me revoilà après mon weekend et quelques tests!

La macro tourne correctement, pas de soucis de copier/coller etc..

En revanche, impossible de sauvegarder, ou meme fermer le nouveau classeur (uniquement) sans faire planter Excel !

Excel me dit "Microsoft Excel a cessé de fonctionner".

Puis ferme les deux fichiers.

Re-ouvre et répare le fichier original puis m'informe impossible de réparer car il est corrompu.. (pas convaincu !!!)

Voici le code complet :

Private Sub CommandButton24_Click()
Dim I As Integer, Indice As Integer
Dim J As Long
Dim LesFeuilles()
Dim Chemin As String, Fichier As String

  Application.ScreenUpdating = False        ' On ne voit rien (Création du nouveau fichier )

  With Sheets("Export")                     ' On "bosse" avec cette feuille
    For J = 5 To .Range("B" & Rows.Count).End(xlUp).Row   ' de la ligne 5 à  la fin des données
      ReDim Preserve LesFeuilles(Indice)    ' On augmente la taille du tableau san sperdres les données éventuelles
      LesFeuilles(Indice) = .Range("B" & J) ' On stocke le nom de la feuille dans le tableau
      Indice = Indice + 1                   ' Prochaine dimension du tableau
    Next J
  End With

  Sheets(LesFeuilles).Copy                  ' Création du nouveau fichier

  For I = 0 To UBound(LesFeuilles) - 16      ' On passe en revue les feuilles copiées sauf la dernière
    With Sheets(LesFeuilles(I))             ' Les opération suivantes se passent dans cette feuille
      .Select                               ' On la sélectionne (pas utile mais pour la présentation)
      .Range("A1:L35").Copy                           ' On copie toute les cellules
      .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False  ' On recopie à la même place les valeurs ---> Exit les formules (les liens)
      .Range("A1").Select                   ' On sélectionne la cellule A1 (pas utile mais pour la présentation)
    End With
  Next I

 Sheets("Naviguation").Move Before:=Sheets("Vis")

  'Application.DisplayAlerts = False         ' Ecrase l'ancien sans prévenir
  'ActiveWorkbook.SaveAs , FileFormat:=xlOpenXMLWorkbook ' Sauvegarde du fichier
  'ActiveWorkbook.Close                      ' Fermeture du fichier
  MsgBox "Le Fichier a bien ete cree"   ' Message

End Sub

Je penche sur le fait qu'il y a des controles ActiveX sur chaque feuille (36 au total) +associé a un UserForm qui fait office de panneau de naviguation.

De plus, il y a des la mise en forme avec couleur et cellules fusionnées sur chacune de ces feuilles..

Du coup trop d'éléments dans le presse-papier etc..

J'ai essayé sur plusieurs PCs, sur tous la macro tourne très rapidement (quelques secondes), mais sur aucun il n'est possible d'enregistrer ou fermer les fichiers sans qu'excel ne plante.. =(

Une idée enventuellement?

Merci de ton aide,

Gilles

Bonjour

Bien sur je viens de tester avec le fichier à ma disposition et pas de souci

Donc sans le fichier en cause , cela ne va pas être facile de trouver le pourquoi du comment (et encore ce n'est pas sur)

A toi de voir

Bonjour,

Bien sur je souhaiterai pouvoir le mettre a disposition, mais il s'agit d'un ficher de travail avec des donnees de vente...

Mais apres une (longue) nuit de recherche un peu partout, j'ai trouve la solution !

Pour ceux que ca interesse eventuellement, je suppose qu'il y a deux raisons a mon probleme :

  • Trop de tableaux "automatique" -> passer par "Convertir en plage"
  • Des liens encore present par-ci par-la sur mes differentes feuilles -> supprimer correctement les liens pour eviter qu'ils ne se retrouvent dans le fichier cree !

Donc voila, ouf !

Merci de ton temps et de ton aide !

A plus,

Gilles

Rechercher des sujets similaires à "copie wsheet nouveau wbook"