Fiabilité des références circulaires ?

Bonjour à toutes et à tous,

J'utilise dans une feuille de calcul des cellules qui font appel à elles même, et je voulais savoir si ce procédé était risqué.

Voici mon algorithme :

SI(Bouton_enregistrer_appuyé;Prendre_valeur;Cellule_actuelle);

L’intérêt ici, c'est qu'un changement de paramètre (un coefficient, un taux de TVA, ou une masse), n'affectera pas la cellule tant qu'on aura pas appuyé sur le bouton associé.

Dans mon optique, j'aurai un fichier de données par mois et cela sur toute une année. Je ne voudrai pas que ces même données disparaissent. En effet dès qu'on clique sur l'une des cellules, la référence est oublié et laisse place à un zéro.

Ci joint un fichier allégé illustrant un peu se que je veux faire. Soit une partie "tableau de saisie" qui remplira automatiquement le tableau "base de données" selon des paramètre (ligne de prod, jour, équipe).

Merci beaucoup pour le temps que vous me consacrerez.

PS : Pour utiliser ma feuille de calcul, il faut accepter les macros,et mettre un nombre d'itération >1 dans les options.

20test-fcts-excel.zip (15.12 Ko)

Je vois que mon fichier a été vu 7 fois. Il y a t-il une incompréhension ? Est ce que ma question est mal posée ? Je suis un peu confus là.

Bonjour,

Personnellement je ne suis pas favorable à l'utilisation de références circulaires dans cette situation. Je ne connais d'ailleurs aucun cas ou c'est indispensable. A ma connaissance cette option est uniquement destinée à permettre le débogage de formules ou à éviter le blocage d'Excel dans des circonstances involontaires.

Puisque tu sais utiliser VBA, Sers-tois en pour faire les calculs : ça éliminera non seulement les calculs circulaires

mais aussi les formules inutiles et ça allègera tes classeurs d'autant...

A+

Merci pour ta réponse Galopin. Même si j'ai des connaissances en C & C++, le VBA je ne connais pas. Je peux comprendre des algorithmes, mais je ne sais pas comment interagir avec une feuille de tableur excel :S.

Est se que quelqu'un a t-il déjà utilisé ou fait ce genre de programme ? C'est a dire l'utilisation de cellule qui ne change de valeur que si certains paramètres sont présents ? Quel est alors l'astuce utilisée ?

Merci d'avance.

Bonjour,

Un essai en prenant pour base la mise en page actuelle, la macro fonctionnera peut importe le nombre de ligne du tableau, et pourra être appellée de n'importe quelle feuille.

pour l'instant, la seule contrainte est que le tableau de saisie soit sur la même page que la tableau à remplir comme dans ton fichier exemple. Joins un fichier avec la mise en page définitive (par rapport à tes mois / années) et j'adapterais en conséquence.

Cordialement.

Merci Zirak pour ton aide, Je décortique le travail que tu viens de m'apporter. Je vois que le bouton que j'avais mis n'est plus là, tu te rappelles du nom de la macro que tu as rajouté ?

Tu as bien su anticiper mon besoin, en effet les deux tableau (saisi et base de données) seront sur des pages différentes. Tout ça de manière a se que l'utilisateur final ait une interface de saisi simple et allégée (sans risque de modifier une valeur involontairement).

On se tient au courant ^^.

Cordialement.

EDIT : Il semblerait que la fonction que tu aurait écrit soit "Module1". Mais je n'arrive pas à l’exécuter en tant que macro. :S

EDIT 2 : C'est bon elle s'appelle juste "Valide". J'essaye maintenant de comprendre ton code. Et si tu le veux bien je te poserai quelque questions.

Bizarre pourtant je n'ai pas touché au bouton :-/

Revoilà le fichier, j'ai remis le bouton et refais la liaison avec la macro.

Cordialement.

edit : Non la macro "Valide" ainsi qu'une autre étaient déjà là, la mienne s'appelle "Enregistrement".

J'ai aussi remarqué mon erreur, et j'ai refais la liaison avec le bouton. Côté programmation, où a tu instancié/déclarer tes entiers "compt" et "equip" dans le programme ? "J" est bien une variable permettant de chercher le jour ?

Dans un second temps, pourquoi n'avoir pas décrémenter "J" de 20 à 0. Tu as crée un variable "ligne1" dont je ne comprend pas le rôle.

Edit : La variable "ligne1" permet de connaitre la fin du tableau. Très astucieux. Je pensais rajouter d'autre données en dessous, je trouverai un moyen de régler cette autre problème un autre moment ^^.

Re,

Je n'ai pas déclaré Compt et Equip (oui je sais c'est mal :p), non la variable "j" correspond au numero de ligne

En gros, je boucle sur les colonnes D à L (variable i)

la variable ligne1, me permet de connaitre ou s'arrête le tableau (car la tu n'as le tableau que pour 8 jours mais il sera plus long, et je ne savais pas si il était pré-créé avant le remplissage ou au fur et à mesure, la du coup, j'ai toujour la totalité.

Donc ensuite après avoir attribuer l'equipe à une variable ainsi que la partie du tableau de saisie où prendre les valeurs, en fonction de la colonne où je suis dans mon tableau, je boucle ligne par ligne de la ligne 20 à ligne1 (la dernière du tableau), et donc pour chaque cellule, je vérifie tes critères (date, equipe et poste de travail) et si tout colle, je copie les valeurs, et sinon je ne touche rien (et donc pas de modif des anciennes valeurs).

Et ensuite je passe à la colonne suivante, etc etc

edit: concernant la variable ligne1, vu que tu sais que tu as 3 postes de travail, il te suffit de crééer tes tableaux de facons à avoir 3 lignes * X jours ouvrés (pour un mois de 31 jours), et de remplacer la variable ligne1 par le numero de la dernière ligne du tableau, moi elle m'a surtout servie car le tableau n'était pas entier. Et tu pourras ajouter tes données en dessous.

Je viens de finir l'analyse de ton code, et c'est bien comme ça que je l'avais compris. Merci d'avoir pris le temps d'avoir expliqué. J'imagine que si les données sont sur une autre feuille, je laisse :

Feuille = ActiveSheet.Name

Là ou se trouve mon tableau de saisi, mais par contre en se qui concerne les cellules du tableau de donnée je fais :

Equip = Range("Feuil2!D18") par exemple ?

Cela va être un peu plus compliquer, en fait le feuille = activesheet.name ne sera plus activesheet.name mais sera égal à la feuille ou il faut écrire, donc cela dependra de comment sont nommés tes onglets, il faut adapter le code en fonction.

Exemple si tu fonctionne au mois, il faudra extraire le mois de la date que tu rentres dans ton tableau de saisie et faire une recherche de correspondance avec le nom des onglets. etc etc

joins le fichier avec tes différents onglets avec leur vrai nom (enfin au moins un ou deux onglets pour l'exemple, et j'adapterais le code en te ré-expliquant la procédure. Surtout que si tu as ton tableau de saisie sur la 1ere page, et les données dans les autres onglets, ta mise en page ne sera pas forcement la même (tes tableaux de données seront peut-être plus haut que la ligne 20), donc fais un fichier avec la mise en page voulue pour ton tableau de saisie feuille 1, et un ou deux onglets suivants avec le bon nom et le tableau de reception des données au bon endroit.

Sinon, j'ai reçu ton mail, c'est gentil, mais on est la pour ça, ne t'embêtes pas pour le dérangement, ça m'occupe pendant mes moments creux au travail

Suppimé.

Ok Zirak . Je te donne en pièce jointe mon document. J'ai du enlever des données (entreprise et d'autres truc confidentiels). J'ai laissé quelques boutons qui me serviront par la suite. Je travaille actuellement sur la portabilité du modèle, c'est a dire qu'avec un modèle de base, on pourra faire le suivis sur toute l'année (changement automatique des dates par exemple).

Merci encore pour ton aide.

Question (enfin plutôt remarque) :

Si tu veux automatiser le tout, je pense qu'il faut changer le nom de tes onglets de base de données.

Car "Base de données P1","Base de données P2",... je ne vois pas trop comment via le code lui dire que si on est le mois X il faut écrire dans P1 plutôt que P2,...

Si tu veux garder le même genre de nom, il va falloir passer sur un truc du style "base de données 07/2011" comme cela on pourra comparer avec la date saisie par l'utilisateur et repérer le bon onglet.

Penses-tu que cela va poser problème (pour tes autres macros ou pour ta direction) si je renomme les onglets ?

A vrai dire, mon tuteur ma fait savoir, que par expérience il ne faut pas utiliser des fichier excel trop chargé en donnée (devient rapidement un handicap pour les ordinateurs). C'est pour ça que j'aurai un seul fichier par mois, puis un autre pour l'année. Ce dernier synthétisera et regroupera les résultats des fichiers mois. Les onglet sont avant là surtout pour être explicites et partager les calculs( les consommations d'un côté, les masse de l'autre, et les graphiques encore sur un autre).

Ok si il n'y a qu'un mois par fichier, cela règle mon interrogation, même si je ne pense pas qu'un fichier par année aurait-été si lourd que cela, vu que tu n'as pas non plus des tableaux de plusieurs milliers de lignes. ^^

Voilà un essai, test le voir si tu remarques des souçis, le code n'est pas très différent, juste utilisé des "select case" à la place des IF vu qu'il y avait plus de données à traiter.

N'hésites pas si tu as des questions.

Merci Zirak, je regarde ça et je te tient au courant (d'ici 30/45 minutes le temps que je finisse ma tache en cour et que je comprenne tes changements).

-- 28 Juil 2011, 15:27 --

J'ai pas pu m'empêcher de tester. Ça marche très bien merci a toi. Je vais profiter de ce que je viens d'apprendre pour faire moi même mes macros et ainsi rendre mon modèle excel plus puissant. A bientôt et bonne journée.

Cordialement.

Olivier

Rechercher des sujets similaires à "fiabilite references circulaires"