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 SubEdit 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 SubDaniel
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 SubCelle-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 SubEnfin, 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 SubJ'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 SubParfait le code fonctionne merci de la réactivité