Créer un classeur (VBA), travailler dessus et le supprimer
Bonjour à tous,
J'ai besoin d'aide pour effectuer une macro qui créerait un classeur qui peut porter un nom temporaire comme "classeur TEST".
J'ai une feuille "UVCI " dans mon classeur "ASSORTIMENT" sur lequel je travail.
Je met ma macro :
Sub ACTUALISERBASE()
Call SAUVEGARDEPROPO
Sheets("UVCI ").Select
Application.ScreenUpdating = False
ActiveSheet.Range("$A$2:$L$" & Range("C" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6 _
, 7, 8, 9, 10, 11, 12), Header:=xlNo
derLn = Range("C" & Rows.Count).End(xlUp).Row
Set tabloCol = Range("C3:C" & derLn)
Set tablo = Range("A3:N" & derLn)
ReDim v(derLn - 2, 14)
I = 0
For Each c In tabloCol
If c.Offset(0, -2).Value = 1 Then
For j = 0 To 13
v(I, j) = Cells(c.Row, 1 + j)
Next j
I = I + 1
End If
Next c
tablo.Select
Selection = v
derLn = Range("C" & Rows.Count).End(xlUp).Row
ReDim w((derLn - 2) * 14, 14)
For I = 0 To derLn - 3
For n = 0 To 13
k = n + 1
Label = Choose(k, 1, 1.2, 2, 2.2, 3, 3.2, 4, 5, 6, 7, 7.5, 8, 9, 10)
For j = 0 To 13
If j = 0 Then
w(I * 14 + n, j) = Label 'v(i, j)
Else
w(I * 14 + n, j) = v(I, j)
End If
Next j
Next n
Next I
Range("A3:N" & (derLn - 2) * 14 + 2) = w
Call SURFACEUVCI
Call SAUVEGARDEPROPO1
Application.ScreenUpdating = True
Cells(3, 1).Select
End Sub
Sub SAUVEGARDEPROPO()
finalrow = Range("C1048576").End(xlUp).Row
Range("A1:N" & finalrow).Select
Selection.Copy
Sheets("UVCI ").Select
Static I As Long
Dim Feuille As Worksheet
I = I + 1
Set Feuille = ThisWorkbook.Worksheets.Add
Feuille.Name = "SUPPORT"
Sheets("SUPPORT").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
Sub SAUVEGARDEPROPO1()
finalrow = Range("C1048576").End(xlUp).Row
Sheets("SUPPORT").Select
Columns("M:M").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("M3").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-12],RC[-11],RC[-10])"
Range("M3").Select
Selection.AutoFill Destination:=Range("M3:M" & finalrow)
Sheets("UVCI ").Select
Range("O3").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-14],RC[-13],RC[-12])"
Range("O3").Select
Selection.AutoFill Destination:=Range("O3:O" & finalrow)
Range("M3").Select
ActiveCell.FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC[2],SUPPORT!C:C[1],2,FALSE),""ERREUR"")"
Range("M3").Select
Selection.AutoFill Destination:=Range("M3:M" & finalrow)
Columns("M:M").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("N3").Select
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
Range("N3").Select
Selection.AutoFill Destination:=Range("N3:N" & finalrow)
Columns("N:N").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("SUPPORT").Select
ActiveWindow.SelectedSheets.Delete
Sheets("UVCI ").Select
Range("O3:O" & finalrow).ClearContents
End Sub
Sub SURFACEUVCI()
Dim finalrow As Long
finalrow = Cells(Rows.Count, "C").End(xlUp).Row
Application.CutCopyMode = False
Range("J3").Select
ActiveCell.FormulaR1C1 = "='reference lineaire'!R[1]C[-4]"
Range("J3").Select
Selection.AutoFill Destination:=Range("J3:L3"), Type:=xlFillDefault
Range("J3:L3").Select
Selection.AutoFill Destination:=Range("J3:L15"), Type:=xlFillDefault
Range("J3:L15").Select
Selection.AutoFill Destination:=Range("J3:L16"), Type:=xlFillDefault
Range("J3:L16").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.SmallScroll Down:=6
Selection.Copy
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("J3:L" & finalrow), Type:=xlFillCopy
Range("J3:L" & finalrow).Select
End Sub
Par manque de mémoire, je ne peux pas travailler sur mon classeur actuel.
Ce que je désirerais c'est que à la place de créer une simple feuille "SUPPORT", créer un classeur "classeur TEST" qui ne sera pas enregistré.
Sur "classeur TEST", il me faudrait 2 onglets, nommons les "SUPPORT" et "UVCI "
J'aimerais copier ma feuille "UVCI " de mon classeur "ASSORTIMENT" et la copier dans "classeur TEST" dans la feuille "SUPPORT"
et laisser faire la macro.
Une fois la macro finie. J'aimerais copier ma base "UVCI " de "classeur TEST" et copier les valeurs "A3:N" & final row dans la feuille "UVCI" de "ASSORTIMENT".
Puis fermer le classeur test, en forçant sa fermeture sans enregistrer.
Et sélectionner à nouveau mon classeur "ASSORTIMENT"
Les notions qui me manquent à l'heure actuelle sont les suivantes :
- création d'un classeur nommé "classeur TEST"
- Sélectionner le classeur créé
- copier les valeurs de mon classeur vers le classeur créé
- lancer ma macro sur le classeur créé
- copier les valeurs depuis le classeur créé vers mon classeur source
- supprimer le classeur créé
- retourner sur le classeur source
Merci pour toute aide.
Très cordialement
J'ai réussi à créer un classeur mais il s'enregistre, il y a possibilité de supprimer le fichier une fois la macro terminée ?
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
xlApp.SheetsInNewWorkbook = 2
Set xlBook = xlApp.Workbooks.Add
xlBook.SaveAs ("CLasseur test.xlsm")
xlApp.Visible = True
Set xlSheet = xlBook.Worksheets(1)
xlSheet.Name = "SUPPORT"
Set xlSheet = Nothing
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Name = "UVCI "
Set xlSheet = Nothing
xlApp.SheetsInNewWorkbook = 3
xlApp.Quit