Récupérer adresse plage copiée

Bonjour,

j'ai une procédure dans une feuille qui me permet de faire un collage spécial valeur. (cf code ci-dessous). Je souhaiterai pouvoir ajouter une condition : si la cellule copiée provient de la même colonne que la colonne de destination, alors faire un collage "normal" (formule si formule, valeur si valeur) ; sinon, conserver un collage valeur. Mais je n'arrive pas à récupérer l'adresse de la plage copiée... Merci d'avance,

If Not Intersect(Target, Range("tab_devis")) Is Nothing Then
  If Application.CutCopyMode Then
        Target.Copy
        Application.EnableEvents = False
        Application.Undo
        Target.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.EnableEvents = True
    End If
End If

Bonjour,

Ça paraît quelque peu nébuleux, et plutôt tordu...

On ne sait pas quel type de procédure, tu as omis la déclaration...

La condition est curieuse. Si procédure Change, elle n'a en principe aucune chance d'être satisfaite...

Copier sur Target pour coller sur Target... la cible n'est guère éloignée de la source !

L'annulation entre les deux laisse perplexe...

Tu annonces coller en valeur, ce n'est pourtant guère le cas...

Probablement que cela ne ferait d'ailleurs aucune différence !

Je serais curieux de voir le résultat, bien que je suppose qu'il ne doit pas y avoir grand chose à voir...

Salut,

c'est une procédure worksheet_change.

On est en cutcopymode, donc :

  • si on colle dans la plage cible on déclenche la procédure
  • on copie la plage collée dans le presse papier
  • puis on annule l'action de coller sur la feuille
  • ensuite on colle seulement les valeurs

Ceci dans l'optique de conserver notamment les MFC de la plage de destination. C'est peut être tordu pour quelqu'un qui maitrise VBA mieux que moi, mais ça marche bien ! C'est vrai que dans l'exemple de code j'ai mis un xlpasteformulas au lieu de xlpastevalues. J'ai fais l'erreur puisque je jongle entre les 2 : en effet, selon l'adresse de la plage copiée initialement, je souhaitais faire un collage spécial valeur ou formule.

Après réflexion, comme on déclenche la procédure seulement après le collage, je pense en effet qu'on ne peut pas récupérer l'adresse de la plage initiale. Donc j'ai ajouté un userform dans ma procédure pour choisir manuellement le type de collage spécial qu'on souhaite faire. J'aurai préféré m'en passer, mais pour l'instant ça fonctionne bien comme ça.

Tu dis être curieux de voir le résultat : désolé mais c'est un fichier d'entreprise que je ne peux pas partager publiquement. J'ai essayé de faire un fichier exemple, mais j'ai un peu galéré car il y a beaucoup de choses dans mon fichier.

Enfin, merci beaucoup de t'être penché sur mon problème, et de manière générale, merci à tous les pro de VBA qui apportent des solutions aux moins expérimentés sur ce forum. Néanmoins, le ton un peu moqueur que tu utilises est plutôt désagréable et pas très constructif...

Neimad

Tu n'es en CutCopyMode que si Change est dû à un collage.

Undo ne sert à rien ! Et pour transformer en valeurs, il suffit de :

Target.Value = Target.Value

La copie ne déclenche aucun évènement...

Donc en tout état de cause, et sans connaître les tenants et aboutissants de ton opération, il conviendrait de rechercher une méthode plus appropriée.

Je me moque ? Non ! Même pas ! La chose est tellement habituelle... Le demandeur s'englue lui-même dans la méthodologie qu'il a mis en oeuvre sur la base au mieux de sa connaissance d'Excel et de sa méconnaissance de VBA, mâtinée éventuellement de quelques bricolages avec l'enregistreur, dont le seul effet certain est de ne permettre aucun progrès, aucune utilisation d'outils VBA performants, et de produire un code hasardeux de qualité toujours douteuse, et qu'il est préférable de destiner à la première poubelle...

Alors qu'il suffirait qu'il expose le problème réel dans son ensemble pour se voir proposer des solutions fonctionnelles et adaptées, aptes à résoudre du même coup des problèmes colatéraux qui n'ont pas encore eu le loisir de se poser...

Tu n'es en CutCopyMode que si Change est dû à un collage.

La copie ne déclenche aucun évènement...

Oui je suis d'accord.

Alors, ok peut être que ma méthode n'est pas la plus optimisée, mais elle fonctionne parfaitement, et ne me parait pas non plus ultra complexe : je n'ai pas 100 lignes de codes inutiles, pas de .select, etc.

Si je suis ton raisonnement, je n'essaie jamais de faire les choses par moi-même, je me contente d'exposer mes désirs et je laisse des gens comme toi faire le boulot... Désolé, mais il me semble important de proposer une base de réflexion avec sa demande : déjà pour montrer qu'on a planché sur le sujet et qu'on n'arrive pas la bouche en cœur pour faire travailler les autres à sa place ; ensuite parce que ce n'est qu'en faisant qu'on s'améliore.

J'ai l'impression de t'avoir frustré parce que tu n'as pas réussi à m'aider, en partie parce que mon souci était mal exposé, et surement aussi que tu n'as pas essayé de comprendre, plutôt de mettre en évidence les manquements de mon message. Consoles toi, tu auras surement l'occasion de rouler les mécaniques en faisant des belles macros toutes clinquantes bien parfaites pour d'autres personnes en recherche d'un super-héros VBA. Dans mon cas je recherche juste de l'aide, et des bons conseils, pas un programmeur qui me prend de haut a qui je pourrais déléguer mon travail en échange de supplications et hommages.

Houlà ! Il ne faudrait pas faire dévier mes propos vers une signification qu'ils n'ont pas !

"Supplications et hommages" : je n'ai même effleuré de telles notions, et j'y suis totalement imperméable. Lorsque je souhaite un retour, c'est un retour à caractère fonctionnel. Le reste... (cet aspect n'était de toute façon pas présent dans mes propos).

Loin de moi l'idée d'empêcher le demandeur de faire par lui-même, puisque c'est au contraire (sauf cas particulier) l'objectif principal. Ce que je reproche à un certain type de demande c'est d'enfermer au départ l'intervenant dans sa solution, qui est au mieux défectueuse puisque problème, sans fournir les éléments du problème... or une résolution implique que tous les éléments de la question soient exposés !

Mes motivations me regardent, cependant je ne suis nullement accroc à apporter de l'aide à tout prix, et en aucun cas frustré de ne pas en apporter ! Je n'en apporte d'ailleurs pas en général, hormis des considérations générales, tant que les conditions ne me conviennent pas. Mais je ne manque pas de m'étendre sur les défauts du code ou l'organisation générale observés, selon disponibilité... Ce que je trouve particulièrement constructif : inciter à ne pas persévérer dans l'à-peu près et le n'importe comment...

Sur ce, bonne journée.

Bonjour,

ton problème m'intéressait jusqu'à ce que je lise jusqu'au bout.

Purée, tu ne donnes vraiment pas envie qu'on t'aide.

T'es pas net toi... Tu as oublié tes gouttes ce matin ? Pourtant ils t'ont bien dit que c'était important.

eric

Rechercher des sujets similaires à "recuperer adresse plage copiee"