XL 2010 Copie de plusieurs plages de cellules spécifiques dans le presse-papier

  • Initiateur de la discussion Initiateur de la discussion Renaud22
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Renaud22

XLDnaute Occasionnel
Bonjour à tous,

J'aurais besoin qu'on m'aide à concevoir un code VBA afin de copier simultanément dans le presse-papier trois plages de cellules spécifiques.

Dans le fichier ci-joint "Classeur_A.xlsm", j'ai une feuille de données quelconque qui contient des données dans les plages suivantes : P63 à P74, P79 à P90 et P94 à P105. J'aimerais que la macro copie les valeurs de chacune des plages dans le presse-papier afin qu'il soit copié dans le fichier "Classeur_B.xlsm". Veuillez noter que le fichier source et le fichier cible peuvent être nommés autrement.

Dans le fichier "Classeur_B.xlsm", j'ai affiché le tableau ORIGINAL sans les données copiées. Lorsque je sélectionne la cellule H63 et je colle les données présentes dans le presse-papier, je devrais obtenir le résultat apparaissant dans le tableau " AVEC LES VALEURS COPIÉES". La subtilité dans cette procédure est que les formules présentes dans les cellules "H75" et "H91" ne doivent pas être affectées. Dans cette exemple, le transfert de données s'applique à la colonne "H" mais pourrait s'appliquer à une autre colonne car, dans les faits, j'ai plus qu'un tableau.

Ceci n'est qu'un exemple qui me permettra d'adapter la macro à plusieurs situations. Dans la réalité, le fichier "Classeur_A.xlsm" contient plusieurs colonnes de données et le fichier "Classeur_B.xlsm" contient plusieurs tableaux. La macro devra fonctionner avec des fichiers indépendamment de leur nom.

Si vous désirez des précisions additionnelles, n'hésitez pas à me contacter.

En vous remerciant par avance pour votre précieuse aide.

Salutations,

Renaud22
 

Pièces jointes

Remarque: Si ce sont toujours les plages P63:P74, P79:P90 et P94:P105 de la feuille active lors du démarrage de la macro qui sont à copier, on peut évidemment se passer de les spécifier, il suffirait de sélectionner seulement les 3 cellules cibles de destination. Voulez vous que je l'écrive dans ce sens ?
 
Ça donnerait ça :
VB:
Option Explicit
Private TRngSrc() As Range
Sub CopieValeurs2()
   ReDim TRngSrc(0 To 2)
   Set TRngSrc(0) = ActiveSheet.[P63:P74]
   Set TRngSrc(1) = ActiveSheet.[P79:P90]
   Set TRngSrc(2) = ActiveSheet.[P94:P105]
   UFmSelect.Ouvrir "CopieValeurs2Go", "Copie des valeurs de 3 plages", _
      "1Cel:Première cellule cible pour les valeurs de :" & vbLf & TRngSrc(0).Address(False, False, xlA1, True), _
      "1Cel:Première cellule cible pour les valeurs de :" & vbLf & TRngSrc(1).Address(False, False, xlA1, True), _
      "1Cel:Première cellule cible pour les valeurs de :" & vbLf & TRngSrc(2).Address(False, False, xlA1, True)
      End Sub
Sub CopieValeurs2Go(TRng() As Range)
   Dim N As Integer
   For N = 0 To 2
      TRng(N).Resize(TRngSrc(N).Rows.Count, 1).Value = TRngSrc(N).Value
      Next N
   End Sub
 
bonjour

Dans le fichier ci-joint "Classeur_A.xlsm", j'ai une feuille de données quelconque qui contient des données dans les plages suivantes : P63 à P74, P79 à P90 et P94 à P105. J'aimerais que la macro copie les valeurs de chacune des plages dans le presse-papier afin qu'il soit copié dans le fichier "Classeur_B.xlsm". Veuillez noter que le fichier source et le fichier cible peuvent être nommés autrement.

déjà le fait de faire un .copy suffit a mettre ta/tes plages dans le presse papier donc je ne vois pas ce que tu cherche

tu dit que les nom de classeurs peuvent changer donc soit la macro devra être intégrée dans tout les classeurs concernés soit la macro ou fonction devra être intégré dans ton xlb ou un complément xlam
par ce que intégrer la macro au besoins a chaque fois reviens a réinventer la roue pour chaque fichier (concernés)
et je ne vois pas en quoi faire ça rendrait plus frendly ton app excel
là pour le coup j'ai envie de dire (ET téléphone maison)
sans parler du fait que la restitution se fait contiguë(toutes les plages sont jointes)

on t'a dit (me semble t il) que ce n’était pas la peine de passer par le presse papier
ce qui dans le cas présent semble la solution la plus adaptée

d'ailleurs en connaissant les address de destination (ou au moins la première ou les premières cellules de destination) puisque visiblement
elle sont sensées être restituées de la même manière (je parle de multiple sélection non contiguës)j'ai du mal a comprendre la notion de presse papier tout du moins dans ce cas de figure

je reviens un peu sur le fait que les fichier ne soient pas toujours les même ca implique de ta part plusieurs actions
copie dans le fichier base sélection du fichier source click droit sur la destination et collage
avec des noms de classeurs et donc probablement des noms de feuille différentes je ne vois pas comment automatiser cela sans faire une mécanique avec dialog de sélection de classeur (parce que le faire a la main rendrait complètement A3BSURDE ton projet)
donc au final tu complique plus les choses que tu te les simplifies

devant toute ces évidences (sauf manque de renseignements et précisions de part)je pense que l'abandon de cette idée est encore la meilleure solution

patrick
 
Bonjour.
En supposant que ce sont toujours les mêmes plages de la colonne P des lignes 63:74, 79:90 et 94:105 de la feuille active lors du démarrage de la macro qui sont à copier, il serait peut être plus simple d'utiliser l'UFmRefEdit de mon UFmSelect.xlsm car cela ne nécessiterait qu'une seule procédure :
VB:
Sub CopieValeurs3()
   Dim RngSrc As Range, RngCbl As Range
   For Each RngSrc In ActiveSheet.[P63:P74,P79:P90,P94:P105].Areas
      UFmRefEdit.Init "Cible " & RngSrc.Address(False, False, xlA1)
      Do: Set RngCbl = UFmRefEdit.Range
         If RngCbl Is Nothing Then
            Select Case MsgBox("Aucune cible définie pour :" & vbLf & RngSrc.Address(False, False, xlA1, True), _
               vbAbortRetryIgnore, "CopieValeurs3")
               Case vbAbort: Exit Sub: Case vbIgnore: Exit Do: End Select
         Else
            RngCbl.Resize(RngSrc.Rows.Count, 1).Value = RngSrc.Value
            Exit Do: End If
         Loop
      Next RngSrc
   End Sub
Je joins aussi le classeur de démo, car ça m'a conduit à une maintenance de l'UFmRefEdit.
 

Pièces jointes

Bonsoir Dranred,

Merci d'avoir donné suite à ma demande. Je suis désolé de ne pas avoir répondu plus tôt.

J'ai testé votre code et il fonctionne bien.

Cependant, les formules présentes dans les cellules "H75" et "H91" (classeur B) sont effacées alors qu'elles doivent être conservées.

Est-ce que votre code pourrait éventuellement fonctionner dans deux classeurs (source & cible) ouverts séparément sur deux écrans distincts.

Salutations,

Renaud22
 
Pourtant aucune des 4 procédures proposées dans mon dernier classeur n'écrase ces cellules
La Sub ReportNonVides ne les écrase pas si les cellules sources correspondantes sont vides
La Sub CopieValeurs1 ne les écrase pas si vous sélectionnez le bon nombre de lignes sources pour chaque paquet et une cellule cible suffisamment haut par rapport au nombre de lignes.
Les Sub CopieValeurs2 et CopieValeurs3 ne les écrasent pas à moins que les nombre de lignes destinatrices soit insuffisant ou que la 1ère cellule cible soit mal positionnée.
J'ignore s'il est possible de faire ce que vous dites. Normalement lorsque l'UFmSelect ou l'UFmRefEdit s'affiche il faut activer l'autre classeur et sa bonne feuille puis sélectionner la 1ère cellule cible désirée.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
461
Retour