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 :

Erreur "Circular reference" dans fonction [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut Erreur "Circular reference" dans fonction
    Salut à tous,

    J'ai écrit une fonction en VBA pour réaliser un calcul assez simple, il fait la somme de différentes cellules en fonction d'un point de départ.
    Tout fonctionne correctement à un détail prêt, la prise en compte de ma cellule de départ.

    Ci-joint le fichier excel incluant ma fonction.

    Le pb semble se trouvait au niveau de la prise en compte du nom (col+ligne) des cellules en argument. Mais je ne vois pas ce qui cloche

    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
    Function CalcURate(Week As Range, Resource As Range)
    'calculate the utilization rate
     
    Dim DayOne As String
    Dim DayLoad As Integer
    Dim WeekLoad As Integer
    Dim Rate As Variant
    Dim ColStart As String
    Dim RowStart As String
     
    ColStart = Columnletter(Week)
    RowStart = Resource.Row
     
    DayOne = ColStart & RowStart
     
    For i = 0 To 4
     
        Range(DayOne).Select
        'move to the right
        ActiveCell.Offset(0, i).Select
     
        If Range(GetCellName(Columnletter(ActiveCell), ActiveCell.Row)).Value = "A" Then
     
            DayLoad = 0
            TestEnd = "OK"
     
            While TestEnd <> "x"
                'move to the down
                ActiveCell.Offset(1, 0).Select
                    If Range(GetCellName(Columnletter(ActiveCell), ActiveCell.Row)).Value <> "x" Then
                            DayLoad = DayLoad + Range(GetCellName(Columnletter(ActiveCell), ActiveCell.Row)).Value
                    End If
                TestEnd = Range(GetCellName(Columnletter(ActiveCell), ActiveCell.Row)).Value
            Wend
     
        End If
     
        WeekLoad = WeekLoad + DayLoad
     
    Next
     
    'perform the rate calculation
    MaxWeek = 40
    Rate = WeekLoad * 100 / MaxWeek
     
    CalcURate = CStr(Rate) & "%"
     
    End Function
     
    Function Columnletter(Optional rng As Range) As String
    'Returns the Column Letter of the top left cell in rng.
     
        If rng Is Nothing Then Set rng = Application.Caller
        Columnletter = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))
     
    End Function
     
    Function GetCellName(strCellLettter, intCellNumber)
     
        GetCellName = strCellLettter + VBA.Right(VBA.Str(intCellNumber), VBA.Len(VBA.Str(intCellNumber)) - 1)
     
    End Function
    j'ai découpé le code pour tester, et tout semble correcte.
    Je ne vois pas pourquoi, quand je passe sur la fonction, il plante.

    la fonction test() en B4 me renvoie le bon point de départ, la procédure test2 me renvoie le bon résultat en A1, par contre, la fonction (avec les cellules en arguments) en B5 me parle de "circular reference" ......

    par avance merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut
    plus je fouille et moins je comprends....

    je pense qu'en fait le pb vient de ma boucle FOR et donc de l'erreur "circular reference".
    ce qui est étrange, c'est que je n'ai pas d'erreur avec ce code dans une procédure, mais ca ne fonctionne pas dans une Fonction.

    Ci-dessous la petite fonction de test que j'ai extraite de mon code, mais je ne vois pas où il y a une "circular reference" :

    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
    Function test(Week As Range, Resource As Range) As Integer
     
    ColStart = Columnletter(Week)
    RowStart = Resource.Row
     
    DayOne = ColStart & RowStart
     
    MaxWeek = 0
     
    For j = 0 To 4
     
        Range(DayOne).Select
        'move to the right
        ActiveCell.Offset(0, j).Select
     
        If Range(GetCellName(Columnletter(ActiveCell), ActiveCell.Row)).Value = "A" Then
            MaxWeek = MaxWeek + 8
        End If
     
    Next
     
    test = MaxWeek
     
    End Function

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

Discussions similaires

  1. Passage d'un String PHP dans fonction javascript et quotes
    Par roukgreg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2013, 14h48
  2. Réponses: 2
    Dernier message: 16/05/2012, 09h48
  3. AWK, probleme de quote dans fonction awk.
    Par damien_27 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/03/2009, 18h51

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