Exporter des lignes non masquées vers un nouveau classeur Excel


#1

Bonjour,

Je vous présente l’objet de ma demande:
J’utilise un fichier excel qui contient plusieurs onglets, et parmi ces onglets l’un d’entre eux rassemble les informations d’une multitude de ces onglets dans un tableau récapitulatif (à partir de formules basiques).
Selon les différents critères remplis dans les autres onglets, certaines lignes du tableau sont automatiquement masquées par une macro.

Jusqu’ici tout fonctionne bien.

Ce que je souhaite pouvoir faire, c’est exporter certaines lignes de ce tableau vers un nouveau classeur Excel, en respectant les conditions suivantes :

  • Seules les lignes “visibles” doivent être exportées
  • Le format du tableau doit être conservé dans le nouveau classeur Excel
  • Je souhaite exporter les données sous forme de valeur dans le nouveau tableau Excel (et non les formules qui permettent de calculer ces valeurs)
  • L’enregistrement du nouveau classeur doit être obligatoirement effectué en format “Excel 97-2003 .xls” (SaveAs Filename:=xxx, FileFormat:=56)
  • dans l’ideal, l’enregistrement du fichier serait automatique sans intervention de l’utilisateur.

De mon côté, j’ai déjà commencé à imaginer ça :

Option Explicit

Sub toto2()
Dim nom As String
Dim Export As String

nom = "test.xls"
Export = ActiveWorkbook.Name
Application.Workbooks.Add


With Workbooks(Export).ActiveSheet.Cells.SpecialCells(xlCellTypeVisible)
.Copy
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
Application.DisplayAlerts = False
Workbooks(Export).SaveAs nom, 56
Application.DisplayAlerts = True
End Sub

Mais la fonction échoue au moment de la fonction PasteSpecial.

Des avis ?

Merci


#2

Bonjour,

Teste comme ceci

Sub toto2()
Dim nom As String
Dim Export As String

nom = "test.xls"
Export = ActiveWorkbook.Name

Range("A1").CurrentRegion.Copy
  With Application
      .Workbooks.Add
  End With
Worksheets("Feuil1").Select
Range("A1").PasteSpecial Paste:=xlValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs nom, 56
Application.DisplayAlerts = True
End Sub

#3

Bonjour Mimimathy et merci pour ton aide.

J’ai testé ta version de la Macro et j’obtiens les soucis suivants :

  • Le copier/coller s’effectue dans le document d’origine (rien n’est collé dans le nouveau classeur)
  • Il semblerait que la sélection soit faite sur l’ensemble du document et pas seulement sur les lignes visibles (les lignes masquées sont inclues dans le copier/coller)

Dans la macro que j’ai précédemment proposée, j’ai l’impression que le souci se situe dans le paragraphe suivant :

With Workbooks(Export).ActiveSheet.Cells.SpecialCells(xlCellTypeVisible)
.Copy
.PasteSpecial Paste:=xlPasteFormats
.PasteSpecial Paste:=xlPasteValues
End With

Dans la mesure où, à l’execution pas à pas, j’ai l’impression que la copie et le paste sont effectués dans le même document, au lieu que le copy soit fait dans le classeur de départ et le paste dans le classeur fraîchement créé.
Ne serait-ce pas une piste ? (je ne suis pas du tout expert en VBA et ma question est peut-être bête)


#4

Re

comme ceci

Sub toto2()
Dim nom As String
Dim Export As String
Dim newbook As Workbook
nom = "test.xls"
Export = ActiveWorkbook.Name
Workbooks(Export).ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Copy
Set newbook = Workbooks.Add
Worksheets("Feuil1").Activate
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.DisplayAlerts = False
newbook.SaveAs nom, 56
Application.DisplayAlerts = True
End Sub

#5

Merci

Désormais, cela échoue au niveau de :

Workbooks(Export).ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Copy

Si tu as besoin du fichier excel pour que ce soit plus simple, je peux éventuellement te le partager :slight_smile:


#6

Ben c’est plus pratique :wink:


#7

En te préparant une copie de mon fichier et en recopiant ta macro, celle-ci à bien fonctionné semble-t-il ! :slight_smile:
Il ne me reste plus qu’une chose à régler :

  • conserver la mise en forme des cellules dans le nouveau classeur (les valeurs sont bien exportées)

Je suppose qu’il faut que j’utilise la fonction Paste:=xlPasteFormats mais je ne sais pas exactement comment l’ajouter à la fonction :

Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False


#8

Bonjour à tous,

Je me réponds à moi même pour la résolution du dernier point :
Il suffit de refaire une seconde fois l’instruction “Selection.PasteSpecial Paste:=xlFormats”

Bonne journée à tous