VBA pb d'appel de fonction

Résolu
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 !!
Configuration: Windows XP Internet Explorer 7.0

3 réponses

  1. 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
    1. 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
    2. @ori05re,

      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
    3. @Polux31j'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
    4. @ori05Bon 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
  2. Contributeur
    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
    1. J'ai essayé d'enlever les guillemets ca ne marche pas...
      Merci quand même
      0
  3. Contributeur
    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