Omettez les guillemets lors de la copie à partir d'une cellule

Problème:
Lors de la copie d'une cellule à partir D'Excel en dehors du programme, des guillemets doubles sont ajoutés automatiquement.

Détails:
J'utilise Excel 2007 sur une machine Windows 7. Si j'ai une cellule avec la formule suivante:

="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."

La sortie dans la cellule (formatée en nombre) ressemble à ceci dans Excel:

1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.

Bien et bien. Mais, si je copie la cellule dans un autre programme, tel que le bloc-notes, je reçois des guillemets doubles ennuyeux au début et à la fin. Notez que les onglets créés par "CHAR (9)" sont conservés, ce qui est bien.

"1  SOME NOTES FOR LINE 1.  2     SOME NOTES FOR LINE 2."

Comment puis-je empêcher ces guillemets doubles d'apparaître, lorsque je copie dans un autre programme? En d'autres termes, puis-je empêcher leur ajout automatique lorsque la cellule est copiée dans le presse-papiers?

62
demandé sur pnuts 2014-07-23 16:17:00

10 réponses

Si vous essayez de coller dans Word-Pad, Notepad++ ou Word, vous n'auriez pas ce problème. Pour copier la valeur de la cellule en tant que texte pur, pour obtenir ce que vous décrivez, vous devez utiliser une macro:

Dans le classeur où vous voulez que cela s'applique (ou dans votre personnel.xls si vous souhaitez utiliser plusieurs classeurs), placez le code suivant dans un module standard:

Code:

Sub CopyCellContents()
'create a reference in the VBE to Microsft Forms 2.0 Lib
' do this by (in VBA editor) clicking tools - > references and then ticking "Microsoft Forms 2.0 Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub

Pour ajouter un module standard de votre projet (classeur), ouvrir le VBE avec Alt+F11 et ensuite, faites un clic droit sur votre classeur dans la fenêtre de projet en haut à gauche et sélectionnez Insérer > Module. Collez le code dans la fenêtre du module de code qui s'ouvrira à droite.

Retour dans Excel, allez Outils > Macro>Macros et sélectionnez la macro appelée "CopyCellContents", puis choisissez Options dans la boîte de dialogue. Ici, vous pouvez affecter la macro à une touche de raccourci (par exemple comme CTRL+C pour la copie normale) - j'ai utilisé CTRL+Q.

Ensuite, lorsque vous voulez copier une seule cellule sur le bloc-notes / partout, faites simplement Ctrl + q (ou tout ce que vous avez choisi), puis faites un CTRL+V {[11] } ou Edition > Coller dans la destination choisie.

Ma réponse est copiée (avec quelques ajouts) de: ici

EDIT : (à partir des commentaires)

Si vous ne trouvez pas la Bibliothèque Microsoft Forms 2.0 dans la liste des références, Vous pouvez essayer

  • Je cherche FM20.DLL à la place (merci @Peter Smallwood)
  • cliquer sur Parcourir et sélectionner C:\Windows\System32\FM20.dll (32 bit Windows) (merci @JWhy)
  • cliquez sur Parcourir et sélectionnez C:\Windows\SysWOW64\FM20.dll (sur 64 bits)
24
répondu user3616725 2017-03-22 11:07:59

Je viens d'avoir ce problème et l'emballage de chaque cellule avec la fonction CLEAN l'a corrigé pour moi. Cela devrait être relativement facile à faire en faisant =CLEAN(, en sélectionnant votre cellule, puis en remplissant automatiquement le reste de la colonne. Après avoir fait cela, les pâtes dans le bloc-notes ou tout autre programme n'avaient plus de guillemets en double.

51
répondu Greg Smalter 2018-02-26 11:47:15

Collez-le D'abord dans Word, puis vous pouvez le coller dans le bloc-notes et il apparaîtra sans les guillemets

19
répondu Jonathan Wilson 2015-03-09 18:10:20

Si vous voulez sélectionner plusieurs cellules et copier leurs valeurs dans le presse-papiers sans toutes ces citations ennuyeuses, le code suivant peut être utile. Ceci est une amélioration du code donné ci-dessus de user3616725.

Sub CopyCells()
 'Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
 'Then set a keyboard shortcut to the CopyCells Macro (eg Crtl T)
 Dim objData As New DataObject
 Dim cell As Object
 Dim concat As String
 Dim cellValue As String
 CR = ""
  For Each cell In Selection
  If IsNumeric(cell.Value) Then
   cellValue = LTrim(Str(cell.Value))
  Else
   cellValue = cell.Value
  End If
  concat = concat + CR + cellValue
  CR = Chr(13)
 Next
 objData.SetText (concat)
 objData.PutInClipboard
End Sub
4
répondu Peter Smallwood 2016-12-25 10:09:25

Ma solution lorsque j'ai rencontré le problème des guillemets était de supprimer les retours chariot de la fin du texte de mes cellules. En raison de ces retours chariot (insérés par un programme externe), Excel ajoutait des guillemets à la chaîne entière.

3
répondu martiangoblin 2017-03-03 19:45:57

Problème Possible par rapport à la réponse de "user3616725":
Im sur Windows 8.1 et il semble y avoir un problème avec le code VBA lié de la réponse acceptée de "user3616725":

Sub CopyCellContents()
 ' !!! IMPORTANT !!!:
 ' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
 ' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
 Dim objData As New DataObject
 Dim strTemp As String
 strTemp = ActiveCell.Value
 objData.SetText (strTemp)
 objData.PutInClipboard
End Sub

Détails:
Courir au-dessus du code et coller le presse-papiers dans une cellule dans Excel, je reçois deux symboles composés de carrés avec un point d'interrogation à l'intérieur, comme ceci:⍰ ⍰. Coller dans le bloc-notes ne montre même rien.

Solution:
Après avoir cherché un certain nombre fois que j'ai trouvé un autre script VBA de l'utilisateur "Nepumuk" qui utilise L'API Windows . Voici son code qui a finalement fonctionné pour moi:

Option Explicit

Private Declare Function OpenClipboard Lib "user32.dll" ( _
    ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
    ByVal wFormat As Long, _
    ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
    ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
    ByVal lpStr1 As Any, _
    ByVal lpStr2 As Any) As Long

Private Const CF_TEXT As Long = 1&

Private Const GMEM_MOVEABLE As Long = 2

Public Sub Beispiel()
    Call StringToClipboard("Hallo ...")
End Sub

Private Sub StringToClipboard(strText As String)
    Dim lngIdentifier As Long, lngPointer As Long
    lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1)
    lngPointer = GlobalLock(lngIdentifier)
    Call lstrcpy(ByVal lngPointer, strText)
    Call GlobalUnlock(lngIdentifier)
    Call OpenClipboard(0&)
    Call EmptyClipboard
    Call SetClipboardData(CF_TEXT, lngIdentifier)
    Call CloseClipboard
    Call GlobalFree(lngIdentifier)
End Sub

Pour l'utiliser de la même manière que le premier code VBA d'en haut, changez le sous "Beispiel()" de:

Public Sub Beispiel()
    Call StringToClipboard("Hallo ...")
End Sub

À:

Sub CopyCellContents()
    Call StringToClipboard(ActiveCell.Value)
End Sub

Et exécutez-le via le menu Macro Excel comme suggéré à partir de "user3616725" de la réponse acceptée:

Retour dans Excel, allez Outils > Macro>Macros et sélectionnez la macro appelée "CopyCellContents" et puis choisissez Options dans la boîte de dialogue. Ici, vous peut affecter la macro à une touche de raccourci (par exemple comme Ctrl+c pour la normale copie) - j'ai utilisé Ctrl + Q.

Ensuite, lorsque vous voulez copier une seule cellule sur le bloc-notes/partout, faites simplement Ctrl + q (ou tout ce que vous avez choisi), puis faites un Ctrl + v ou Editer > coller dans la destination choisie.


modifier (21 novembre dans 2015):
@ commentaire de "dotctor":
Non, ce n'est sérieusement pas une nouvelle question! À mon avis c'est une bonne ajout de la réponse acceptée car ma réponse résout les problèmes auxquels vous pouvez faire face lors de l'utilisation du code de la réponse acceptée. Si j'avais plus de réputation, j'aurais créé un commentaire.
@ commentaire de "Teepeemm":
Oui, vous avez raison, les réponses commençant par le titre "problème:" sont trompeuses. Changé en: "problème Possible par rapport à la réponse de"user3616725":". Comme un commentaire, j'aurais certainement écrit beaucoup plus compact.

2
répondu SourceSeeker 2015-11-21 21:33:20

Pour conserver les sauts de ligne lors du collage dans le bloc-notes, remplacez cette ligne dans la macro:

strTemp = ActiveCell.Value

Par:

strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)
0
répondu JCP 2015-09-11 15:30:23

, Veuillez utiliser la formule ci-dessous

=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

Et vous obtiendrez ce que vous voulez ;-)

0
répondu Stéphane Chivet 2016-02-04 12:32:43

Il est également possible de supprimer ces guillemets doubles en plaçant votre résultat sur la fonction "Clean".

Exemple: = CLEAN ("1" & CHAR (9) & " QUELQUES NOTES POUR LA LIGNE 1."&CHAR(9)&"2"&CHAR(9) & " QUELQUES NOTES POUR LA LIGNE 2.")

La sortie sera collée sans les guillemets doubles sur D'autres programmes tels que Notepad++.

0
répondu Yuri Antelo 2018-06-07 11:02:18

"Si vous voulez sélectionner multiples cellules et copiez leurs valeurs dans le Presse-papiers sans toutes ces citations ennuyeuses" (Sans les bogues dans la solution multi-cellules de Peter Smallwood )" le code suivant peut être utile."Ceci est une amélioration du code donné ci-dessus de Peter Smallwood (qui "est une amélioration du code donné ci-dessus de user3616725"). Cela corrige les bogues suivants dans la solution de Peter Smallwood:

  • évite " Variable non défini " erreur du compilateur (pour "CR" - "clibboardFieldDelimiter" ici)
  • Convertit une cellule vide en une chaîne vide vs. "0".
  • ajouter Tab (ASCII 9) vs CR (ASCII 13) après chaque cellule.
  • Ajouter un CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) après chaque ligne.

Remarque: Vous ne pourrez toujours pas copier les caractères incorporés dans une cellule qui provoqueraient une sortie du champ cible dans lequel vous collez cette cellule (C'est-à-dire Tab ou CR lors du collage dans L'édition Fenêtre de table D'accès ou SSMS).


Option Explicit

Sub CopyCellsWithoutAddingQuotes()

' -- Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
' -- NOTE: You may have to temporarily insert a UserForm into your VBAProject for it to show up.
' -- Then set a Keyboard Shortcut to the "CopyCellsWithoutAddingQuotes" Macro (i.e. Crtl+E)

Dim clibboardFieldDelimiter As String
Dim clibboardLineDelimiter As String
Dim row As Range
Dim cell As Range
Dim cellValueText As String
Dim clipboardText As String
Dim isFirstRow As Boolean
Dim isFirstCellOfRow As Boolean
Dim dataObj As New dataObject

clibboardFieldDelimiter = Chr(9)
clibboardLineDelimiter = Chr(13) + Chr(10)
isFirstRow = True
isFirstCellOfRow = True

For Each row In Selection.Rows

    If Not isFirstRow Then
        clipboardText = clipboardText + clibboardLineDelimiter
    End If

    For Each cell In row.Cells

        If IsEmpty(cell.Value) Then

            cellValueText = ""

        ElseIf IsNumeric(cell.Value) Then

            cellValueText = LTrim(Str(cell.Value))

        Else

            cellValueText = cell.Value

        End If ' -- Else Non-empty Non-numeric

        If isFirstCellOfRow Then

            clipboardText = clipboardText + cellValueText
            isFirstCellOfRow = False

        Else ' -- Not (isFirstCellOfRow)

            clipboardText = clipboardText + clibboardFieldDelimiter + cellValueText

        End If ' -- Else Not (isFirstCellOfRow)

    Next cell

    isFirstRow = False
    isFirstCellOfRow = True

Next row

clipboardText = clipboardText + clibboardLineDelimiter

dataObj.SetText (clipboardText)
dataObj.PutInClipboard

End Sub
0
répondu Tom 2018-06-29 22:34:21