Copie du contenu d'une cellule dans le Presse-Papiers en fin de code + formule

Shinpi

XLDnaute Nouveau
Bonjour,

Il y a quelques jours, j'ai ouvert une discussion concernant l'insertion d'un saut de ligne à chaque retour à la ligne automatique et j'ai fini par trouver une solution dans une ancienne discussion.

Ce code me permet de faire en sorte qu'en collant du texte dans la cellule B3, celui-ci soit automatiquement distribué sur des lignes de 45*caractères max. et qu'entre ces lignes soit inséré le caractère du saut de ligne, tout ça dans la même cellule B3. J'ai ensuite ajouté dans la cellule adjacente (C3) une formule qui remplace le caractère de saut de ligne par un gros carré noir. J'ai besoin de ça pour coller ensuite le résultat dans une autre application qui ne reconnaît malheureusement pas le caractère des sauts de ligne et dans laquelle je remplace manuellement les gros carrés par une balise interne au logiciel.

Ce que je souhaiterais obtenir, c'est qu'à la fin du code qui réorganise mon texte en B3, le contenu de ma cellule C3 soit copié dans le Presse-Papiers directement. Je ne sais pas si c'est possible, mais ce serait vraiment très pratique.

Je vous ai mis en pièce jointe mon fichier d'exemple et voici le code que j'utilise :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%, P As Range, r As Range, s, i%, x$, t$
n = 45 'nombre maximum de caractères par ligne, paramétrable
Set P = Range("B3:B" & Rows.Count) 'à adapter
Set r = Intersect(Target, P, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False = False
Application.EnableEvents = False 'désactive les événements
For Each r In r 'si entrées multiples (copier-coller)
s = Split(RTrim(Replace(r, vbLf, " "))) 'tableau des mots
For i = 0 To UBound(s)
x = t & IIf(i, " ", "") & Left(s(i), n)
t = t & vbLf & Left(s(i), n)
t = IIf(Len(x) - InStrRev(x, vbLf) > n, t, x)
Next
r = t
Next
'---ajustement des lignes et colonnes---
P.WrapText = False
P.RowHeight = 10
P.ColumnWidth = 70
P.WrapText = True
P.Rows.AutoFit
P.Columns.AutoFit
Application.EnableEvents = True 'réactive les événements
End Sub


Merci d'avance pour votre aide,


AL
 

Pièces jointes

  • AJOUT CELLULE AU PRESSE-PAPIERS.xlsm
    24.8 KB · Affichages: 29

Pierrot93

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule dans le Presse-Papiers en fin de code + formule

Bonjour,

une autre approche :
Code:
Sub test()
Dim x As New DataObject
'activer la reference Microsoft Forms 2.0 Object Library
x.SetText Range("C3")
x.PutInClipboard
End Sub

bonne journée
@+
 

Shinpi

XLDnaute Nouveau
Re : Copie du contenu d'une cellule dans le Presse-Papiers en fin de code + formule

Merci à tous les deux pour vos réponses ultra-rapides. :)

J'ai essayé la solution de Pierrot93, mais (même en activant la référence MF 2.0 au préalable) rien ne se passe.

Du coup, j'ai simplement ajouté la petite ligne de code de phlaurent55 à la fin de mon code d'origine et ça a fonctionné.

Merci encore, je vais gagner du temps avec ça !


AL
 

Shinpi

XLDnaute Nouveau
Re : Copie du contenu d'une cellule dans le Presse-Papiers en fin de code + formule

Je vous rassure, j'ai ben essayé de les coller par la suite. ;)

Je ne remets pas en cause votre solution, je dis juste que dans mon cas, je n'ai pas réussi à la faire fonctionner.

Pour information, j'ai collée votre code dans l'éditeur VBA à la suite de mon code d'origine, soit après le «*End Sub*». Peut-être n'aurai-je pas dû faire comme ça, je ne suis pas un expert non plus... Si je ne l'utilise pas correctement, ça peut expliquer pourquoi ça ne fonctionne pas pour mon fichier.

Merci en tout cas pour votre aide !

AL
 

Pierrot93

XLDnaute Barbatruc
Re : Copie du contenu d'une cellule dans le Presse-Papiers en fin de code + formule

Re,

il aurait fallu coller juste ceci :
Code:
Dim x As New DataObject
'activer la reference Microsoft Forms 2.0 Object Library
x.SetText Range("C3")
x.PutInClipboard

avant le "end sub" de ta procédure.... le code proposé étant une procédure à part entière.... ou bien l'éxécuté également avant ton "end sub" en l'appelant...
 

Discussions similaires

Réponses
7
Affichages
528