Création Fichier copie (en valeur sans les formules)

Bonjour à toutes et tous,

Je suis étudiant je débute tout juste VBA, mais on me demande en alternance de créer un bouton avec une macros VBA afin de créé une une copie d'un fichier sans reprendre les formules (avoir juste les résultats en brut). Je ne sais pas par où commencer si je peux avoir quelques conseils.

J'ai trouvé un code vba que je n'arrive pas à faire marcher (qui créé une copie de document)

Sub test()
'copier fichier (nom différent, emplacement différent)
Dim FichierOriginal As String
Dim FichierCopie As String
Dim MonFichier As String
Dim FichierExiste As String

MonFichier = "C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm"
FichierExiste = Len(Dir(MonFichier))

'si FichierExiste = 0, le fichier n'existe pas
'si FichierExiste <> 0, le fichier existe

MonDossier = "C:\Users\S50642\Desktop"

FichierOriginal = MonDossier & "C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm"
x = MonDossier & "C:\Users\S50642\Desktop\TEST\TDB Mensuel - Production & Sinistres - 202211_NCO.xlsx"

FileCopy FichierOriginal, x

End Sub

Edit modo : merci de mettre le code entre balises avec le bouton

Bonjour,

Pour remplacer les formules par leur valeur, il faut ouvrir le classeur. Essaie :

Sub test()
  Dim Sh As Worksheet, Wbk As Workbook
  Set Wbk = Workbooks.Open("C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm")
  Set Wbk = Workbooks.Open("D:\Users\dcola\Documents\Donnees\Daniel\mpfe\210308.xlsm")
  For Each Sh In Sheets
    Sh.UsedRange.Value = Sh.UsedRange.Value
  Next Sh
  Wbk.SaveAs "C:\Users\S50642\Desktop\TEST\TDB Mensuel - Production & Sinistres - 202211_NCO", xlOpenXMLWorkbook
  Wbk.Close
End Sub

Daniel

Super merci ça fonctionne, j'ai une autre question sur le tri je voudrais reprendre que certaine feuille du classeur c'est un paramètre à ajouter ?

Pouvais vous m'expliquer le fonctionnement un peux du code afin que je puisse m'améliorer ?

Voici trois façons de procéder. La première convient s'il y a peu de feuilles à traiter :

Sub test0()
  Dim Sh As Worksheet, Wbk As Workbook
  'la variable Wbk représente le classeur
  'assignation à Wbk du classeur ouvert
  Set Wbk = Workbooks.Open("C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm")
  'Boucle sur les feuilles. Sh représente une feuille
  For Each Sh In Sheets
    'test sur le nom des feuilles à traiter (Feuil1 et Feuil2)
    If Sh.Name = "Feuil1" Or Sh.Name = "Feuil2" Then
      'UsedRange représente la plage de cellules utilisées
      'on remplace le contenu de chaque cellule sa valeur.
      'Ce qui écrase la formule s'il y en a
      Sh.UsedRange.Value = Sh.UsedRange.Value
    End If
  Next Sh
  'enregistrement du classeur
  Wbk.SaveAs "C:\Users\S50642\Desktop\TEST\TDB Mensuel - Production & Sinistres - 202211_NCO", xlOpenXMLWorkbook
  'fermeture du classeur
  Wbk.Close
End Sub

Celle-ci convient s'il y a peu de cellules à ne pas traiter :

Sub test1()
  Dim Sh As Worksheet, Wbk As Workbook
  Set Wbk = Workbooks.Open("C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm")
  'Boucle sur les feuilles. Sh représente une feuille
  For Each Sh In Sheets
    'Feuil1 et Feuil2 ssont les feuilles à ne PAS traiter
    If Sh.Name <> "Feuil1" And Sh.Name <> "Feuil2" Then
      Sh.UsedRange.Value = Sh.UsedRange.Value
    End If
  Next Sh
  Wbk.SaveAs "C:\Users\S50642\Desktop\TEST\TDB Mensuel - Production & Sinistres - 202211_NCO", xlOpenXMLWorkbook
  Wbk.Close
End Sub

Enfin, on peut mettre les noms des feuilles à traiter dans un tableau mémoire :

Sub test2()
  Dim Sh As Worksheet, Wbk As Workbook, Feuilles As Variant
  Set Wbk = Workbooks.Open("C:\Users\S50642\Desktop\TDB Mensuel - Production & Sinistres - 202211_N-Copie.xlsm")
  'Création d'une matrice (tableau) contenant le nom des feuilles
  'à traiter
  Feuilles = Array("Feuil1", "Feuil2", "Feuil3")
  'Boucle sur chaque feuille à traiter
  For i = 0 To UBound(Feuilles)
    With Sheet(Feuilles(i))
    .UsedRange.Value = .UsedRange.Value
    End With
  Next i
  Wbk.SaveAs "C:\Users\S50642\Desktop\TEST\TDB Mensuel - Production & Sinistres - 202211_NCO", xlOpenXMLWorkbook
  Wbk.Close
End Sub

J'ai mis des explications dans le premier code. Dans les macros suivantes, je n'ai expliqué que ce qui différait du premier.

Daniel

Merci beaucoup de votre aide, je vais tester tout cela et l'adapter

Bonjour c'est encore moi, j'aimerai savoir comment faire pour automatiser le nom de sortie du fichier, du coup j'ai ce code ci qui marche mais pour le fichier de sortie je suis obligé de le modifier a la main chaque mois. Il faudrait que je puisse reprendre les donnée de la feuille "Paramètres" (la cellule B2-B3 qui respectivement année mois afin de le reprendre dans le nom du fichier) et en plus je voudrais que sur le fichier qu'il en sort la feuille Paramètres soit masqué

'Code création copie d'un document CF= Copie fichier
Sub CF()
Dim Sh As Worksheet, Wbk As Workbook
'Chemin du document à copier
Set Wbk = Workbooks.Open("P:\ACTIVITE VEILLE ECO\RECURRENTS\3_MENSUEL\Suivi Mensuel Production & Sinistres (GOING)\02- Sorties SAS\TDB Mensuel - Suivi paramétrable.xlsx")
'Boucle sur les feuilles. Sh représente une feuille
For Each Sh In Sheets
'sont les feuilles à ne PAS traiter
If Sh.Name <> "SOURCE_PROD" And Sh.Name <> "SUPP_STK_PROD" And Sh.Name <> "SOUR_SIN_GAR" And Sh.Name <> "SOURCE_ANT" And Sh.Name <> "SOURCE_LOURD" And Sh.Name <> "Data Graph" And Sh.Name <> "Paramètres" Then
Sh.UsedRange.Value = Sh.UsedRange.Value
End If
Next Sh
'Chemin nouveau fichier en valeurs pour coller nouveaux fichier
'Pensez à changer le nom de fichier de sortie en fonction
Wbk.SaveAs "P:\ACTIVITE VEILLE ECO\RECURRENTS\3_MENSUEL\Suivi Mensuel Production & Sinistres (GOING)\02- Sorties SAS\TDB Mensuel - Production & Sinistres - 202212", xlOpenXMLWorkbook

End Sub

'Dim nom_fichier As String
'nom_fichier = "TDB Mensuel - Production & Sinistres - " & Format(Date, "yyyy-mm") & ".extention"


'Worksheets("Paramètres").visible = False

Bonjour,

Essaie :

Sub CF()
  Dim Sh As Worksheet, Wbk As Workbook, Chemin As String, Fichier As String
  'Chemin du document à copier
  Set Wbk = Workbooks.Open("P:\ACTIVITE VEILLE ECO\RECURRENTS\3_MENSUEL\Suivi Mensuel Production & Sinistres (GOING)\02- Sorties SAS\TDB Mensuel - Suivi paramétrable.xlsx")
  'Boucle sur les feuilles. Sh représente une feuille
  For Each Sh In Sheets
    'sont les feuilles à ne PAS traiter
    If Sh.Name <> "SOURCE_PROD" And Sh.Name <> "SUPP_STK_PROD" And Sh.Name <> "SOUR_SIN_GAR" And Sh.Name <> "SOURCE_ANT" And Sh.Name <> "SOURCE_LOURD" And Sh.Name <> "Data Graph" And Sh.Name <> "Paramètres" Then
      Sh.UsedRange.Value = Sh.UsedRange.Value
    End If
  Next Sh
  'Chemin nouveau fichier en valeurs pour coller nouveaux fichier
  'Pensez à changer le nom de fichier de sortie en fonction
  Chemin = "P:\ACTIVITE VEILLE ECO\RECURRENTS\3_MENSUEL\Suivi Mensuel Production & Sinistres (GOING)\02- Sorties SAS\"
  Nom = "TDB Mensuel - Production & Sinistres - " & [Paramètres!B2] & [Paramètres!B3]
  Sheets("Paramètres").Visible = xlSheetHidden
  Wbk.SaveAs Chemin & Nom, xlOpenXMLWorkbook
End Sub

Parfait le code fonctionne merci de la réactivité

Rechercher des sujets similaires à "creation fichier copie valeur formules"