Macro qui Colle en valeur uniquement (sans copier)

Résolu
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009 - 22 janv. 2009 à 17:57
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009 - 25 janv. 2009 à 18:18
Bonjour

Le problème est simple :

Je souahite créer une macro qui me permette d'effectuer des collages en valeur avec une macro de manière à pouvoir ensuite affecter un raccourci clavier à cette macro et faire la même chose qu'un contrl+V mais en valeur !

La difficulté pour moi réside dans le fait qu'il faut expliquer à la machine qu'il faut simplement coller en valeur dans la cellule sélectionnée ce qu'elle a stocké au préalable dans le presse papier. L'utilisateur aura pris soin auparavant de copier la valeur qui l'intéresse.

Voilà mon code qui ne fonctionne pas :

Sub Copcolval()


Application.CutCopyMode = True


Range("D10").Select


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


End Sub

Merci de votre aide

17 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
22 janv. 2009 à 18:36
Bonsoir,

J'ai un peu de mal à comprendre tes explications, mais il me semble que tu veux simplemenent faire un COPIER / COLLER VALEUR de la cellule active, en résumé...

Donc :

Sub Macro()

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub

Amicalement,
Us.
3
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009
22 janv. 2009 à 19:20
Merci de ton aide mais pour être plus précis, je veux que la macro colle en valeur ce qui a été copié avant que la macro ne soit lancée.

Il ne faut donc pas qu'il y ait de ligne "Selection.Copy" dans le code, (et si on l'enlève de ta proposition, ça plante).

Je voudrais ensuite  affecter un touche clavier raccourci à cette macro qui permettra de faire des collages en valeur sans utiliser sa souris.
3
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009
22 janv. 2009 à 21:31
Bon pour réduire et tenter de simplifier encore le problème à son strict minimum, je le reformule en une seule phrase.

Comment faire un collage en valeur sans utiliser ni sa souris, ni le raccourci clavier Alt + L + V + V sous excel ?
Evidamment j'aimerai que la solution soit en vba et en référence absolue.

C'est mieux ?
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
23 janv. 2009 à 08:11
Salut,



[../auteur/US30/488557.aspx us_30], je comprends parfaitement ce qu'il recherche maus je n'ai pas trouvé la solution encore...
Je vais tenter de te l'expliquer.

Le code que tu donne fonctionne très bien quand on veut copier/coller des données à l'intérieur d'excel.

Le selection.copy copie donc bien la sélection active  puis le pastescpecial colle ce qui à été copié en valeur.

Pas de problème pour cette manip.

La où ca se complique c'est:

Imagine toi sur internet, tu copier une phrase que tu vois sur un site qui se trouve donc en mémoire dans le clipboard de ton PC, comment pourrait-on faire pour acccéder à ce contenu en mémoire sous Excel ? c'est à dire de coller cette phrase copiée dans une cellule Excel.

Est-ce plus clair?

LC
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
23 janv. 2009 à 11:48
Bonjour,

Merci de venir en aide... Ton explication est très clair... mais où est le problème ?

En effet, si par exemple, je mets en surbrillance dans cette page, ton texte : "Est-ce plus clair?" puis je fais COPIER avec CTRL+C (ou click gauche, et copier dans le menu), et enfin j'ouvre Excel, je selectionne une cellule, et ensuite COLLER (CTRL+V), j'ai bien le texte du clipboard qui se colle...
Cette possibilité était déjà présente sous windows 95... Donc, je pense que ce n'est pas cela que recherche mindfiel... ou sinon, il cherche midi à quatorze heures...

Amicalement,
Us.
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
23 janv. 2009 à 13:39
Re,

Sisi c'est parfaitement ce que tu décris que recherche mindfiel, mais ce fameux COLLER( CTR+V) ne doit pas être fait manuellement mais l'intermédaire de la macro qui fera ce coller elle même.

Donc en gros le code pourrait être

Range("A1").text  = Clipboard.getText

Mais l'objet clipboard n'est pas reconnu par vba...

La commande .pastespecial ne fonctionne que si l'élément copier est une sélection dans Excel ( le classeur actif ou un autre)

Voila je pense avoir fait le maximum pour éclaircir la situation.

LC

Pensez à accepter les réponses qui vous servent 
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
24 janv. 2009 à 16:34
Re,

je voulais liu proposer ce code là oui mais un problème se pose que je n'ai pas résolu et donc je n'ai pas donné ce code c'est que VBA ne veut pas reconnaitre "DataObject"... il doit falloir ajouter une référence mais laquelle ...

LC

Pensez à accepter les réponses qui vous servent 
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
25 janv. 2009 à 09:43
Capricieux Excel...

IL faut mettre une Useform avec cette déclaration (hors de toute procédure)

Dim MyData As DataObject

puis dans un module la macro1 :

Sub Macro1()
    Set MyData = New DataObject
    MyData.GetFromClipboard
    ActiveCell.Value = MyData.GetText(1)
End Sub

Pourquoi passer par une useform pour la déclaration... I don't know ! is-it a problem ?
En effet, je crois qu'il y a un petit subtilité d'utilisation qui constitue une espèce de bug avec le presse papier, si on ne veut pas passer par une userform... Malgré tout, après une première utilisation, on peut supprimer l'userform, le presse papier continu de fonctionner pour la session d'excel ouverte...  mais bon.

Amicalement,
Us.
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
25 janv. 2009 à 10:34
ohoh...

Et quelle subtilité !

Merci en effet moi non plus je ne comprends pas pourquoi... certainement un bug oui, je pense que ce sujet en aideras plus d'un à l'avenir.

Amicalement
LC

Pensez à accepter les réponses qui vous servent 
3
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 14:24
Re-bonjour

Désolé pour le délai de réponse, j'étais occupé mais je vois que vous avez avancé.
Pour reprendre ce dont j'ai besoin explicitement même si je pense que whitelegend avait mieux cerné.

Dans Excel
1) je copie le contenu d'une cellule, le contenu est enregistré dans le presse papier.
2) Ensuite je sélectionne une autre cellule, n'importe laquelle
3) On lance la macro

 La macro doit pouvoir coller en valeur ce qui a été copié lors de l'étape 1

C'est tout, voilà
Merci encore
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
25 janv. 2009 à 14:27
Re,

Bon je vois que j'avais compris plus comliqué que ce que tu veux.... Néanmoins ce sujet donnera les 2 solutions.

Mindfield, toutes les réponses et solutions sont dans les messages que nous avons posté.

Accepte les réponses qui te conviennent afin de pouvoir en faire profiter les autres ;)

LC

Pensez à accepter les réponses qui vous servent 
3
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 17:55
J'ai testé ça marche

Je voulais juste ajouter que pour ceux comme moi qui auraient à se servir de cette macro le but de traiter des données chiffrées, il est utile de modifier dans le Userform,  le "As DataObject" en "As Integer".

Un grand merci aux deux pro du vba qui m'ont aidé même si on a eu un peu de mal à se comprendre au début.
3
mindfield06 Messages postés 6 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 18:00
Une dernière chose, par contre je comprends pas vraiment pourquoi, quand je copie ça me change la hauteur de ligne  dans excel ?
C'est quoi ce bin's ?
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
25 janv. 2009 à 18:18
Re,

redimensionnent automatique des cellules.. c'est dans le format de cellule que ca se règle ca.

LC

Nota: Pour un autre problème un autre sujet -> cf règles ;)

Pensez à accepter les réponses qui vous servent 
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
22 janv. 2009 à 19:48
Euh... là, en termes de précision, j'ai déjà connu mieux...

J'ai du mal à cerner ton problème. IL faudrait prendre un exemple simple et explicite, peut-être pour expliquer...
Par exemple, est-ce que tu veux faire un copier d'une cellule contenant une formule, par exemple =PI(), puis faire un coller en valeur ? ... Donc là, je ne vois pas ton problème...
où est-ce qu'après le copier, perdre le focus (avec échappe), et ensuite faire un coller ?

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
22 janv. 2009 à 22:18
 Non c'est pire... Je ne vois pas en quoi ma première proposition n'est pas satisfaisante maintenant ?
On tourne en rond. Comme je te l'ai dit, décrit plutôt un exemple de manipulation, car tel que tu écris les choses en 2 lignes, je peux en faire au moins 4 interprêtations possibles.

Et maintenant, tu veux une référence absolue ?! ... tu dis tout et rien à la fois... Tant que tu n'arrivera pas à exprimer correctement quels sont les élélements de départ, et le résultat final... ben, je ne serais pas en mesure de formuler une bonne réponse. A moins, que c'est moi qui soit vraiment bouché ce soir... mais je te signale que tu ne réponds pas à ma demande : "IL faudrait prendre un exemple simple et explicite". (et donc je ne dis pas de reformuler une question encore plus vaguement qu'au premier post...)

Pour te guider, essayes de présenter les choses ainsi :

- Dans la cellule A1, j'ai une formule, disons : =PI()

- Je la copie. Par exemple avec CTRL+C.

- Dans la cellule B2, je veux coller la valeur du nombre précédemment copiée, soit obtenir dans B2 : 3,14156...

- Question : Comment le faire en VBA et que cela soit accessible par un raccourci.
- Question : Je voudrais que la cellule de départ soit celle qui se trouve selectionnée au lancement de la macro.
- Question : La cellule d'arrivé soit toujours B2.

etc... c'est qu'un exemple de présentation, mais j'espère quelle pourrait aider à une compréhension mutuelle... enfin, bref...

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
23 janv. 2009 à 23:37
bou... je tombe le cul par terre ! ... enfin...

Pour faire le Coller par VBA (donc réinventer la roue), voici une proposition de code :

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 23/01/2009 par Us
'
' Touche de raccourci du clavier: Ctrl+Maj+V
'



    Set MyData = New DataObject
    MyData.GetFromClipboard
    ActiveCell.Value = MyData.GetText(1)
End Sub



Attention, ici seul un texte sera collé... Et pis ensuite pour attribuer le raccourci clavier, il suffit de le définir à l'invite lors d'un enregistrement d'une macro...

On pourrait tout aussi bien coder l'envoi de la simulation de CTRL+V... soit :

Sub Macro4()
'
' Macro4 Macro
' Macro enregistrée le 23/01/2009 par Us
'
' Touche de raccourci du clavier: Ctrl+Maj+B
'
    SendKeys ("^V")
End Sub

Voilà donc.

=

Mais tout ceci signifie refaire CTRL+V déjà natif... c'est donc tout simplement complétement archi-idiot. Faut mieux perdre son temps à des choses qui seront plus utiles...

Merci WhiteLegend pour aide.

Amicalement,
Us.
0