XL 2013 Fonction qui fonctionne individuellement mais pas dans une boucle

louloubru

XLDnaute Junior
Re-Bonjour !
(ouille ouille c'est dur ...)

j'ai une fonction qui fonctionnait très bien jusqu'à présent. Voilà que j'essaie de la mettre dans un boucle et ça ne fonctionne plus ...

Les deux situation ci-dessous :

- Procédure pour tester la fonction :

Code:
Sub somepartest()
    Dim u As Long
    u = SommeParticipants("Lancement 2009")
    MsgBox u
End Sub

- Boucle avec la fonction :
Code:
Sub SommePart()
    Dim i As Integer
    i = 10
    Do Until IsEmpty(Range("A" & i))
        Dim ev As String
        ev = Range("G" & i).Value
        Range("G" & i) = SommeParticipants(ev)
        i = i + 1
    Loop
    
End Sub

Mystère pour moi ...

La fonction en inclue une autre donc je préfèrerais ne pas avoir à mettre le code et que cela soit juste une erreur "bête" de syntaxe mais je le transmets si besoin.

Merci beaucoup !
(Que ferais-je sans ce forum ...)
 

louloubru

XLDnaute Junior
Bonsoir louloubru,

Si vous aviez donné le code complet de la fonction SommeParticipants le problème serait déjà résolu !

A+

Bonjour,

la fonction SommeParticipants :
VB:
'Fonction qui fait la somme dans toutes les feuilles contenant des contacts
Function SommeParticipants(Evenement)
    'Création des variables
    Dim Somme As Long
    Dim i As Integer
    Somme = 0
    InitialiseNoms_feuilles 'lance la macro qui rempli le vecteur Noms_feuilles avec les noms de feuilles
    'Boucle pour faire la somme sur toutes les feuilles
    For i = 0 To 13
    Somme = Somme + Application.Sum(Sheets(Noms_feuilles(i)).Range(RefCell(Evenement)).EntireColumn)
    Next i
    
    SommeParticipants = Somme
    
End Function

Fonction qui utilise la fonction RefCell pour trouver les références de la cellule :

Code:
Function RefCell(Valeur)
    RefCell = Sheets("ONF_COFOR").Cells.Find(Valeur, , xlValues).Address
End Function

C'est sur cette dernière fonction RefCell que me renvoie le débogage quand j'essaie de mettre la fonction SommeParticipants dans ma boucle.
NB : je prend toujours les coordonnées dans la même feuille : "ONF_COFOR" car toutes les feuilles ont la même architecture : les références sont valables quelle que soit la feuille.

Merci par avance !
 

louloubru

XLDnaute Junior
Bonjour loloubru,

Tout cela est bien tarabiscoté, il faudrait joindre votre fichier pour qu'on puisse corriger.

A+

J'ai supprimer les données sensibles du fichier, donc normalement des coordonnées sont présentes dans le fichier ...
Fichier ci-joint. Pour voir ce qui pose problème, cliquer sur le bouton "Obtenir la liste des participants à un évènement" de la feuille "Evènements".

Merci beaucoup !
 

Pièces jointes

  • Grande Liste RMT_version forum.xlsm
    507.2 KB · Affichages: 5

zebanx

XLDnaute Accro
Bonjour Job75 :cool: , louloubru

En essayant de faire un sub à partir de la fonction, les données en "#valeur" se sont mises à jour...
Etait-ce cette ligne qui bloquait ---> "initialise_somme_feuille" ?
C'est bien sinon comme petit UDF. ;)

A voir si c'est ok pour vous louloubru.

@+
 

Pièces jointes

  • Copie de Grande Liste RMT_version forum.xlsm
    483.7 KB · Affichages: 3
Dernière édition:

louloubru

XLDnaute Junior
Bonjour Job75 :cool: , louloubru

En essayant de faire un sub à partir de la fonction, les données en "#valeur" se sont mises à jour...
Etait-ce cette ligne qui bloquait ---> "initialise_somme_feuille" ?
C'est bien sinon comme petit UDF. ;)

A voir si c'est ok pour vous louloubru.

@+

Bonjour,

merci beaucoup mais euh ... je ne comprends pas trop !
C'est justement mon sub à partir de la fonction qui ne fonctionne pas, l'objectif étant effectivement que les données en #valeur soient mises à jour.
Ce que j'avais fait :

VB:
Sub SommePart()
    Dim i As Integer
    i = 10
    Do Until IsEmpty(Range("A" & i))
        Dim ev As String
        ev = Range("G" & i).Value
        Range("G" & i) = SommeParticipants(ev)
        i = i + 1
    Loop
   
End Sub

Je viens de lancer cette procédure dans le fichier que vous m'avez renvoyé et cela ne fonctionne pas, je suis preneuse du sub en question qui me permettrait de mettre à jour mes valeurs.

Le débogage m'envoie sur ma fonction RefCell ...


Il y a trop de choses à corriger dans votre fichier et sa conception même ne va pas, désolé je passe la main.


Job 75 pour la conception du fichier avec plusieurs feuilles ce n'est pas de mon ressort ... Je dois garder cette architecture.
Et pour le reste je débute en VBA donc effectivement ça ne doit pas être parfait mais ça fonctionne jusqu'à présent... Si vous me dites ce qui ne va pas je peux peut-être progresser.


Merci beaucoup !
 

zebanx

XLDnaute Accro
Re-

Chez moi ça fonctionne bien.
Le sub ne me sert qu'à tester la fonction et voir où ça peut "bugger" donc il ne vous sera d'aucune utilité.

Par contre, je vous propose un autre code qui reprend très fortement le votre.
L'array du nom des feuilles est ici renseigné et le Lbound à Ubound permet d'éviter de se poser la question des bornes de début et de fin (remplace le 0 à 13).

Vous trouverez des résultats en colonne J qui correspondent parfaitement à ceux obtenus par sommeparticipants(evenement)

@+

VB:
Function SPart(Evenement)
    'Création des variables
    Dim Somme As Long, i%
    
    Somme = 0
    NF = Array("ONF_COFOR", "CNPF_Fran", "Agri", "INRA", "AutRECH", "Enseigt", "PNR-Envt", "Décideurs", "Presse", "Etranger", "Coop-Exp", "Bois-Pépin", "CETEF", "Autre")
    For i = LBound(NF) To UBound(NF)
    Somme = Somme + Application.Sum(Sheets(NF(i)).Range(RefCell(Evenement)).EntireColumn)
    Next i
    
    SPart = Somme
    
End Function
 

Pièces jointes

  • Grande Liste RMT_version forum.xlsm
    485.3 KB · Affichages: 3

louloubru

XLDnaute Junior
Ah merci pour l'astuce LBound et UBound ! Plus simple comme ça !

En revanche je n'ai pas résolu mon porblème, je crois qu'on ne se comprend pas : la fonction fonctionne, mon problème est que je n'arrive pas à l'intégrer dans une boucle VBA qui me recalculerais les cellules à chaque fois...
C'est la boucle ci-dessous :

VB:
 Sub SommePart()
Dim i As Integer
i = 10
Do Until IsEmpty(Range("A" & i))
Dim ev As String
ev = Range("G" & i).Value
Range("G" & i) = SommeParticipants(ev)
i = i + 1
Loop

End Sub

Je place ensuite cette procédure dans le code de la feuille évènement pour que cela s’exécute à chaque ouverture car des lignes sont susceptibles d'être ajoutées.
Quand je lance cette procédure : SommePart, que ce soit dans mon fichier où dans celui transmis, cela ne fonctionne pas ... ET le débogage m'emmène sur ma fonction RefCell ! vrai mystère pour moi ...
 

zebanx

XLDnaute Accro
Re-

Si c'est une procédure-change, un code a été rajouté dans la wks "évènements" qui vient ajouter une nouvelle formule en colonne G à chaque ajout en colonne A.

@+
 

Pièces jointes

  • Grande Liste RMT_version forum.xlsm
    487 KB · Affichages: 3

Discussions similaires