VBA pb d'appel de fonction

Résolu/Fermé
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 - 7 sept. 2009 à 12:16
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 - 8 sept. 2009 à 09:27
Bonjour, j'ai crée une fonction copier_coller en VBA. Je souhaite lui passer en paramètre une plage de cellule nommée dans ma feuille. Evidemment quand je vais utiliser cette fonction le nom de la plage passée en paramètre change. Ma fonction est la suivante :

Function copier_coller(argument)
Sheets("Data_ASM").Select
Sheets("Data_ASM").Range("argument").Select
Selection.Copy
Set plage = Range("argument")
CellAdd = plage.Address
b = InStr(1, CellAdd, ":")
c = InStr(b + 2, CellAdd, "$")
ligne = Right(CellAdd, Len(CellAdd) - c)
Sheets("Data_ASM").Rows(ligne + 1).Select
Selection.Insert Shift:=xlDown
End Function

et ensuite si je veux l'utiliser

Call copier_coller(core1_ocean)

Mais bien entendu ca ne marche pas... :-)

Auriez vous une solution ??

Merci beaucoup !!

3 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 sept. 2009 à 12:55
Bonjour,

Peux tu nous dire:

1) Quel message d'erreur as-tu ?
2) Sur quelle ligne l'erreur se produit.
3) core1_ocean correspondant à quoi dans : Call copier_coller(core1_ocean), est-ce une plage déjà nommée dans Excel ?

Merci

;o)
0
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 3
7 sept. 2009 à 13:43
bonjour,
1) mon message d'erreur est le suivant : "erreur d'éxecution 1004 erreur définie par l'apllication ou par l'objet"

2) l'erreur se produit sur la ligne : Sheets("Data_ASM").Range(argument).Select (c'est évident que ça beuge ici étant donné que je n'ai pas de plage argument dans ma feuille Data_ASM ! mais je ne vois pas comment contourner ce pb....)

3) oui core1_ocean est une plage déjà nommée dans excel dans la feuille Data_ASM plus exactement


Merci beaucoup !!
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204 > ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009
7 sept. 2009 à 15:24
re,

Voilà un petit test.

Sub test()
Dim plage As Range

Set plage = Sheets(1).Range("B2:F5")

 Call testRange(plage)
 
End Sub

Sub testRange(argument)
Dim cel
Dim i As Integer

argument.Select

i = 1
For Each cel In argument
    cel.Value = i
    i = i + 1
Next

End Sub


Ca peut te permettre d'y voir un peu plus clair dans la manipulation d'un objet (Range).

;o)
0
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 3 > Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016
7 sept. 2009 à 15:57
j'ai modifié mon code :

Sub copier_coller(argument)
argument.Select
Selection.Copy
CellAdd = argument.Address
b = InStr(1, CellAdd, ":")
c = InStr(b + 2, CellAdd, "$")
ligne = Right(CellAdd, Len(CellAdd) - c)
Rows(ligne + 1).Select
Selection.Insert Shift:=xlDown
End Sub

Sub macro1()
Dim plage As Range
Set plage = Sheets("Data_ASM").Range("core1_ocean")
Call copier_coller(plage)
End sub


et la j'ai erreur 1004 : la methode select de la classe Range a échoué j'ai cette erreur sur la ligne argument.select

merci
0
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 3 > ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009
7 sept. 2009 à 16:28
Bon en fait ca marche !! j'ai modifié un ou deux trucs et c'est bon ! Merci beaucoup les test m'ont beaucoup aidés !!!
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
7 sept. 2009 à 12:56
bonjour :)

Je oense que ce sont tes guillemets qui te font l erreur ;) =>

Function copier_coller(argument)
Sheets("Data_ASM").Select
Sheets("Data_ASM").Range(argument).Select
Selection.Copy
Set plage = Range(argument)
CellAdd = plage.Address
b = InStr(1, CellAdd, ":")
c = InStr(b + 2, CellAdd, "$")
ligne = Right(CellAdd, Len(CellAdd) - c)
Sheets("Data_ASM").Rows(ligne + 1).Select
Selection.Insert Shift:=xlDown
End Function
0
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 3
7 sept. 2009 à 13:44
J'ai essayé d'enlever les guillemets ca ne marche pas...
Merci quand même
0
jjsteing Messages postés 1670 Date d'inscription vendredi 11 mai 2007 Statut Contributeur Dernière intervention 21 mai 2012 181
8 sept. 2009 à 09:27
Bonjour :)

Bon, je t'ai fais un exemple qui fonctionne.. enfin en partie car le 'coller' se colle sur toute les lignes.. je pense que la manip serait d'inserer d abord le nombre de lignes et après faire le coller juste dans la cellule suivante...


http://dl.free.fr/getfile.pl?file=/zi6wbvhf

@++
0