Erreur '1004' La méthode a échoué - Copier et coller plusieurs plages

Hello,

J'ai créé le code ci-dessous pour aller copier 2 plages de données et les coller dans un autre onglet.

Cela fonctionnait bien jusqu'à présent et là, je ne sais pas il me bloque à :

Range("A12:M40000,S12:W40000").Select

J'ai mis 40000 pour être sûre qu'il me copie toutes les données de cette plage car le tableau n'est pas toujours constitué du même nombre de lignes.

Voici le message suivant qui s'affiche lorsqu'il bug sur Range("A12...etc. Saurez-vous me dire ce qu'il ne va pas dans ma macro ?

Merci par avance :-)

image
Sub AjouterFeuilleDevantUneAutreFeuille()

'si la feuille "Pour_Plan" existe = la supprimer

Dim ws As Worksheet
nom = "Pour_PLAN"
For Each ws In Worksheets
  If ws.Name = nom Then
  Application.DisplayAlerts = False
    ws.Delete
    Exit For
  End If
Next ws
'Ajouter une feuille avec le nom de la Feuille "Pour_PAN"
 Sheets.Add(Before:=Worksheets("BASE")).Name = "Pour_PLAN" 'ajoute une Feuille devant la Feuille "BASE"
'Copie les données de l'onglet BASE pour les copier dans l'onglet "Pour_PLAN"
 Sheets("BASE").Select
 Range("A12:M40000,S12:W40000").Select
 Application.CutCopyMode = False
 Selection.Copy
 Sheets("Pour_PLAN").Select
 Range("A4").Select 'Colle les données en A4 de la feuille "Pour_PLAN"
 ActiveSheet.Paste

Bonjour,
Un exemple de résolution à adapter.
Tes données devraient être sous forme de tableau structuré (dynamique).
Cdlt.

2mjemstras.xlsm (16.51 Ko)
Sub AjouterFeuilleDevantUneAutreFeuille()
Dim wb As Workbook
Dim wsData As Worksheet, newWS As Worksheet
Dim rngData As Range
Const NM As String = "Pour_PLAN"

    Set wb = ThisWorkbook
    Set wsData = wb.Worksheets("BASE")

    Application.DisplayAlerts = False

    On Error Resume Next
    wb.Worksheets(NM).Delete
    On Error GoTo 0

    Application.DisplayAlerts = True

    Set newWS = wb.Worksheets.Add(Before:=wsData)
    newWS.Name = NM

    With wsData
        Set rngData = Application.Union(.Range("A12:M22"), .Range("S12:W22"))
    End With

    rngData.Copy Destination:=newWS.Cells(4, 1)

End Sub

.

Bonjour ! Merci !

Votre correction fonctionne à merveille.

Le codage a changé donc j'y comprends plus grand chose.

C'était quoi qui posait problème dans la mienne ? Je déclarais, écrivais mal quelque chose ? (c'est pour savoir, j'ai repris la vôtre qui fonctionne très bien).

Belle journée !

Re,
Un peu d'explications sur la procédure.
Cdlt.

Sub AjouterFeuilleDevantUneAutreFeuille()
'Déclaration des variables
Dim wb As Workbook
Dim wsData As Worksheet, newWS As Worksheet
Dim rngData As Range
Const NM As String = "Pour_PLAN"

    'Initialisation des variables
    Set wb = ThisWorkbook
    Set wsData = wb.Worksheets("BASE")

    Application.DisplayAlerts = False

    'Suppression feuille NM = "Pour_Plan (déclaré en constante)
    On Error Resume Next
    wb.Worksheets(NM).Delete
    On Error GoTo 0

    Application.DisplayAlerts = True

    'Ajout nouvelle feuille nommée NM = Pour_PLAN
    Set newWS = wb.Worksheets.Add(Before:=wsData)
    newWS.Name = NM 'Feuille Pour_PLAN

    'Initialisation plage à copier, en utilisant la méthode Union (défaut de ton précédent code)
    'Pour une aide, Double-clic sur le terme Union et F1
    With wsData 'Feuille BASE
        Set rngData = Application.Union(.Range("A12:M22"), .Range("S12:W22"))
    End With

    'Copie de rngData dans NM (newWS = Pout_PLAN) et cellule A4
    rngData.Copy Destination:=newWS.Cells(4, 1)

End Sub

Bonjour …

Quel est l’intérêt de rajouter une feuille ?

Cela implique lignes codées supplémentaires en plus donc des risques en plus à traiter.

Si la feuille d’arrivée est déjà créée et même formatée, avec un bouton dans la feuille contenant les plages* : cela le fera

Private Sub U_Click()
  Feuil2.Rows("3:10000").Delete
  [ç1].Copy Feuil2.Cells(2, 1)
  [ç2].Copy Feuil2.Cells(2, [ç1].Columns.Count + 1)
End Sub

ç1 et ç2 les noms des 2 plages et Feuil2 le nom de la feuille visée.

* Cette macro est à écrire dans la fenêtre des codes de l’onglet du bouton. Elle ne tient pas compte de la durée de traitement qui peut croître avec un nombre phénoménal de données. Dans ce cas il sera envisageable d’utiliser des tableaux VBA (pas appelés structurés ceux-ci étant pourtant très performants donc à utiliser).

Dans le fichier joint, avec les évènements Activate et Deactivate, on se dispense du bouton et on se retrouve avec une réduction des données copiées qui pourrait être, notamment avec un excès de formules matricielles par exemple.

Merci à vous 2 ! Il va falloir que je prenne un peu plus de temps pour regarder vos réponses et étudier :)

Merci belle journée à vous,

Rechercher des sujets similaires à "erreur 1004 methode echoue copier coller plages"