[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

  • Votes
  • Date
  • Date décroissante
  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 !)
    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. 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

          Tu sélectionne une cellule qui est un objet et tu le définis comme un range : excel le trouve incohérent.