XL 2016 Macro pour copier valeur avec mise en page (plusieurs feuilles vers nouveau classeur)

melinavy

XLDnaute Nouveau
Bonjour à tous,

Je cherche à copier/coller les valeurs de plusieurs feuilles excel vers un nouveau classeur. Je voudrais copier/coller en valeurs (plus de formules) en gardant la mise en page si c'est possible. J'ai fait un fichier test (ci-joint). Pouvez-vous m'aider ?

Voici la macro qui fonctionne mais ne copie pas la mise en page :


Sub CopierColler()
Set twb = ThisWorkbook
Set wb = Workbooks.Add
For i = 1 To twb.Worksheets.Count - wb.Worksheets.Count 'créer des feuilles autant que nécesssaire
wb.Worksheets.Add
Next i
j = 0
For Each ws In twb.Worksheets
j = j + 1
ws.UsedRange.Copy
With wb.Worksheets(j).Range("A1")
.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.PasteSpecial Paste:=xlPasteColumnWidths
End With
Next
wb.SaveAs Filename:="C:\Users\Default\Documents\...\Feuille_test.xls"
End Sub

Merci pour votre aide !

pour info je suis vraiment débutante sur les macro !

Belle journée à tous
 

Pièces jointes

  • test.xlsx
    11.8 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici votre macro remaniée (juste quelques petites corrections) à apporter. Pour une débutante, c'est plutôt bien.
Vous verrez que la variable 'j' a disparu. La variable 'i', après la boucle est de nouveau disponible mais doit être remise à 0, rendant la variable 'j' inutile.

VB:
Sub CopierColler()
   
    Dim twb As Workbook, wb As Workbook
    Dim ws As Worksheet
    Dim i As Integer
    Set twb = ThisWorkbook
   
    Set wb = Workbooks.Add()
   
    For i = 1 To twb.Worksheets.Count - wb.Worksheets.Count    'créer des feuilles autant que nécesssaire
        wb.Worksheets.Add
    Next i
    i = 0
    For Each ws In twb.Worksheets
        i = i + 1
        With wb.Worksheets(i)
            ws.UsedRange.Copy .Range("A1")
            .UsedRange.Value = .UsedRange.Value ' Copier/coller des valeurs de la plage sur elle-meme (disparition des formules)
        End With
     
    Next
    wb.SaveAs Filename:=ThisWorkbook.Path & "\Feuille_test.xls"
End Sub

P.S. j'ai pour habitude de toujours déclarer toutes les variables, ce qui offre un confort très intéressant pour le débogage. De plus cela indique au moteur vb de quoi il aura besoin au moment de l'exécution en terme de mémoire et de son organisation.

Bon macrotage
 

melinavy

XLDnaute Nouveau
C'est super merci beaucoup !!

Est ce que je peux abuser de tes capacités ?? Dans le fichier de base qui est confidentiel, j'ai des colonnes masquées sur tous les onglets, est-il possible que la macro copie/colle seulement les colonnes visibles ? Pareil pour les lignes ?
Pour le quadrillage y a moyen de le désélectionner aussi ?

Encore merci pour ton aide !
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Les questions dites 'à tiroirs' ne sont généralement pas très appréciées. En particulier par ma petite personne qui découvre qu'il vient bosser pour rien.

Autre question, autre fil de discussion, préciser de quel 'cadrillage' il s'agit.

Bonne soirée
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 488
Messages
2 110 132
Membres
110 679
dernier inscrit
lpierr