Copier partiellement une seule feuille d'un workbook

Fermé
danibounn Messages postés 7 Date d'inscription mardi 8 juillet 2014 Statut Membre Dernière intervention 10 juillet 2014 - Modifié par pijaku le 10/07/2014 à 12:42
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 10 juil. 2014 à 12:48
Bonjour,

J'ai cherché sur le forum mais aucune discussion traite exactement de ce problème.
J'ai le code ci-dessous qui marche très bien pour copier une feuille entière seulement de mon workbook.

J'aimerais ne copier qu'une partie, à savoir de la ligne 2 à la ligne 998, et que les données soient copiées dans la zone identique
J'ai essayé de mettre Activesheet.Range("A2:AM998").Copy plutôt que Activesheet.Copy mais dans ce cas, bizarrement, le programme me copie la totalité du workbook avec toutes les feuilles, alors que ça devrait marcher...

Auriez-vous des idées pour corriger celà ?
Merci par avance pour votre aide et votre temps...


Public Sub EXPORT()
Application.DisplayAlerts = False
    Dim week As Currency
    Dim nom As String
    week = ActiveSheet.Range("A1")
    nom = ActiveSheet.Range("J1")
    ActiveSheet.Copy
    ChDir "F:\Heestership\_Repertoire Societe\WEEKLY\WEEK" & week
    With ActiveWorkbook
        .SaveAs Filename:=nom, FileFormat:=xlNormal
    End With
MsgBox "FICHIER WEEKLY SAUVEGARDE AVEC SUCCES"
End Sub
A voir également:

4 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
10 juil. 2014 à 10:27
Bonjour,

As-tu essayé de te servir de l'enregistreur de macro?

 Range("A2:AM998").Select
    Selection.Copy

0
danibounn Messages postés 7 Date d'inscription mardi 8 juillet 2014 Statut Membre Dernière intervention 10 juillet 2014
10 juil. 2014 à 10:46
Bonjour,

Merci pour cette suggestion, je viens d'essayer, malheureusement le code ci-dessous copie toujours la totalité du workbook (il ajoute même les Macros et clickbuttons dont je n'ai aucunement besoin...)

Et pourtant ce qui est fou c'est que je vois bien excel en train de selectionner la zone (qui devient grisée pendant la procédure).

Je ne sais plus quoi essayer..........


Sub EXPORT()
Application.DisplayAlerts = False
Dim week As Currency
Dim nom As String
week = ActiveSheet.Range("A1")
nom = ActiveSheet.Range("J1")
Range("A2:AM998").Select
Selection.Copy
ChDir "F:\Heestership\_Repertoire Societe\WEEKLY\WEEK" & week
With ActiveWorkbook
.SaveAs Filename:=nom, FileFormat:=xlNormal
.Close
End With
MsgBox "FICHIER WEEKLY SAUVEGARDE AVEC SUCCES"
Application.DisplayAlerts = True
End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
10 juil. 2014 à 10:53
C'est normal tu n'indiques pas où tu veux le copier. Fait toute l'opération avec l'enregistreur
0
danibounn Messages postés 7 Date d'inscription mardi 8 juillet 2014 Statut Membre Dernière intervention 10 juillet 2014
Modifié par danibounn le 10/07/2014 à 11:25
En enregistrant toute la procédure jusqu'à enregistrer le nouveau fichier et le fermer, il ne m'enregistre que les deux lignes de codes que tu m'as donné, rien de plus...

Bref, du coup j'ai codé un petit sous-programme qui me copie la partie que je veux dans un nouvel onglet du workbook, puis j'enregistre avec succès la totalité de cet onglet...

C'est vraiment moche, je l'avoue, mais ça marche parfaitement, même si il rame un peu pour copier les 998 lignes et que ça serait surement plus rapide d'utiliser la fonction selection.copy... Mais ça a le mérite de répondre à mon besoin....

Si tu ou quelqu'un d'autre à la solution, je modifierais le code


Sub EXPORT()
Application.DisplayAlerts = False
Dim week As Currency
Dim nom As String
week = ActiveSheet.Range("A1")
nom = ActiveSheet.Range("J1")
Call COPYWKS
Sheets("WEEKLY_").Copy
ChDir "F:\Heestership\_Repertoire Societe\WEEKLY\WEEK" & week
With ActiveWorkbook
.SaveAs Filename:=nom, FileFormat:=xlNormal
.Close
End With
MsgBox "FICHIER WEEKLY SAUVEGARDE AVEC SUCCES"
Application.DisplayAlerts = True
End Sub

Sub COPYWKS()
Dim cpy(999, 40)
Dim i As Currency
Dim j As Currency
For i = 2 To 998
For j = 1 To 39
cpy(i, j) = Sheets("WEEKLY").Cells(i, j)
Next j
Next i
For i = 2 To 998
For j = 1 To 39
Sheets("WEEKLY_").Cells(i, j) = cpy(i, j)
Next j
Next i

End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
10 juil. 2014 à 12:48
Bonjour,

Il y a plus simple que deux double boucles :
Sub COPYWKS()
Dim cpy(999, 40)
cpy = Sheets("WEEKLY").Range("A2:AM998")
Sheets("WEEKLY_").Range("A2").Resize(998, 39) = cpy
End Sub
0