[Excel] Appel function et objet

Résolu/Fermé
deniooo Messages postés 36 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 16 juin 2008 - 13 juin 2008 à 09:55
deniooo Messages postés 36 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 16 juin 2008 - 13 juin 2008 à 12:19
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.
A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 718
13 juin 2008 à 10:33
bonjour

Tu sélectionne une cellule qui est un objet et tu le définis comme un range : excel le trouve incohérent.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
13 juin 2008 à 10:39
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 718
13 juin 2008 à 10:53
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
deniooo Messages postés 36 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 16 juin 2008 1
13 juin 2008 à 12:19
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