Copier/Coller Classeur en valeur sauf certaines feuilles

Y compris Power BI, Power Query et toute autre question en lien avec Excel
l
liljuan
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 1 octobre 2013
Version d'Excel : 2010

Message par liljuan » 9 février 2018, 11:22

Bonjour à tous,

J'explique un peu plus le sujet par un ex:

J'ai un classeur de 20 onglets. Je souhaites faire une copie de ce classeur répartie comme suit: 18 onglets en valeur + 2 onglets qui gardent les formules.

J'ai déjà un code qui permet de TOUT passer en valeur. Mais comme je suis une bille en VBA, je ne sais lui dire de ne copier que certains onglets.

Le voici:
Sub testCopieValeursSeules()
Dim ws As Worksheet, wsArr(), NomFic$, nWBK As Workbook, i&
'création chaine pour nom du fichier
NomFic = ThisWorkbook.Path & "\" & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & " - Suivi hebdo reps"
ReDim wsArr(0)
'création d'un tableau avec le noms des feuilles choisies
For Each ws In ThisWorkbook.Worksheets
'on exclut deux feuilles dans la liste selon leur nom
   If Not ws.Name = "YTD_TCD" And Not ws.Name = "WTD" And Not ws.Name = "TCD_NEW_SAF" And Not ws.Name = "Région" And Not ws.Name = "TABLE REPS" And Not ws.Name = "Productivité" Then
    wsArr(UBound(wsArr)) = ws.Name
    ReDim Preserve wsArr(UBound(wsArr) + 1)
    End If
    Next ws
ReDim Preserve wsArr(UBound(wsArr) - 1)
'on créee une copie du classeur ne contenant que les feuilles désirées
Sheets(wsArr).Copy
Set nWBK = ActiveWorkbook
'le contenu de toutes les feuilles passe en valeurs seules
For i = 1 To nWBK.Worksheets.Count
With nWBK.Worksheets(i)
.UsedRange.Value = .UsedRange.Value
End With
Next i
'ici ajouter ton code pour sauvegarder la copie
nWBK.SaveAs NomFic & ".xlsx", xlOpenXMLWorkbook
nWBK.Close
End Sub
Je pense qu'au niveau de la partie "'le contenu de toutes les feuilles passe en valeurs seules", il est possible de lui indiquer que 2 (ou plus) onglets (dont j'écrirai le(s) nom(s)). Mais incapable de le faire.

Merci beaucoup :)
Jean
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'803
Appréciations reçues : 361
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 9 février 2018, 20:51

Bonjour

Un essai à tester. Te convient-il ?
Bye !
Classeur1.xlsm
(46.04 Kio) Téléchargé 13 fois
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'339
Appréciations reçues : 663
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 10 février 2018, 11:52

Bonjour,
Une autre proposition à étudier. :wink:
Cdlt.
liljuan.xlsm
(22.97 Kio) Téléchargé 9 fois
Option Explicit

Public Sub CopyWorkbook()
Dim ws As Worksheet, sFile As String
    sFile = ThisWorkbook.Path & "\" & Format(Date, "dd-mm-yyyy") & " - Suivi hebdo reps"
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs Filename:=sFile, FileFormat:=51
    For Each ws In ActiveWorkbook.Worksheets
        Select Case ws.Name
            Case "Feuil1", "Feuil2":
            Case Else: ws.UsedRange.Value = ws.UsedRange.Value
        End Select
    Next ws
    ActiveWorkbook.Save
End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
l
liljuan
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 1 octobre 2013
Version d'Excel : 2010

Message par liljuan » 10 février 2018, 14:01

Merci a vous deux ! :)

Je testerai lundi au bureau.

Bon weekend,
Jean
l
liljuan
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 1 octobre 2013
Version d'Excel : 2010

Message par liljuan » 12 février 2018, 15:07

Salut à tous,

En mélangeant les deux codes, j'obtiens parfaitement ce que je veux.

Pour cela merci :)

En revanche, et pour pousser le truc à la fin, lorsque le nouveau classeur se créé, le format des valeurs diffère du format original.

Auriez-vous une idée de pourquoi ?

Ex:
- format initial: 13 590€
- format nouveau fichier: €13 590,00
Sub CopieValeursSeules()
Dim ws As Worksheet, wsArr(), NomFic$, nWBK As Workbook, i&
'création chaine pour nom du fichier
NomFic = ThisWorkbook.Path & "\" & Month(Date) - 1 & "-" & Year(Date) & " - RGC"
ReDim wsArr(0)
'création d'un tableau avec le noms des feuilles choisies
For Each ws In ThisWorkbook.Worksheets
'on exclut deux feuilles dans la liste selon leur nom
   If Not ws.Name = "TABLE" Then
    wsArr(UBound(wsArr)) = ws.Name
    ReDim Preserve wsArr(UBound(wsArr) + 1)
    End If
    Next ws
ReDim Preserve wsArr(UBound(wsArr) - 1)
'on créee une copie du classeur ne contenant que les feuilles désirées
Sheets(wsArr).Copy
Set nWBK = ActiveWorkbook
'le contenu de toutes les feuilles passe en valeurs seules

For Each ws In ActiveWorkbook.Worksheets
        Select Case ws.Name
            Case "Sommaire", "Christophe", "Francois", "Catherine", "Frederic", "Thierry", "TCD", "TCD_POS", "BDG", "TABLES":
            Case Else: ws.UsedRange.Value = ws.UsedRange.Value
        End Select
    Next ws

'ici ajouter ton code pour sauvegarder la copie
nWBK.SaveAs NomFic & ".xlsx", xlOpenXMLWorkbook
nWBK.Close
End Sub
Merci beaucoup !!
Jean
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'339
Appréciations reçues : 663
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 3 avril 2018, 00:47

Bonjour,
Oups !... erreur. :oops:
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message