IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro complémentaire - fonction avec argument [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut Macro complémentaire - fonction avec argument
    Bonjour à tous,

    Tout d'abord, merci pour ce forum et ces tutoriels qui me sont d'une grande aide au quotidien.

    Nous cherchons à regrouper toutes les fonctions Excel que l'entreprise utilise afin centraliser la "source" des fonctions et ainsi améliorer la maintenabilité et l'évolutivité des documents Excel.
    Je me suis tout de suite tourné vers les macros complémentaires seulement, j'ai un problème !

    Après avoir implémenté les fonctions dont j'avais besoin, j'ai généré une macro complémentaire. Le problème est que lorsque je veux utiliser cette macro complémentaire (fonction dans une cellule), Excel me dit que "Cette fonction ne prend pas d'argument." alors que toutes les fonctions que j'ai développé en possède.

    Déclaration de mes fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Function GetWeek(quand) As String
    Public Function GetDate(quand As String) As Date
    Public Function WeekDifference(Date1 As String, Date2 As String) As Integer
    Public Function DateDiffrence(Date1 As String, Date2 As String) As Integer
    Public Function WeekAdd(Ref As Integer, Number As Integer) As Integer
    Est-ce que ce problème vient d'une mauvaise déclaration de mes fonctions ? Comment faire pour qu'Excel reconnaisse les arguments de mes fonctions ?

    Merci d'avance pour vos conseils...
    Larry

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    ta premiere fonction est celle qui pose problème ?
    Ton paramètre n'est pas typé puisque la parenthese est fermée juste après.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut Pas de changement
    J'ai modifié la déclaration de ma fonction, pas de changement. Excel me donne le message d'erreur (Cette fonction ne possède pas d'argument) pour toute mes fonctions de la macro complémentaire.

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Il faudrait que tu nous en montres plus car les macro complémentaires ne sont normalement pas différentes.

    Tous les test que j'ai fait fonctionnent

    Exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function test4(ByVal toto As String) As String
    test4 = "Le résultat est " & toto
    End Function
     
    Public Function GetWeek(quand) As String
    GetWeek = quand + 5
    End Function

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut Ma macro complémentaire
    Voici le code complet de ma macro complémentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    Option Explicit
     
    Public Function GetWeek(ByRef quand As Range) As String
     
        Dim NumWeek As String
        Dim NumYear As Integer
     
        'Numéro de semaine de la date passée en paramètre
        '   semaine 1 = première semaine comportant 4 jours du mois de janvier
        NumWeek = Format(DatePart("ww", quand.Value, vbMonday, vbFirstFourDays), "00")
     
        'Soustrait 4 jours à la date passée en paramètre si la semaine n'est pas la première semaine de l'année
        '   permet de bien prendre le numéro de l'année précédente si la semaine appartient à l'année précédente
        If Val(NumWeek) > 1 Then quand = quand - 4
     
        'Numéro de l'année
        NumYear = DatePart("yyyy", quand, vbMonday, vbFirstFourDays)
     
        'Formate le numéro d'année en fonction de sa valeur
        If Val(NumYear) < 2010 And Val(NumYear) >= 2000 Then
            NumYear = Format(Val(Right(NumYear, 1)), "0")
        Else
            NumYear = Format(Val(Right(NumYear, 2)), "00")
        End If
     
        GetWeek = NumYear & NumWeek
     
    End Function
     
    Public Function GetDate(quand As String) As Date
     
        Dim Week As Integer
        Dim Year As Integer
     
        Dim Result As Date
     
        Week = Val(Right(quand, 2))
        Year = Val(Left(quand, Len(quand) - 2))
     
        'Ajoute les miliers pour trouver la bonne année
        If Year <= 90 Then
            Year = Year + 2000  '-----------------------------'
        Else                    '!!!!! BUG PREVU EN 2090 !!!!!'
            Year = Year + 1900  '-----------------------------'
        End If
     
        'Le premier janvier de l'année "Year"
        Result = CDate("01/01/" & Year)
     
        'Se rend au premier jour de la semaine 1 de l'année "Year"
        While DatePart("ww", Result, vbMonday, vbFirstFourDays) > 1
            Result = DateAdd("d", 1, Result)
        Wend
        While Weekday(Result, vbMonday) >= vbMonday
            Result = DateAdd("d", -1, Result)
        Wend
     
        'Ajoute le nombre de semaine "Week"
        Result = DateAdd("ww", Week - 1, Result)
     
        GetDate = Result
     
     
    End Function
     
     
    Public Function WeekDifference(Date1 As String, Date2 As String) As Integer
     
        Dim D1 As Date
        Dim D2 As Date
     
        D1 = CDate(GetDate(Date1))
        D2 = CDate(GetDate(Date2))
     
        WeekDifference = Int((D2 - D1) / 7)
     
    End Function
     
    Public Function DateDiffrence(Date1 As String, Date2 As String) As Integer
     
        Dim D1 As Date
        Dim D2 As Date
     
        D1 = CDate(Date1)
        D2 = CDate(Date2)
     
        'Se rend au premier jour de la semaine des deux dates
        While Weekday(D1, vbMonday) >= vbMonday
            D1 = DateAdd("d", -1, D1)
        Wend
        While Weekday(D2, vbMonday) >= vbMonday
            D2 = DateAdd("d", -1, D2)
        Wend
     
        DateDiffrence = Int((D2 - D1) / 7)
     
    End Function
     
    Public Function WeekAdd(Ref As Integer, Number As Integer) As Integer
     
        Dim Year As Integer
        Dim Year2 As Integer
        Dim Week As Integer
     
        Week = Val(Right(Ref, 2))
        Year = Val(Left(Ref, Len(Str(Ref)) - 3))
        Year2 = Year
     
        'Ajoute les miliers pour trouver la bonne année
        If Year2 <= 90 Then
            Year2 = Year2 + 2000  '-----------------------------'
        Else                    '!!!!! BUG PREVU EN 2090 !!!!!'
            Year2 = Year2 + 1900  '-----------------------------'
        End If
     
        If Week + Number > DatePart("ww", CDate("31/12/" & Year2), vbMonday, vbFirstFourDays) Then
            Week = 1
            Year = Year + 1
        ElseIf Week + Number <= 0 Then
            Week = DatePart("ww", CDate("31/12/" & Year2 - 1), vbMonday, vbFirstFourDays)
            Year = Year - 1
        Else
            Week = Week + Number
        End If
     
        Year = Year * 100
     
        WeekAdd = Year + Format(Week, "00")
     
    End Function
    Le problème ne viendrait pas de la macro en elle-même ?

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Déjà quelque chose d'étrange, pourquoi byref dans la première fonction, on s'attendrait plutot a byval non ?


    De plus tu fais sur un range


    ce qui fait planter le code chez moi ( je fais du débogage pas à pas)

    Mais pour ce qui est tu problème de paramètre, je ne l'ai pas chez moi ?!?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut
    Désolé, c'est un reste de tests que j'ai effectué... Donc oui, c'est bien un byval

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut Nouvel essai
    J'ai essayé de refaire la manip de chez moi et : ça marche !
    Le problème ne vient donc pas de ma macro.

    Quelqu'un a-t-il une idée ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 75
    Points : 90
    Points
    90
    Par défaut Problème résolu
    J'ai trouvé la source de l'erreur. Il ne s'agissait en effet pas de la macro en elle-même mais des paramètres Excel. Il fallait approuvé la macro (via le centre de gestion de la confidentialité).

  10. #10
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    ok, tu travailles avec excel 2007, c'est un blocage courant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31
  2. fonction avec argument predefini
    Par duplo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/08/2006, 19h06
  3. onChange et fonction avec arguments
    Par pierre.egaud dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2006, 11h02
  4. DLL export de fonction avec argument
    Par slate dans le forum C
    Réponses: 3
    Dernier message: 31/05/2006, 10h36
  5. creer une fonction avec arguments
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 03/06/2005, 08h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo