[Excel] Appel function et objet

Résolu
Bonjour,
J'ai un soucis sur l'utilisation des fonction sous excel.
Voici mon code de test :

Sub beurk()
Dim cel As Range
Dim cels As Range

Set plageC = Application.ActiveWorkbook.ActiveSheet.UsedRange.Columns("A").Cells
For Each cel In plageC
totop = cel.Select
toto (totop)
Next

End Sub

Function toto(ByVal n As Range)
n.Value = "gj"
toto = MsgBox("up")
End Function

Je met en variable les cellule d'une colonne, puis je les parcours et à chaque cellule j'essaye de lui appliquer la function toto.

Bon but ultime, n'est pas de conquérir le monde, mais d'appeler un fonction de test de cellule dans une boucle de parcours comme celle ci.

Or avec ce code ci excel me répond "objet requis" sur la ligne de mon appel de la fonction toto quand je lui passe totop en paramétre.

Quelqu'un peut m'expliquer en quoi je me plante ?
merci.
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. Contributeur
    bonjour

    Tu sélectionne une cellule qui est un objet et tu le définis comme un range : excel le trouve incohérent.
    1. Contributeur
      Bonjour,
      Ta macro déboguée,
      Pour ta ligne activemachin.activemachin etc.. pas besoin d'enfoncer les portes ouvertes :D

      Sub Test()
      Dim cel As Range
      Dim Lig As Long
      Dim Col As Integer
          Col = ActiveCell.Column
          Lig = Range(Cells(1, Col), Cells(1, Col)).SpecialCells(xlCellTypeLastCell).Row
          Range(Cells(1, Col), Cells(Lig, Col)).Select
          For Each cel In Selection
      'Une fonction doit être appellé soit par une variable ou par Call
          Call toto(cel)
      Next
      End Sub
      
      Function toto(ByRef n As Range)
      n.Value = "gj"
      toto = MsgBox("up")
      End Function

      A+
      EDIT:
      Quand tu sélectionne une colonne entière Cel renvoi l'adresse de la colonne et pas celle d'une cellule
      1. Contributeur
        bonjour

        Quand on utilise une fonction c'est pour exploiter le résultat et donc l'appel se fait :

        résultat = fonction(paramètres)

        Une fonction n'est pas faite pour faire du traitement d'affichage de message ou autre.

        Si tu veux faire de l'affichage ou autre, utilises une procédure "sub" que tu appelles par call.
        1. Merci beaucoup pour vos remarques/aides
          j'en ai tiré le code suivant :

          Sub beurk()
          Dim cel As Range
          Dim cels As Range

          Set plageC = Application.ActiveWorkbook.ActiveSheet.UsedRange.Columns("A").Cells
          For Each cel In plageC
          cel.Value = toto(cel)
          Next cel

          End Sub

          Function toto(ByVal n As Range)
          toto = "gj mec"

          End Function

          j'ai réussi à faire ce dont j'avais besoin, je résonnais à l'envers !

          (probléme résolu !)