Attribuer valeur

Bonjour, j'ai un tableau avec deux colonne, la première contient des jours de la semaine aléatoire et la seconde doit contenir la valeur "semaine" ou "week-end". Pour cela j'ai crée un code mais je ne sais pas quand l'appeler et comment on appel un fonction ?

Comment je peux faire appel à ma fonction pour qu'elle attribue la valeur souhaité en fonction de la colonne référence qui contient tous les jours ?

Function nouveau(periode As String) As String

    Select Case periode

    Case "lundi", "mardi", "mercredi", "jeudi", "vendredi"
    jour = "Semaine"

    Case "samedi", "dimanche"
    jour = "Week-end"

    Case Else
    MsgBox "Le jour n'est pas bon"

End Select

End Function

Merci.

Bonjour,

- ne mets pas de MsgBoxdans une fonction qui risque d'être appelée par de multiples cellules !!

- ta fonction doit être du type Range et non String sur la cellule incluse dans la fonction :

Function nouveau(periode As Range) As String

- elle doit enfin reprendre le nom de ta fonction

nouveau = "Semaine"

Pourquoi ne pas utiliser la fonction JOURSEM??

Steelson a écrit :

Bonjour,

- ne mets pas de MsgBoxdans une fonction qui risque d'être appelée par de multiples cellules !!

- ta fonction doit être du type Range et non String sur la cellule incluse dans la fonction :

Function nouveau(periode As Range) As String

- elle doit enfin reprendre le nom de ta fonction

nouveau = "Semaine"

Pourquoi ne pas utiliser la fonction JOURSEM??

Merci pour ton retour, je viens de réaliser les modifications indiquées.

Maintenant j'aimerais bien l'appeler mais je ne sais pas comment je peux faire pour appeler une fonction dans mon code ?

Concernant la fonction [JOURSEM], c'est une contrainte, je ne peux pas l'utiliser.

Merci.

Ah si c'est une fonction appelée par une procédure, tu peux mettre msgbox et avoir un argument string ! désolé, sans fichier je pensais que tu appelais cette fonction dans une cellule directement.

Pour appeler cette fonction :

nouveau "lundi"

doit suffire

Encore une fois, sans filet (sans fichier), difficile de vérifier avant de répondre ...

Bonjour,

pour qu'une fonction sorte un résultat, il faut que le nom de la fonction soit égale au résultat souhaité.

Voici comment je te propose de modifier ta fonction :

Function SemaineWE(periode As String) As String

    Select Case LCase(periode)
        Case "lundi", "mardi", "mercredi", "jeudi", "vendredi"
        SemaineWE = "Semaine"

        Case "samedi", "dimanche"
        SemaineWE = "Week-end"

        Case Else
        SemaineWE = "Le jour n'est pas bon"
    End Select

End Function

Je te propose ensuite d'utiliser cette fonction comme n'importe qu'elle autre fonction d'excel, en écrivant dans une cellule la formule : =SemaineWE(A2)

Dis moi si j'ai été assez clair,

RemBabar

RemBabar a écrit :

Je te propose ensuite d'utiliser cette fonction comme n'importe qu'elle autre fonction d'excel, en écrivant dans une cellule la formule : =SemaineWE(A2)

OUI, mais il souhaite

eamG1 a écrit :

appeler une fonction dans mon code

RemBabar a écrit :

Bonjour,

pour qu'une fonction sorte un résultat, il faut que le nom de la fonction soit égale au résultat souhaité.

Voici comment je te propose de modifier ta fonction :

Function SemaineWE(periode As String) As String

    Select Case LCase(periode)
        Case "lundi", "mardi", "mercredi", "jeudi", "vendredi"
        SemaineWE = "Semaine"

        Case "samedi", "dimanche"
        SemaineWE = "Week-end"

        Case Else
        SemaineWE = "Le jour n'est pas bon"
    End Select

End Function

Je te propose ensuite d'utiliser cette fonction comme n'importe qu'elle autre fonction d'excel, en écrivant dans une cellule la formule : =SemaineWE(A2)

Dis moi si j'ai été assez clair,

RemBabar

Merci pour vos retours, cependant, lorsque je procède ainsi, cela me renvoi : #NOM?

Je ne comprend pas pourquoi.

PS : C'est vrai que j'aimerais appeler la fonction depuis mon code

le #NOM est une erreur dû au fait du nom de la fonction qui ne doit pas être "SemaineWE" chez toi.

Pour appeler une fonction par code moi je procéderai ainsi :

Range("B2") = NomDeLaFonction(Range("A2"))

Ce bout de code écrit en B2 le résultat de la fonction à partir de la valeur de la cellule A2.

RemBabar

RemBabar a écrit :

le #NOM est une erreur dû au fait du nom de la fonction qui ne doit pas être "SemaineWE" chez toi.

Pour appeler une fonction par code moi je procéderai ainsi :

Range("B2") = NomDeLaFonction(Range("A2"))

Ce bout de code écrit en B2 le résultat de la fonction à partir de la valeur de la cellule A2.

RemBabar

Très bien merci, en écrivant cela, je peux l'appeler à partir d'une procédure (un nouveau module) ?

Oui, exactement ! Ce morceau de code est à intégrer dans un module, dans une procédure "Sub". Il fera appelle tout seul à la fonction

RemBabar a écrit :

Oui, exactement ! Ce morceau de code est à intégrer dans un module, dans une procédure "Sub". Il fera appelle tout seul à la fonction

Merci beaucoup.

Par contre un dernier point que je ne comprend pas, ici, on lui indique la cellule A2 et B2 mais moi j'ai environ 1000 lignes, comme ce passe l'incrémentation ?

Moi je choisirai la solution de facilité avec une boucle :

Sub AppelFonction()

NbLigne = 1000
For i = 2 To NbLigne
    Range("B" & i) = NomDeLaFonction(Range("A" & i))
Next i

End Sub

Pour chaque ligne (de 2 à 1000), on lance la fonction ..

RemBabar a écrit :

Moi je choisirai la solution de facilité avec une boucle :

Sub AppelFonction()

NbLigne = 1000
For i = 2 To NbLigne
    Range("B" & i) = NomDeLaFonction(Range("A" & i))
Next i

End Sub

Pour chaque ligne (de 2 à 1000), on lance la fonction ..

Merci. Par contre il est probable que j'ai de nouvelles lignes et c'est pour ça que je ne peux pas lui indiquer le nombre de ligne. comment je pourrais faire ?

Il suffit de calculer de manière automatique le nombre de ligne. Je te propose d'utiliser:

NbLigne = Range("A" & Rows.Count).End(xlUp).Row

Cela permet d'obtenir le numéro de la dernière ligne de la colonne "A", et tu peux donc faire ta boucle jusqu'à cette ligne

RemBabar a écrit :

Il suffit de calculer de manière automatique le nombre de ligne. Je te propose d'utiliser:

NbLigne = Range("A" & Rows.Count).End(xlUp).Row

Cela permet d'obtenir le numéro de la dernière ligne de la colonne "A", et tu peux donc faire ta boucle jusqu'à cette ligne

Merci beaucoup.

Juste une dernière question, tu as mis cela dans un module séparément, mais je peux quand même mettre ce code dans un module avec un code déjà existant ?


Lorsque je lance mon code, j'obtiens ce message d'erreur : variable ou procédure attendue et non un module.

Comment cela se fait ?

Merci

Oui tu peux effectivement mettre le code dans un module déjà existant,

Après avoir fait tes tests dis moi si tout fonctionne

Mais il serait plus facile pour moi de t'aider (si tu a un autre problème/question) avec ton fichier ou un fichier exemple..

RemBabar a écrit :

Oui tu peux effectivement mettre le code dans un module déjà existant,

Après avoir fait tes tests dis moi si tout fonctionne

Mais il serait plus facile pour moi de t'aider (si tu a un autre problème/question) avec ton fichier ou un fichier exemple..

Après quelques tests, j'ai l'impression que cela fonctionne.

Merci pour ton aide.

Avec plaisir !

Passe de bonne fêtes !

Rechercher des sujets similaires à "attribuer valeur"