Bonjour à tous,

Je débute sur VBA et je n'ai pas trouvé de problème identique sur ce forum (A priori)
J'ai pour but de coder la fonction "unique".

Je cherche à faire une fonction "Recopie" de façon universelle qui recopie une plage dans une autre, en débutant dans la recopie dans la plage sous la cellule appellante. J'ai un problème avec la fonction Copy de VBA.
J'ai essayé 3 façons :
1) recopie à la mano avec un for each : marche, mais c'est moche et "pas efficace"
2) recopie la plage (variable) grâce à la fonction copy : ne marche pas
3) recopie la plage (entrée manuellement) grâce à la fonction copy : ne marche tjs pas

Ce qui me bute, c'est que dans une procédure "Sub" les 3 techniques marchent... Je reste quoi. Des explications? Soyez Constructif svp ! :-)
Si jamais vous voyez le problème, pourriez-vous m'indiquer comment corriger mon code (version 2). ) svp ?
Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
' Recopie une plage (titre dans la case d'appel puis les valeur) à partir de la case qui appelle la fonction
Function Recopie3(plage As Range) As String
 
' Variables
Dim cellule As Range
Dim ligneCaller As Integer
Dim colonneCaller As Integer
Dim i As Integer: i = 1
 
' Corps de la fonction
Set cellule = Application.Caller
ligneCaller = cellule.Row
colonneCaller = cellule.Column
 
' Version Disgrâcieuse qui marche
For Each cellule In plage
    'MsgBox (" i = " & i & " valeur du résultat " & cellule.Value)
    Cells(ligneCaller + i, colonneCaller).Value = cellule.Value
    i = i + 1
Next cellule
 
' Détail
Recopie3 = "Titre"
 
' Problème et qui n'effectue pas le taff 
plage.Copy Range("H15")
MsgBox ("Clean")
 
' Code qui ne marche pas non plus... 
Range("A8:B11").Copy Range("I15")
 
End Function