vba excel comment coller des valeurs sans mise en forme couleur / police / bg
Question
J'ai une macro pour copier une ligne de résumé de chacune des séries de feuilles de calcul. La ligne récapitulative est spécialement formatée avec police / police couleur / couleur bg, mais une fois collée dans la "feuille de sumamry", elle doit simplement coller des valeurs sans mise en forme.
For LoopIndex = StartIndex To EndIndex
' start in a task sheet
Sheets(LoopIndex).Select
CopiedCells = ActiveSheet.Range("A156:L156").Copy
' now move to Summary sheet
Sheets("Summary Sheet").Select
ActiveSheet.Range("A8").Select
ActiveCell.EntireRow.Insert
ActiveCell.PasteSpecial Paste:=xlPasteValues
' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone
Application.CutCopyMode = False ' clears clipboard
Next LoopIndex
Toutes les recherches que j'ai effectuées indiquent que PastSpecial, xlValues, xlPasteValues ??devraient fonctionner, mais que rien ne supprime la mise en forme, je ne sais pas ce que je fais de mal ici. Il colle les valeurs plutôt que les valeurs référencées, donc c'est bien. J'ai une macro pour réinitialiser le formatage en boucle mais j'aimerais rendre plus efficace. J'utilise Excel 2007.
La solution
C'est vraiment étrange!
La raison en est que vous copiez, insérez puis collez. Essayez Insérer, Copier puis Coller:
'we must commence on the Summary Sheet
Sheets("Summary Sheet").Select
For LoopIndex = StartIndex To EndIndex
' insert the row before we start
ActiveSheet.Range("A8").Select
ActiveCell.EntireRow.Insert
' select the task sheet
Sheets(LoopIndex).Select
CopiedCells = ActiveSheet.Range("A156:L156").Copy
' now move to Summary sheet
Sheets("Summary Sheet").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone
Application.CutCopyMode = False ' clears clipboard
Next LoopIndex
Pour ce que ça vaut, j'ai eu des problèmes avec copy & amp; coller. Cela signifie que tant que votre macro est en cours d'exécution, vous ne pouvez pas faire grand chose d'autre.
Puisqu'il s'agit d'une plage fixe, je suggérerais ceci:
For LoopIndex = StartIndex To EndIndex
Sheets("Summary Sheet").Range("A8").EntireRow.Insert
For i = 1 To 12
Sheets("Summary Sheet").Cells(8, i) = Sheets(LoopIndex).Cells(156, i)
Next
Next
Autres conseils
ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False
ou
ActiveSheet.Range("A2").EntireRow.Value = ActiveSheet.Range("A1").EntireRow.Value
Remplacez A1 par votre source et A2 par votre cible.
Une fois la plage sélectionnée, je mets ceci
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
Fonctionne bien pour moi:)