paste special ?

  • Initiateur de la discussion SylvieT
  • Date de début
S

SylvieT

Guest
bonjour le forum,
j'ai des petits problèmes pour écrire une macro me permettant d'enregistrer une feuille de mon classeur excel.
je voudrais copier une feuille de mon classeur puis la coller (coller juste les valeurs, pas les formules =paste special ?)dans un classeur vide.
l'onglet de ma nouvelle feuille devra porter le nom de l'onglet de l'ancienne feuille.
et par dessus tout je voudrais enregistrer ce nouveau classeur sous : classeur du (date écrite en cellule A1).xls
La taille et la mise en forme de mes cellules devront etre conservées...
Ca fait beaucoup de choses à écrire...et j'ai un peu de mal !
merci pour votre aide !
Sylvie
 

chris

XLDnaute Barbatruc
Bonjour
La plus simple est de mettre l'enregistreur macro en route : tu auras 80% au moins du code final.
Fais un copier, collage spécial valeurs, collage spécial format (2 collage de suite) ainsi tu aura tout sauf les formules.
Si nécessaire sélectionne l'onglet complet plutôt que la plage : ainsi les largeurs colonne et hauteurs lignes seront collées.

Reposte ton code on t'aidera à faire les modifs pour les 20% restants.
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour SylvieT, bonjour Chris, bonjour à toutes et à tous :)

Une proposition de code dans le classeur joint.

Code:
Option Explicit

Sub CreerNouveauClasseur()
'
  ' pas de rafraîchissement de l'écran durant l'exécution
  Application.ScreenUpdating = False
  
  ' Copie de la feuille dans un nouveau classeur
  ThisWorkbook.Sheets('Nom de la feuille').Copy
  
  With ActiveWorkbook
  
    With .ActiveSheet
      ' puis, dans ce nouveau classeur, on fait un copier /
      ' coller spécial valeurs (les formats y sont déjà)
      .Cells.Copy
      .Cells.PasteSpecial xlPasteValues
    End With
    
    ' Sauvegarde du nouveau classeur dans le répertoire
    ' de ce classeur avec le nom voulu : modifier le format
    ' pour obtenir l'affichage souhaité pour la date.
    Application.DisplayAlerts = False
    
    .SaveAs ThisWorkbook.Path & '\\' & 'Classeur du ' & _
            Format(.ActiveSheet.Range('A1'), 'dd-mm-yyyy') _
            & '.xls'
            
    Application.DisplayAlerts = True
    
  End With
  
  ' enfin, on sélectionne A1 dans ce nouveau classeur...
  Range('A1').Select
  
  ' et on autorise le rafraîssement de l'écran
  Application.ScreenUpdating = True
End Sub

[file name=SylvieT_PasteSpecial.zip size=9030]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SylvieT_PasteSpecial.zip[/file]

A+ ;)
 

Pièces jointes

  • SylvieT_PasteSpecial.zip
    8.8 KB · Affichages: 21
S

SylvieT

Guest
Bonjour,
merci Chris et merci surtout Charly2 !
On y est presque !
Il y a encore quelques petites modifs à apporter pour que cela soit parfait !
j'ai mis quelques commentaires dans le fichier joint.

Merci mille fois encore pour le temps que vous passez pour moi, c'est super sympa et super important pour moi.

mille merci

Sylvie [file name=SylvieT_PasteSpecial_20060426101922.zip size=9435]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SylvieT_PasteSpecial_20060426101922.zip[/file]
 

Pièces jointes

  • SylvieT_PasteSpecial_20060426101922.zip
    9.2 KB · Affichages: 17

Charly2

Nous a quittés en 2006
Repose en paix
re-bonjour Sylvie et Chris, bonjour à toutes et à tous :)

Voilà, seconde mouture dans le fichier joint. J'ai laissé ton tableau en L23:O32, mais tu as des indications dans le code pour le placer, après la copie, en A1:D10.

[file name=SylvieT_PasteSpecial_V2.zip size=11742]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SylvieT_PasteSpecial_V2.zip[/file]

A+ ;)
 

Pièces jointes

  • SylvieT_PasteSpecial_V2.zip
    11.5 KB · Affichages: 23
S

SylvieT

Guest
Merci Charly de vous donner temps de mal !
c'est super.
j'ai essayé votre macro, ça fonctionne très bien.
Il y a juste un hic.
je lance cette commande à partir d'un 'option boutton' inséré dans un UserForm...
et là, ça ne fonctionne plus.
message 'Run time error 1004 copy method of worksheet class failed'
(je suis sous excel97en anglais...)
Y a t il une astuce ?

merci encore une fois pour votre aide et bonne soirée !

Sylvie
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Sylvie, bonsoir le fil et le forum :)

A priori, rien ne s'oppose à l'utilisation de la macro par le code d'un OptionButton situé dans un USF, il suffit d'adapter le code, et notamment de supprimer la ligne suivante :

' on supprime le bouton 'Création nouveau classeur'
.Shapes('Bouton 1').Delete

Voili voilà :p

A+ ;)
 

Charly2

Nous a quittés en 2006
Repose en paix
re,

Bon, je crois que j'ai mal lu la première fois car, bien qu'il faille supprimer la ligne de code citée, le problème semble différent :S

Pour ce qui est d'XL97, je l'avais encore il y a peu et j'ai l'habitude de programmer dans cet environnement ; donc comme je n'ai pas fait appel à l'enregistreur, XL97 ne devrait pas poser de problème :ermm:

Si tu peux supprimer de ton fichier les données confidentielles et mettre un exemple en ligne ou me l'envoyer si trop lourd (Charly2_XLD(AT)hotmail.fr), en m'expliquant quelle est la ligne concernée par l'erreur, je pourrai être plus efficace :)

A+ ;)

Message édité par: Charly2, à: 26/04/2006 22:40
 
S

SylvieT

Guest
Bonjour à tous, bonjour Charly,

j'avais bien enlevé la commande pour effacer le bouton (de toute façon, excel met mettait une erreur sur cette ligne !)

l'erreur est la suivante :
quand je selectionne mon 'Optionbutton' appelé 'sauvegarde' et que je valide le tout avec un Commandbutton 'ok' (le tout dans mon UserForm... vous vous imaginez le truc..?)
l'erreur 'Runtime1004....' bloque à la ligne :
ThisWorkbook.Sheets('Nom de la Feuille').Copy et ne va pas plus loin...

merci du coup de main Charly
:)

Sylvie
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Sylvie, bonjour à toutes et à tous :)

Je ne vois pas d'où peut venir ce type d'erreur :sick:

Si Nom de la feuille ne faisait pas partie de ton classeur, tu devrais avoir une erreur d'exécution 9 (Indice en dehors de la plage), mais je ne vois pas pour l'erreur 1004 (erreur définie par l'application ou l'objet) qui n'est pas une erreur Excel mais une erreur définie lors de la conception de l'application :eek:

Ce serait plus facile de corriger ce petit souci si tu joignais ton fichier (sans données confidentielles).

EDITION : Juste une petite idée en passant, si tu appelles ton USF par un CommandButton, regarde dans ses propriétés et places la propriété TakeFocusOnClick à False, ou bien juste avant la ligne de l'erreur, ajoutes l'instruction suivante :

Range('A1');Select

A+

Message édité par: Charly2, à: 27/04/2006 13:35
 
S

SylvieT

Guest
Rebonjour à tous,

Alors là chapeau : en mettant 'TakeFocusOnClick' à False, tout marche correctement !!!!

C'est super, mille merci.

reste un détail et ça sera parfait :
il faudrait fermer le classeur qui vient d'etre créé, revenir dans le classeur source et afficher ce message :

x = MsgBox('Votre sauvegarde est terminée !', vbInformation + vbOKOnly, 'IMPRESSION')



Bonne soirée!
et encore merci !!!!
Sylvie :p
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir à toutes et à tous,
Bonsoir Sylvie :)

Ouf ! Enfin un problème que j'ai rencontré souvent sous XL97 qui m'aura permis de te dépanner :p

Tous ces mercis pour moi ? :silly: Je ne suis pas sûr de les mériter, mais je les prends kô même :)

Pour le reste, il te suffit d'ajouter les lignes suivantes en fin de code (juste après la sauvegarde) :

...

  Application.DisplayAlerts = False

  .SaveAs ThisWorkbook.Path & '\\' & 'Classeur du ' & _
                 Format(.ActiveSheet.Range('A1'), 'dd-mm-yyyy') _
                 & '.xls'

  Application.DisplayAlerts = True

  .Close

End With

ThisWorkbook.Activate ' pour le cas où tu aurais plusieurs classeurs ouverts

MsgBox 'Votre sauvegarde est terminée !', vbInformation + vbOkOnly, 'IMPRESSION'

' et on autorise le rafraîssement de l'écran
Application.ScreenUpdating = True

...

Voili voilà

Bonne soirée :)
 

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet