Conserver mise en forme de cellules. VBA PasteSpecial
Bonjour à vous tous le Forum !
J'ai bien lu que le sujet que je lance a déjà été traité, mais j'ai beau tenter les solutions proposées, je rame, je rame, je rame.
Je travaille sous excel 2013. J'ai un classeur avec de "jolies" Macros qui me simplifient la vie ! Le but de ce classeur est de constituer des rapports de visites après chaque passage de mon technicien chez nos clients professionnels. Nous avons trois types de rapports différents.
Une macro adaptée à chacun de nos rapports nous permet de les enregistrer dans de nouveaux classeurs que nous archivons.
Voici le code de cette macro d'enregistrement :
Sub SaveSanitation()' SaveSanitation Macro
Dim Ligne As Long
Dim Chemin As String, Fichier As String
If Range("C6") = "" Then
MsgBox "Pas de nom de client"
Exit Sub
End If
If MsgBox("Souhaitez vous lancer le vérificateur d'orthographe ?", vbYesNo, "Demande de confirmation") = vbYes Then
Cells.CheckSpelling SpellLang:=1036
With Sheets("SANITATION")
.Visible = xlSheetVisible ' On affiche la page
If MsgBox("Souhaitez vous imprimer votre rapport ?", vbYesNo, "Demande de confirmation") = vbYes Then
.PageSetup.PrintArea = "A1:Z78"
.PrintPreview ' Pour avoir l'aperçu avant impression
'.PrintOut ' Pour imprimer directement
'.Visible = xlSheetHidden ' On masque la page
End If
If MsgBox("Souhaitez vous convertir votre rapport en PDF ?", vbYesNo, "Demande de confirmation") = vbYes Then
Dim nom As String
nom = Range("O6") & "_" & Format(Range("V6"), "0000") & " _ " & Range("C6")
Range("A1:Z78").Select
Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Range("A1").Select
End If
End With
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path & Application.PathSeparator
Fichier = Range("O6") & "_" & Format(Range("V6"), "0000") & "_" & Range("C6")
If MsgBox("Votre rapport est-il correctement renseigné ? ", vbYesNo, "Demande de confirmation") = vbNo Then Exit Sub
End If
With Application.FileDialog(msoFileDialogSaveAs)
.InitialFileName = Chemin & Fichier
If .Show = False Then Exit Sub
Fichier = .SelectedItems(1)
End With
Application.DisplayAlerts = False
Sheets("SANITATION").Copy
With ActiveWorkbook
With .Sheets(1)
.Cells.Copy
.Range("V6").Formula = Range("V6").Value
.Range("A1").Select
End With
.SaveAs Fichier
.Close
End With
Application.DisplayAlerts = True
With Sheets("HISTORIQUE RAPPORT")
Ligne = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Hyperlinks.Add Anchor:=.Range("A" & Ligne), Address:=Fichier, TextToDisplay:=Format(Range("V6"), "0000")
.Range("B" & Ligne) = Range("C6") ' Nom
.Range("C" & Ligne) = Range("C7") ' Site
.Range("D" & Ligne) = Range("AF11") ' Date"
.Range("E" & Ligne) = Range("AF10") ' Intervention
.Range("F" & Ligne).Formula = "=MONTH(D" & Ligne & ")"
End With
MsgBox "Votre rapport a bien été enregistré"
Sheets("ALLO3D").Activate
Range("A1").Select
End SubTout se déroule correctement à une exception. Dans mes dernières lignes de code, je copie ma feuille et la colle dans un nouveau classeur et c'est lors de cet enregistrement que les formats de mes cellules sont modifiées et tout se décale. (En colonnes comme en lignes). Voici les ligne de code concernées :
With Application.FileDialog(msoFileDialogSaveAs)
.InitialFileName = Chemin & Fichier
If .Show = False Then Exit Sub
Fichier = .SelectedItems(1)
End With
Application.DisplayAlerts = False
Sheets("SANITATION").Copy
With ActiveWorkbook
With .Sheets(1)
.Cells.Copy
.Range("V6").Formula = Range("V6").Value
.Range("A1").Select
End With
.SaveAs Fichier
.Close
End With
Application.DisplayAlerts = TrueJ'ai essayé avec un PasteSpecial pour les formats mais je ne doit pas savoir le placer. En gros je ne sais pas le maîtriser et je tombe toujours en erreur. Quelle faible je fais !
Si besoin est je posterai mon classeur anonymé.
Pourriez vous m'aider s'il vous plait ? Dans l'attente de vos réponses, merci beaucoup pour votre soutien !
"Excel'mment"
Elodie
Bonjour,
Je ne suis pas sûr d'avoir bien compris... Mais il me semble que tu copies une feuille dans un nouveau classeur, et qu'ensuite, sur cette feuille copiée, tu veuilles écraser les formules pour n'avoir que les valeurs.
Si c'est le cas, il faut procéder différemment :
- tu copies la feuille dans le même classeur, avant la feuille 1 par exemple (ou à la fin)
- c'est là que tu écrases les formules en copiant et collant en valeurs la plage utilisée sur elle-même
- ensuite tu copies ta feuille dans un nouveau classeur
- enfin tu la renommes.
Sous réserve que c'est bien de cela qu'il s'agit.
Cordialement.
Bonjour Mferrand,
Merci pour ta très rapide réponse ! Ce que je cherche à faire en fait, c'est ajouter une ligne de code qui conserve la taille de mes cellules.
Car lors que j’exécute ma macro, toutes mes cellules s'agrandissent te telle sorte que si je réouvre le classeur enregistré, je suis obligée de redimentionner mes cellules manuellement pour pouvoir l'exploiter ou l'imprimer. Ce qui tenait sur une feuille A4 à l’impression par exemple n'y tient plus.
JE pensais utiliser un PasteSpecial.Formats du type :
.PasteSpecial Paste:=xlPasteFormatsmais je ne sais pas si ça comprend la dimension des cellules et surtout comment l'utiliser.
Merci encore !
Elodie
Bonjour,
C'est la première fois que j'entends dire que la taille des cellules changeait en copiant la feuille !
Es-tu sûr qu'il ne s'agit pas d'une simple différence de zoom ?
Bonjour !
Hé ben non figure toi ! C'est à ne rien y comprendre ! Du coup j'ai cherché si c'était un problème de "Renvoi à la ligne", de contenu des cellules, de taille de police, Rien y fait !
Voici mon fichier, pour tester !
Je craque !
Curieux, en effet ! Les colonnes s'élargissent...
Je puise dans mes dossier... n'importe quel fichier au hasard, cela ne se produit pas ! Je ne vois pas d'explication pour l'instant...
Cordialement.
Bonjour !
Oui Mferrand, et parfois ce sont aussi les lignes qui s’élargissent et font déborder ma feuille en dessous ! C'est à ne rien comprendre !
Je continue à chercher de mon coté. Naturellement si je trouve la solution je la livrerai ici.
Elodie
Je n'ai vu soulever ce problème en faisant une petite recherche que sur des versions MAC (!?), et pas d'explication ni de solution proposée...
Si jamais tu arrivais à le reproduire avec un autre classeur, fais part du comment, car on avance d'autant mieux dans la résolution d'un problème qu'on sait le produire !
Bonne journée.
Re bonjour !
Le fait est que le classeur a été conçu sous la version antérieure de Windows. Depuis que j'ai le 10, je rencontre ce problème. Ma collègue qui ne faisait pas face à ce souci il y a encore 15 jours et sur le même classeur, vient de passer à Windows 10 aussi ... Et BIM : La même chose !
En prenant les dimensions des colonnes avant et après enregistrement, je me suis redue compte qu'elles étaient toutes augmentées de 115 ou 116 % !
Pense tu que cela puisse venir du changement de version Windows ? Avant tout fonctionnait très bien !
Cordialement
Je n'en sais rien !
Je dois mettre en route un nouvel ordinateur sous Win 10, et y installer Excel 2016. Pas encore eu le temps car je tiens à repartitionner au départ et je ne connais pas encore Win 10...
Je pourrais voir de plus près quand ce sera fait.