Microsoft 365 VBA Array

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

J'aurais une petite question, est-ce que on peut déclarer les onglets et les ranges comme array afin de les copier ?
Je voulais faire cela dans mon code, mais je reçois une erreur :

VB:
ThisWorkbook.Sheets(Array("T1", "T2")).Range(Array("A:X", "A:X")).Value.Copy
With ActiveWorkbook
    .Sheets(1).UsedRange = .Sheets(1).UsedRange.Value
    .Sheets(2).UsedRange = .Sheets(2).UsedRange.Value
    .SaveAs ThisWorkbook.Path & "\" & NomFichier_ter
    .Close False
End With

Merci pour votre aide !
 
Bonjour,

J'aurais une petite question, est-ce que on peut déclarer les onglets et les ranges comme array afin de les copier ?
Je voulais faire cela dans mon code, mais je reçois une erreur :

VB:
ThisWorkbook.Sheets(Array("T1", "T2")).Range(Array("A:X", "A:X")).Value.Copy
With ActiveWorkbook
    .Sheets(1).UsedRange = .Sheets(1).UsedRange.Value
    .Sheets(2).UsedRange = .Sheets(2).UsedRange.Value
    .SaveAs ThisWorkbook.Path & "\" & NomFichier_ter
    .Close False
End With

Merci pour votre aide !
Bonjour,

Stp, un fichier représentatif serait le bienvenu.
 
Bonjour Anne Marie, Cathodique,
Si votre fichier est vraiment représentatif, ne serait il pas plus simple d'enregistrer le fichier sous un autre nom et dans ce fichier de supprimer les colonnes Y:AE ?
Vous conserveriez ainsi valeurs et formules, ainsi que les mises en forme, MFC ...
 
Bonjour Anne Marie, Cathodique,
Si votre fichier est vraiment représentatif, ne serait il pas plus simple d'enregistrer le fichier sous un autre nom et dans ce fichier de supprimer les colonnes Y:AE ?
Vous conserveriez ainsi valeurs et formules, ainsi que les mises en forme, MFC
Bonjour,

Merci pour votre mail.
En fait, c'est un fichier test pour voir l'idée.
Mon vrai fichier est très volumineux, je souhaite supprimer les colonnes automatiquement.
 
Re,
Essayez avec :
VB:
Sub Essai()
Application.ScreenUpdating = False
NomFichier = Format(Date, "yyyymmdd") & "- hebdo.xlsx"
With ThisWorkbook
    .Sheets(Array("T1", "T2")).Copy
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs .Path & "\" & NomFichier
    Sheets("T1").Columns("Y:AE").Delete Shift:=xlToLeft
    Sheets("T2").Columns("Y:AE").Delete Shift:=xlToLeft
    ActiveWorkbook.Close SaveChanges:=True
    Application.DisplayAlerts = True
End With
End Sub
 
bonjour @VBA_dev_Anne_Marie , @sylvanu ,

Un essai d'après ce que j'ai compris.
VB:
Option Explicit

Sub CopierClasseur()
   Dim wbNew As Workbook
   Dim ws1 As Worksheet, ws2 As Worksheet
   Dim T1 As Variant, T2 As Variant
   Dim cheminDossier As String, NomFichier As String

   ' Définition du classeur source
   Set ws1 = ThisWorkbook.Sheets("T1")
   Set ws2 = ThisWorkbook.Sheets("T2")

   ' Récupération des données des feuilles dans un tableau
   T1 = ws1.UsedRange.Value
   T2 = ws2.UsedRange.Value

   ' Définition du chemin du dossier
   cheminDossier = ThisWorkbook.Path
   NomFichier = Format(Date, "yyyymmdd") & "-hebdo.xlsx"

   ' Création du nouveau classeur
   Set wbNew = Workbooks.Add

   ' Renommer les feuilles et insérer les données
   wbNew.Sheets(1).Name = "T1"
   wbNew.Sheets(1).Range("A1").Resize(UBound(T1, 1), UBound(T1, 2)).Value = T1

   wbNew.Sheets(2).Name = "T2"
   wbNew.Sheets(2).Range("A1").Resize(UBound(T2, 1), UBound(T2, 2)).Value = T2

   ' Enregistrer le nouveau classeur
   wbNew.SaveAs cheminDossier & "\" & NomFichier
   wbNew.Close

   MsgBox "Le fichier " & NomFichier & " a été créé et enregistré dans " & cheminDossier, vbInformation

   Set ws1 = Nothing
   Set ws2 = Nothing

End Sub
 
Re,
Essayez avec :
VB:
Sub Essai()
Application.ScreenUpdating = False
NomFichier = Format(Date, "yyyymmdd") & "- hebdo.xlsx"
With ThisWorkbook
    .Sheets(Array("T1", "T2")).Copy
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs .Path & "\" & NomFichier
    Sheets("T1").Columns("Y:AE").Delete Shift:=xlToLeft
    Sheets("T2").Columns("Y:AE").Delete Shift:=xlToLeft
    ActiveWorkbook.Close SaveChanges:=True
    Application.DisplayAlerts = True
End With
End Sub
Merci, malheureusement ce code ne supprime pas les plages Y:AE dans le fichier créé 🙁
 
malheureusement ce code ne supprime pas les plages Y:AE dans le fichier créé
Si, je viens de vérifier.
Essayez cette PJ, enregistrez la sur le bureau, il crée bien le fichier sans les colonnes Y:AE.
Attention à l'ordre des lignes, il faut supprimer les colonnes puis enregistrer avec les modifications.
 

Pièces jointes

code corrigé
VB:
Option Explicit

Sub CopierClasseur()
   Dim wbNew As Workbook
   Dim ws1 As Worksheet, ws2 As Worksheet
   Dim T1 As Variant, T2 As Variant
   Dim cheminDossier As String, NomFichier As String
   Dim dl1 As Long, dl2 As Long
   ' Définition du classeur source
   Set ws1 = ThisWorkbook.Sheets("T1")
   Set ws2 = ThisWorkbook.Sheets("T2")

   dl1 = ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row
   dl2 = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row

   ' Récupération des données des feuilles dans un tableau
   T1 = ws1.Range("A1:X" & dl1).Value    '.UsedRange.Value
   T2 = ws2.Range("A1:X" & dl2).Value     '.UsedRange.Value

   ' Définition du chemin du dossier
   cheminDossier = ThisWorkbook.Path
   NomFichier = Format(Date, "yyyymmdd") & "-hebdo.xlsx"

   ' Création du nouveau classeur
   Set wbNew = Workbooks.Add

   ' Renommer les feuilles et insérer les données
   wbNew.Sheets(1).Name = "T1"
   wbNew.Sheets(1).Range("A1").Resize(UBound(T1, 1), UBound(T1, 2)).Value = T1

   wbNew.Sheets(2).Name = "T2"
   wbNew.Sheets(2).Range("A1").Resize(UBound(T2, 1), UBound(T2, 2)).Value = T2

   ' Enregistrer le nouveau classeur
   Application.DisplayAlerts = False
   wbNew.SaveAs cheminDossier & "\" & NomFichier
   Application.DisplayAlerts = True

   wbNew.Close

   MsgBox "Le fichier " & NomFichier & " a été créé et enregistré dans " & cheminDossier, vbInformation

   Set ws1 = Nothing
   Set ws2 = Nothing

End Sub
 
Bonjour le forum,

Perso j'utiliserais :
VB:
Sub Enregistrer_sans_formules()
Dim NomFichier As String, a As Object, n
NomFichier = Format(Date, "yyyymmdd") & "- hebdo.xlsx"
Set a = ThisWorkbook.Sheets(Array("T1", "T2"))
Application.ScreenUpdating = False
Application.DisplayAlerts = False
a.Copy 'nouveau document
With ActiveWorkbook
    For n = 1 To a.Count
        With .Sheets(n).UsedRange
            .Columns("Y").EntireColumn.Resize(, .Columns.Count - 24).Delete
            .Value = a(n).UsedRange.Resize(, 24).Value
        End With
    Next n
    .SaveAs ThisWorkbook.Path & "\" & NomFichier, 51
    .Close False
End With
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
477
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
860
Réponses
4
Affichages
572
  • Question Question
Microsoft 365 Question code VBA
Réponses
2
Affichages
447
Retour