VBA : Ecriture d'une Formule dynamique grace à une variable

Phil_vb

XLDnaute Nouveau
Bonjour !

Je zone depuis ce matin pour trouver une réponse à mon problème, mais je ne trouve jamais mon bonheur... Le voici donc ce fameux problème !

J'ai un tableau de formation qui se construit de façon dynamique en fonction de divers formulaires ( notamment l'ajout de stagiaires).

Une fois que j'ai finis de saisir une session de formation lorsque je clique sur mon dernier stagiaire à saisir, j'ai un récap qui apparait dans des cellules. Jusque là aucun souci, pour toutes les informations que je demande.

La présence des stagiaires peut parfois se compléter aprés que la session ait été saisie (c'est la que c'est embetant). Il me faut donc une case récap avec un formule dedans.

Ce que je veux que ma fonction fasse c'est donc de faire apparaitre dans ma case récap le nom des personnes présente à cette formation ( en les concaténant)

Sachant que si je saisie "0" dans la présence du stagiaire, c'est qu'il était absent, si je saisie "-" c'est que la session ne s'est pas encore déroulée et s'il était présent je rentre le nombre d'heures qu'il a fait.

x etant le début de mon tableau et i la fin

voici ce que je voudrais insérer dedans :
(préalablement x et i déclarés en integer)

Code:
Dim iteration As Integer, formule As Variant
iteration = x

formule = "=SI(I" & iteration & "<>0,T(D" & iteration & ");"""")& "" "" "
For iteration = x + 1 To i - 1
formule = formule & "&SI(I" & iteration & "<>0;T(D" & iteration & ");"""")& "" "" "
Next

formule = formule & "&SI(I" & i & "<>0;T(D" & i & ");"""")"

ActiveSheet.Range("L" & x).FormulaLocal = formule      ' ERREUR 1004

En faisant un mgbox j'ai bien vérifié, ca me donne la formule voulue. Parcontre j'ai une erreur d'execution 1004 sur la derniere ligne. Je ne comprend pas... Si vous avez une idée vous me sauvez ! Merci d'avance !
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : VBA : Ecriture d'une Formule dynamique grace à une variable

Salut Phil_vb et le forum
Utilises les balises de code ("#" en mode avancé)
Un dépannage de code demande :
- l'intégralité du code
- ce qu'il doit faire
Là, tout ce que je peux dire c'est qu'aucune des variables x et i ne sont définies => regarde si ton erreur ne vient pas de là.
A+
 

Gorfael

XLDnaute Barbatruc
Re : VBA : Ecriture d'une Formule dynamique grace à une variable

Salut Phil_vb et le forum
En faisant un mgbox j'ai bien vérifié, ca me donne la formule voulue.
Donc, en faisant un copier/coller, elle fonctionne sans problème dans la feuille ?
Et tu comptes la mettre où ta formule à rallonge ?
Rappel : On n'est ni devin, ni télépathe, et on utilise pas ton fichier !

Si tu n'a pas de réponse :
- On t'en veut... mais avec l'anonymat d'internet....
- C'est impossible à faire... mais avec les fondus qui traînent sur ce site...
- On ne comprend pas le problème, ou il faut faire plus de recherche pour situer le problème que pour le résoudre...

Personnellement je sais vers quoi je m'orienterai !
A+
 

Phil_vb

XLDnaute Nouveau
Re : VBA : Ecriture d'une Formule dynamique grace à une variable

Bonjour Gorfael,

Donc oui en faisant un copier coller de la formule à rallonge que ca donne ca fonctionne !
Je ne sais pas si u as ouvert le fichier donné, et donc que tu as pu te faire une idée de l'allure du tableau... Mais sinon la formule atterirait dans une cellule ("L"& i) fusionnée.

cf pieces jointes du premier mess OU/Et de ce message avec impression écran...




Rappel : Je ne suis pas devin non plus ! :) Si vous avez besoin de renseignements complémentaires n'hesitez pas ce sera avec grand plaisir que j'essaierai d'y répondre !


Merci d'avance
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : VBA : Ecriture d'une Formule dynamique grace à une variable

Salut Phil_vb et le forum
J'avoue que de reconstruire l'algorithme de chaque macro ne me séduit pas. Toutefois, quelques remarques issues du survol du code :

D'après ce que je crois, tu utilises des Function pour modifier des cellules => Il y a deux sortes de macros :
- Function : son unique but est de retourner une valeur, et pas d'effectuer des opérations sur les cellules
- Sub : pour faire tout le reste.

Les cellules de L sont peut-être fusionnée : au lieu d'employer Range("L" & x) il faut peut être utiliser Range("L" & x).MergeArea

Je pense que ton problème vient plutôt de l'emploi des Function. Avec une version xslx, je ne peux rien affirmer, mais sous 2003, ça m'a déjà joué des tours. Et je n'ai pu résoudre les problèmes qu'en les passant en sub

Pour le reste :
Tu déclares tes variables n'importe où dans ta macro => ça ne sert à rien : VBA fait un premier passage pour réserver la place en RAM, avant d'interpréter le code => Il vaut mieux regrouper toutes tes déclarations en début de la macro.
Les indentations ne servent qu'à se repérer dans le code. Ça ne sert pas à rendre le code plus "attrayant", juste à te situer dans une boucle, un test, etc...

À certains moments tu te sers correctement de l'instruction With, à d'autre tu l'oublies complétement
A+
 

Phil_vb

XLDnaute Nouveau
Re : VBA : Ecriture d'une Formule dynamique grace à une variable

En ayant repris pas à pas, je me suis rendu compte qu'il y avait une erreur dans ma formule de base! un point virgule a été oublié à la place d'une virgule !

La formule marche impeccable.

Merci de tes conseils et de ta patience Gorfael !
 

Discussions similaires

Réponses
3
Affichages
390

Statistiques des forums

Discussions
297 960
Messages
1 964 650
Membres
200 631
dernier inscrit
Hmidi abdelfettah