XL 2013 Problème pour copier/coller une sélection aléatoire

Halffy

XLDnaute Occasionnel
Bonsoir à tous,

J'ai passé mon après-midi à essayer de trouver la solution.... mais cela dépasse vraisemblablement mes faibles connaissances en VBA malheureusement :(
En effet je cherche à copier une "plage de cellules" de longueur aléatoire, et à transposer cela en VBA.
J'ai ainsi fait la moitié du chemin final (puisque j'arrive à coller sous la forme de l'image réalisée), avec ce code:

Sheets("Feuil1").Range("B2:O46").CopyPicture xlScreen, xlBitmap
Sheets("Feuil1").Paste Destination:=Range("Q2")

.... mais il me manque le plus important: Comment copier une "plage de cellules" de longueur aléatoire, et l'intégrer à ce code?
Si vous aviez un peu de temps à me consacrer s'il vous plait.... avec tous mes remerciements par avance.
Ci-joint le fichier où vous trouverez toutes les explications.
 

Pièces jointes

  • Classeur1.xlsm
    63.2 KB · Affichages: 6
Solution
Re,

"C'est ce que fait mon code du message#4, Il suffisait d'adapter"
==>
Trop complexe pour moi malheureusement :confused:

"Sub test_C()
CopierPlage Selection, Range("Q2"), xlScreen, xlBitmap

End Sub"
Maintenant, effectivement, c'est exactement ce que je me suis enquis à rechercher toute la journée, et ça marche parfaitement :cool:

Personnellement, j'étais parti sur ce code (avec l'aide en ligne):
Range("B2").CurrentRegion.CopyPicture xlScreen, xlBitmap
Sheets("Feuil1").Paste Destination:=Range("Q2")

Et en utilisant de fait un subterfuge qui consistait à occuper tous les espaces libres de façon invisible / Voir pour ce le fichier-Joint.

Toutefois je reconnais que ta procédure répond en...

Halffy

XLDnaute Occasionnel
Bonsoir Staple 1600,

Je viens donc de corriger le fichier afin de faire "sortir" à nouveau (pour bien comprendre) le défaut décrit /
Effectivement, ta MacroTest fonctionne bien et je t'en remercie, mais pour une plage bien définie; alors que je souhaiterai la même chose pour une plage aléatoire; ayant Toujours pour origine ("B2"), mais avec un nombre de lignes aléatoire.
 

Pièces jointes

  • Classeur1.xlsm
    62.8 KB · Affichages: 4

Staple1600

XLDnaute Barbatruc
Re

Un petit bonus
(une version paramétrable pour choisir la plage source et la cellule de destination)
VB:
Sub test_A()
CopierPlage Range("B2:O46"), Range("Q2"), xlScreen, xlPicture
End Sub
Sub test_B()
CopierPlage Range("B2:O46"), Range("Z2"), xlScreen, xlBitmap
End Sub
Sub CopierPlage(Splg As Range, Dplg As Range, a As XlPictureAppearance, b As XlCopyPictureFormat)
Splg.CopyPicture Appearance:=a, Format:=b
Dplg.Select
ActiveSheet.Paste
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Tel que ton ta feuille se présente, si je fais ce petit test
VB:
Sub test()
MsgBox [B2].CurrentRegion.Address
MsgBox Cells(Rows.Count, "B").End(xlUp).Row
End Sub
On voit qu'il n'est pas évident de déterminer quelle est l'adresse de la plage à copier.
 

Staple1600

XLDnaute Barbatruc
Re

De quel chemin similaire tu parles ?
Du code du message#4 ou du message#5?

Le problème est ton "tableau" se finit sur des cellules vides.
Partant de là, pas évident de déterminer quoi copier
(D'ailleurs quel de le but de copier cette plage en image ?)
 

Halffy

XLDnaute Occasionnel
Peut-être pourrions-nous recourir à un subterfuge annexe; tel remplir de caractères alphanumériques la ligne faisant office de bandeau inférieur, et de même couleur afin de garder l'effet "invisible"?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Sinon , j'ai pensé à ceci
Est-ce à ce type de résultat que tu veux arriver?
VB:
Sub Test_2()
Dim i&
For i = Cells(Rows.Count, "E").End(xlUp).Row To 4 Step -1
If Cells(i, "E") Like "Sortie*" Then
Cells(i, "B").Resize(19).Resize(, 14).CopyPicture 1, -4147
Cells(i, "Q").Offset(-2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next
End Sub
 

Halffy

XLDnaute Occasionnel
Je regarde, ça pourrait être intéressant.
Résultat: Non, ça ne marche pas.

En fait, il faudrait cherché à nommer la plage engendré par "Sélection.Copy" (qui proviendrait de la copie manuelle d'une zone aléatoire), afin de l'intégrer au code initial...

En effet, si je sélectionne une zone manuellement, et fais "Selection.Copy", Excel enregistre la zone copiée...
resterait alors à nommer cette zone en mémoire, et la mettre à la place de ("B2:O46"), tel du style:

Ma Plage = Selection.Copy
Sheets("Feuil1").Range("Ma Plage").CopyPicture xlScreen, xlBitmap
Sheets("Feuil1").Paste Destination:=Range("Q2")
 

Halffy

XLDnaute Occasionnel
Re,

"C'est ce que fait mon code du message#4, Il suffisait d'adapter"
==>
Trop complexe pour moi malheureusement :confused:

"Sub test_C()
CopierPlage Selection, Range("Q2"), xlScreen, xlBitmap

End Sub"
Maintenant, effectivement, c'est exactement ce que je me suis enquis à rechercher toute la journée, et ça marche parfaitement :cool:

Personnellement, j'étais parti sur ce code (avec l'aide en ligne):
Range("B2").CurrentRegion.CopyPicture xlScreen, xlBitmap
Sheets("Feuil1").Paste Destination:=Range("Q2")

Et en utilisant de fait un subterfuge qui consistait à occuper tous les espaces libres de façon invisible / Voir pour ce le fichier-Joint.

Toutefois je reconnais que ta procédure répond en tous points à ma requête, soit comment copier une zone aléatoirement sélectionnée, et surtout beaucoup plus classe dans sa rédaction ;)

Encore tous mes Remerciements pour ton dévouement / Fort est de constater que l'aide délivrée sur ce forum est toujours d'actualité.

Problématique résolue / Bonne nuit à tous.
 

Pièces jointes

  • Classeur1(2).xlsm
    51.5 KB · Affichages: 2

Discussions similaires

Réponses
8
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG