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 Sub

Tout 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 = True

J'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
ou mieux et plus simple : .UsedRange.Value = .UsedRange.Value (sans copier-coller, même effet et plus vite)
  • 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:=xlPasteFormats

mais 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.

Rechercher des sujets similaires à "conserver mise forme vba pastespecial"