[Excel] Appel function et objet

Résolu
deniooo Messages postés 36 Statut Membre -  
deniooo Messages postés 36 Statut Membre -
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. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Tu sélectionne une cellule qui est un objet et tu le définis comme un range : excel le trouve incohérent.
    0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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.
    0
  4. deniooo Messages postés 36 Statut Membre 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 !)
    0