web-dev-qa-db-fra.com

Copier la valeur de cellule en préservant le formatage d'une cellule à une autre dans Excel à l'aide de VBA

Dans Excel, j'essaie de copier du texte d'une cellule à une autre dans une autre feuille. La cellule source contient du texte mis en forme (gras, souligné, de couleurs différentes). Mais lorsque je copie le texte à l'aide de VBA dans l'autre cellule, la mise en forme est perdue.

Je sais que c’est parce que Excel ne copie que la valeur textuelle. Existe-t-il un moyen de lire le texte HTML (plutôt que du texte brut) à partir d'une cellule?

J'ai googlé cela et je n'ai pas eu de réponses. Je sais que si nous utilisons des méthodes de copier/coller, nous pouvons copier le formatage. Par exemple.

Range("F10").Select
Selection.Copy
Range("I10").Select
ActiveSheet.Paste

Mais je veux le faire sans copier-coller car ma destination est une cellule fusionnée et de taille identique à celle de ma cellule source. Existe-t-il une option disponible dans Excel VBA pour ce faire?

EDIT: J'ai pu le résoudre avec le code suivant.

Range("I11").Value = Range("I10").Value
For i = 1 To Range("I10").Characters.Count
    Range("I11").Characters(i, 1).Font.Bold = Range("I10").Characters(i, 1).Font.Bold
    Range("I11").Characters(i, 1).Font.Color = Range("I10").Characters(i, 1).Font.Color
    Range("I11").Characters(i, 1).Font.Italic = Range("I10").Characters(i, 1).Font.Italic
    Range("I11").Characters(i, 1).Font.Underline = Range("I10").Characters(i, 1).Font.Underline
    Range("I11").Characters(i, 1).Font.FontStyle = Range("I10").Characters(i, 1).Font.FontStyle
Next i
8
BlackCursor

Pour copier le formatage:

Range("F10").Select
Selection.Copy
Range("I10:J10").Select ' note that we select the whole merged cell
Selection.PasteSpecial Paste:=xlPasteFormats

copier la mise en forme cassera les cellules fusionnées, vous pourrez donc l'utiliser pour reconstituer la cellule

Range("I10:J10").Select
Selection.Merge

Pour copier une valeur de cellule, sans rien copier d'autre (et sans copier/coller), vous pouvez directement adresser les cellules

Range("I10").Value = Range("F10").Value

d'autres propriétés (police, couleur, etc ) peuvent également être copiées en adressant directement les propriétés de l'objet plage de la même manière

5
SeanC

Vous utilisez Excel 2010? Essayer

Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
7
Eric

Je préfère éviter d'utiliser select

     With sheets("sheetname").range("I10") 
          .PasteSpecial Paste:=xlPasteValues, _
                  Operation:=xlNone, _
                  SkipBlanks:=False, _
                  Transpose:=False
          .PasteSpecial Paste:=xlPasteFormats, _
                  Operation:=xlNone, _
                  SkipBlanks:=False, _
                  Transpose:=False
          .font.color = sheets("sheetname").range("F10").font.color
      End With
      sheets("sheetname").range("I10:J10").merge
3
scott
Sub CopyValueWithFormatting()
    Sheet1.Range("A1").Copy
    With Sheet2.Range("B1")
        .PasteSpecial xlPasteFormats
        .PasteSpecial xlPasteValues
    End With
End Sub
1
Ankush agarwal

Copie du texte en gras d'une feuille à une autre dans Excel à l'aide de VBScript 'Create instance Object

Set oXL = CreateObject("Excel.application")
oXL.Visible = True

Set oWB = oXL.Workbooks.Open("FilePath.xlsx")
Set oSheet = oWB.Worksheets("Sheet1")         'Source Sheet in workbook
Set oDestSheet = oWB.Worksheets("Sheet2")       'Destination sheet in workbook

r = oSheet.usedrange.rows.Count
c = oSheet.usedrange.columns.Count

For i = 1 To r
    For j = 1 To c
        If oSheet.Cells(i,j).font.Bold = True Then

            oSheet.cells(i,j).copy
            oDestSheet.Cells(i,j).pastespecial
        End If
    Next
Next

oWB.Close
oXL.Quit
0