VBA pb d'appel de fonction [Résolu/Fermé]

Signaler
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
-
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
-
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

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 132
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)
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
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 !!
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 132 >
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009

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)
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3 >
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016

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
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3 >
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009

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 !!!
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
179
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
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
J'ai essayé d'enlever les guillemets ca ne marche pas...
Merci quand même
Messages postés
1669
Date d'inscription
vendredi 11 mai 2007
Statut
Contributeur
Dernière intervention
21 mai 2012
179
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

@++