Copie d'une page vers une autre

Suite de ce fil:

https://www.excel-pratique.com/forum/viewtopic.php?t=2279&start=10

Je me rends compte que la copie ne fonctionne pas comme je le voudrais. En effet, il copie les formules et non les valeurs obtenues.

Autrement dit, j'obtiens au final des jolis tableaux parfaitement mis en page, mais complètement vides... (à l'ouverture du fichier, il me propose de mettre à jour les liens, mais je ne veux pas ça puisque le fichier original n'est pas sauvegardé)

Voici le contenu de ma macro:

Sub Save_And_Close()

Dim Nom As String

Nom = Worksheets("Result").Range("C7")

Sheets("Result").Copy

ActiveWorkbook.SaveAs Filename:="I:\KWIKTECH\" & Nom & ".xls", FileFormat:=xlNormal

ActiveWorkbook.Close

Windows("KWIKTECH.xls").Activate

End Sub

Merci de m'aider, c'est assez urgent, évidemment

balty

Salut le forum

Balty modifie le début de ton code, deux lignes à inserer

Sheets("Result").Copy
Cells.Copy
Cells.PasteSpecial xlPasteValues

Mytå

Yeah, ça marche !

Je vais devoir finir par vous offrir une bonne bière un d'ces quatres

Merci Mytå !

Salut,

J'ai réutilisé cette macro dans un autre fichier, pour exporter une page.

Sub Test()

Dim Nom As String

Sheets("Quick Quote").Copy

Cells.Copy

Cells.PasteSpecial xlPasteValues

Nom = Worksheets("Input").Range("AA10")

ActiveWorkbook.SaveAs Filename:="C:\KWIKQUOTE\" & Nom & ".xls", FileFormat:=xlNormal

ActiveWorkbook.Close

Windows("KWIKQUOTE.XLS").Activate

End Sub

Malheureusement, il m'affiche l'erreur suivante quand j'exécute la macro:

runtime error '9':

Subscript out of range

Je dois préciser que j'ai le code suivant dans la page que je veux copier. Ce code met à jour une "pivot table" (connais pas le nom français) se trouvant dans une autre page:

Private Sub Worksheet_Activate()

Set pvtTable = Worksheets("BOM PROJECT").Range("B12").PivotTable

pvtTable.RefreshTable

End Sub

Donc, savez-vous comment contourner le problème ?

Merci

Salut Balty et le forum

Déplace cette ligne Nom = Worksheets("Input").Range("AA10")

Directement sous le Dim Nom As String

Car il cherche la feuille "Input" dans le nouveau fichier créer.

Reviens si cela ne fonctionne pas mieux

Mytå

P.S. Pivot Table c'est l'équivalent d'un Tableau Croisé Dynamique (TCD)

Salut,

J'ai fait la modif que tu proposes, mais ça n'arrange pas mon problème, il m'indique toujours un message d'erreur.

En fait, je crois comprendre le problème:

Le code que j'ai dans ma page originale (appelons la: "PAGE DEPART") demande de rafraichir un Tableau Croisé Dynamique qui se trouve dans le même document, mais sur une autre page ("AUTRE PAGE").

Alors, quand je copie ma PAGE DEPART vers un nouveau document, une fois la copie faite, il exécute le code qui rafraichit un Tableau Croisé Dynamique. Sauf que la page contenant ce TCD n'existe pas (puisque je n'ai copié qu'une seule page).

C'est un peu compliqué à expliquer, mais pour résumer, je pense qu'il faudrait que le code qui rafraichit mon TCD automatiquement ait une condition du genre:

Si "AUTRE PAGE" existe, alors rafraichit le Tableau Croisé Dynamique de la case X contenue dans "AUTRE PAGE", sinon, ne fais rien.

C'est possible ça ?

Voici mon code actuel, qui rafraichit ma page appelée "Result" dès que je l'ouvre:

Private Sub Worksheet_Activate()

Set pvtTable = Worksheets("Calculation").Range("AD9").PivotTable

pvtTable.RefreshTable

Set pvtTable = Worksheets("Calculation").Range("AQ27").PivotTable

pvtTable.RefreshTable

End Sub

(dans mon cas, il rafraichit même deux Tableau Croisé Dynamique en même temps)

Merci pour votre aide.

balty

EDIT: remplacement de "pivottable" par "Tableau Croisé Dynamique"

Salut Balty et le forum

Essaye avec le code suivant, cela devrait résoudre ton problème

Private Sub Worksheet_Activate()
If FeuilleExiste("Calculation") = False Then Exit Sub
Set pvtTable = Worksheets("Calculation").Range("AD9").PivotTable
pvtTable.RefreshTable
Set pvtTable = Worksheets("Calculation").Range("AQ27").PivotTable
pvtTable.RefreshTable
End Sub

Function FeuilleExiste(Nom$) As Boolean
'Vérifie si la feuille existe
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
End Function

Mytå

Je n'avais pas eu le temps d'essayer, mais ça fonctionne... évidemment

Merci à toi Mytå (et aux autres)

Rechercher des sujets similaires à "copie page"