Copie du contenu d'une cellule sans cadre de sélection

Shinpi

XLDnaute Nouveau
Bonjour,

Afin d'améliorer un morceau de code que certains d'entre vous m'avaient aidé à composer, j'aurais à nouveau besoin de vos lumières…*;)

OBJECTIF*: j'aimerais que mon code VBA copie le texte d'une cellule spécifique sans que le cadre de sélection n'apparaisse (contour en tirets), et donc que même si j'appuie sur Échap ou autre, ce contenu soit conservé pour que je copie même si je clique ailleurs dans Excel ou entre d'autres informations.

SITUATION ACTUELLE*: mon code de base a pour but de réorganiser du texte en A1 lorsque la cellule est validée (texte saisi, puis appui sur la touche Entrée, et là le code est exécuté). Ensuite, en B1, j'ai une petite formule SUBSTITUE qui reprend le texte modifié par le code VBA en A1 et remplace certains caractères par d'autres. La dernière action du code VBA a pour effet de copier dans le Presse-Papiers le texte en B1 (la cellule est alors entourée de tirets).

Pour résumer*: je rentre du texte en A1 (le plus souvent par copier-coller depuis une autre application), il est réorganisé par le code VBA, il est repris en B1 avec modification de certains caractères, puis il est copié dans le Presse-Papiers. Sauf que si j'appuie sur Échap ou modifie une autre cellule, le Presse-Papiers est vidé et je perds le contenu copié, à moins de le copier à nouveau manuellement.

Pour copier ma cellule, j'utilise bêtement le segment suivant*:
Range("B1").Copy

Avez-vous une idée*? Merci d'avance*!
 

Dranreb

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule sans cadre de sélection

Bonsoir.

Ces 2 procédures vous permettront de récupérer directement depuis la macro le contenu de PressePapier dans une variable As String.
VB:
Property Get PressePapier() As String
Dim DOb As New DataObject
On Error Resume Next
DOb.GetFromClipboard: PressePapier = DOb.GetText
If Err Then MsgBox "Pas de données récupérées", vbCritical, "PressePapier"
End Property
Property Let PressePapier(Z As String)
Dim DOb As New DataObject
DOb.SetText Z: DOb.PutInClipboard
End Property
Voire, pour copier, d'affecter autre chose à PressePapier.
Nécessite la bibliothèque MSForms (déjà mise en référence s'il y a un UserForm dans votre projet).
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule sans cadre de sélection

Bonsoir Shinpi.

Regardez l'aide du côté de :
VB:
PasteSpecial Paste:=xlPasteValues
Bien entendu non testé dans votre contexte, faute de fichier exemple...

Edit : Bonsoir, Dranreb :)
Pas sûr d'avoir cerné la demande...
 
Dernière édition:

Shinpi

XLDnaute Nouveau
Re : Copie du contenu d'une cellule sans cadre de sélection

Merci beaucoup pour votre aide.

J'ai ajouté le code proposé (par Dranreb) à mon code d'origine et peut-être fait-il ce qu'il doit faire, mais je ne vois pas la différence.

La cellule copiée a toujours sont contour en tirets et si je modifie une autre cellule, je perds le contenu du Presse-Papiers.

Ce que j'aimerais, c'est que la cellule copiée ne soit pas entourée de tirets. Je bascule en permanence entre Excel et une autre application pour coller dans Excel le contenu à remettre en forme et copier-coller le résultat dans l'application d'origine, et je fais ça en boucle. Je ne vais pas entrer dans les détails, mais c'est vraiment la copie avec le contour en tirets qui me pose problème.

J'aimerais copier le contenu de la cellule sans que le contour n'apparaisse… *:(
 

Dranreb

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule sans cadre de sélection

Vous faites Z = PressePapier pour coller dans Z, et PressePapier = Z pour copier Z.
Vous n'avez même plus besoin du tout de passer par une cellule.
Il serait même possible de concevoir une macro qui le ferait en boucle lorsqu'elle trouve quelque chose dans le presse-papier, le corrige et l'y renvoie, puis l'en efface 3 secondes après. Vous n'auriez plus qu'à faire Ctrl+C Ctrl+V dans votre application, tant que la macro tourne !
Elle pourrait ressembler à ça :
VB:
Sub x()
Dim Z As String
Do: DoEvents
   Z = PressePapier
   If Z = "*" Then Exit Sub
   If Z <> "" Then
      Z = Replace(Z, "À", "A")
      Z = Replace(Z, "É", "E")
      ' etc.
      PressePapier = Z
      Application.Wait Now + TimeSerial(0, 0, 3)
      PressePapier = ""
      End If: Loop
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Copie du contenu d'une cellule sans cadre de sélection

Bonjour Shinpu, Dranreb :), Victor21:),

Un autre piste (sans prétention) avec un sous-menu du clique droit:


  • sélectionner les cellules où copier B1 (plage et/ou cellules contigües ou non)
  • cliquer droit sur la sélection
  • choisir un deux eux sous-menus "Coller B1..."

La transformation pour B1 (pour l'exemple) est de mettre en majuscule les lettres de rang impair de la cellule A1.
Une constante du code précise la feuille où se trouve la cellule B1 (Feuil1) (et par conséquent la cellule A1)
Une constante du code indique sur quelles feuilles les deux sous-menus doivent apparaitre (Feuil1 et Feuil3)

nb : réalisé sous Excel 2010

Edit:Je n'avais lu que le msg #1 de Shinpu et pas le #4. Après avoir lu le msg #4, je peux dire que mon code ne répond en rien à la question posée.
 

Pièces jointes

  • Shinpi-Copier B1-v1a.xlsm
    24.9 KB · Affichages: 20
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule sans cadre de sélection

L'essentiel c'est de ne plus copier de cellule. S'il faut absolument que la valeur à renvoyer dans le presse-papier soit calculée par une formule, ma procédure peut s'écrire comme ça :
VB:
Sub x()
Dim Z As String
Do: DoEvents
   Z = PressePapier
   If Z = "*" Then Exit Sub
   If Z <> "" Then
      ActiveSheet.[A1].Value = Z
      PressePapier = ActiveSheet.[B1].Value
      Application.Wait Now + TimeSerial(0, 0, 3)
      PressePapier = ""
      End If: Loop
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule sans cadre de sélection

J'ai peut être parlé un peu vite. Je suis sûr que ça aurait marché en Windows XP, mais j'avais déjà remarqué que Windows 7 a des réactions très bizarres quand on bascule d'une application à l'autre, voire d'un classeur à d'autres. Des UserForm affichés non modal disparaissent, puis réapparaissent quand on ne s'y attend plus. Du grand n'importe quoi…

En revanche cette procédure plus simple à l'air de marcher:
VB:
Sub x()
ActiveSheet.[A1].Value = PressePapier
PressePapier = ActiveSheet.[B1].Value
End Sub
Il faut la relancer en plus c'est tout. Avec cette formule en B1 :
Code:
=SUBSTITUE(A1;"?";"!")
Dans Word je sélectionne "Alors ?" puis Ctrl+C
Je vais (hélas) dans Excel, je lance ma procédure,
Dans Word Ctrl+V me ramène "Alors !".
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 009
Membres
101 865
dernier inscrit
MLL