Formules ecrasées

Bonjour à tous,

J'ai un petit soucis concernant le bouton "modifier" d'un formulaire que j'ai crée.En effet lorsque je souhaite modifier un paramètre d'un client,la modification s’opère sur tous les champs y compris ceux avec une formule ! Voici une partie du code utilisé dans mon bouton MODIFIER :

Dim no_linge As Integer

Sheets("SOURCES").Select

no_ligne = cbxrecherchenom.ListIndex + 2

If cbxrecherchenom.Value = "" Then

MsgBox ("Veuilllez remplir le champ de la recherche ! ")

Else

Cells(no_ligne, 1) = txtmatricule

Cells(no_ligne, 2) = txtN°Unique

Cells(no_ligne, 3) = txtDate1èredemande

Cells(no_ligne, 4) = txtDaterenouvellement

Cells(no_ligne, 5) = txtNOM

Cells(no_ligne, 6) = txtNOMdeJEUNEFILLE

Cells(no_ligne, 7) = txtprénom

Cells(no_ligne, 8) = txtDatedenaissance

Cells(no_ligne, 9) = cbxNationalité

Cells(no_ligne, 10) = cbxSituationfamille

Cells(no_ligne, 11) = txttelephone

Cells(no_ligne, 12) = txtemail

Cells(no_ligne, 13) = txtadresse1

Cells(no_ligne, 14) = txtadresse2

Cells(no_ligne, 15) = txtcp

Cells(no_ligne, 16) = txtville

Cells(no_ligne, 17) = txtNOMconjointoucoloc

Cells(no_ligne, 18) = txtNOMdeJEUNEFILLEConjoint

Cells(no_ligne, 19) = txtprenomconjoint

Cells(no_ligne, 20) = txtDatedeNaissanceconjoint

Cells(no_ligne, 21) = cbxnationalitéconjoint

Cells(no_ligne, 22) = cbxlienavecdemandeurconjoint

Cells(no_ligne, 23) = txttelephoneconjoint

Cells(no_ligne, 24) = txtenfant1

Cells(no_ligne, 25) = txtenfant2

Cells(no_ligne, 26) = txtenfant3

Cells(no_ligne, 27) = txtenfant4

Cells(no_ligne, 28) = txtenfant5

Cells(no_ligne, 29) = txtenfant6

Cells(no_ligne, 30) = txtenfant7

Cells(no_ligne, 31) = txtenfant8

Cells(no_ligne, 32) = txtnbreenfantsmineurs

Le problème rencontré se trouve à la colonne 32 qui contient une formule mais qui après modification disparait.

Quelle syntaxe dois je selon utiliser pour éviter cet écrasement ?

Merci d'avance !

13classeur-test-v1.xlsm (564.04 Ko)

salut

il me semble que la réponse est dans la question

qu'est ce qui doit aller dans cette cellule(no_ligne,32) la valeur que calcule la macro ou la valeur donnée par la formule ?!

forcément il peut pas y avoir les 2

bonsoir,

Pour reformuler il faut supprimer les lignes de macro qui écrivent dans les colonnes ou il y a des formules. (avec en-têtes jaune)

A+

Merci pour la réponse ! effectivement les formules ne sont plus écrasées !

En revanche quand j'appui sur le bouton MODIFIER j'ai toujours un soucis concernant le fait que si je laisse certain champs vide,ma formule NBVAL comptabilise à la fois les champs renseignés et les champs vide !

Par exemple :

Cells(no_ligne, 24) = txtenfant1

Cells(no_ligne, 25) = txtenfant2

Cells(no_ligne, 26) = txtenfant3

Cells(no_ligne, 27) = txtenfant4

Cells(no_ligne, 28) = txtenfant5

Cells(no_ligne, 29) = txtenfant6

Cells(no_ligne, 30) = txtenfant7

Cells(no_ligne, 31) = txtenfant8

Admettons que enfant1,2,3,4 soit renseigné mais pas 6,7,8.Et bien ma formule NBVAL va m'afficher 8.

Je souhaiterais une syntaxe qui me permette ceci :

Si le champs est renseigné alors il ya calcul,par contre si le champs est vide, il faudrait que la formule NBVAL ne puisse pas calculer les champs vide.

Merci

bonjour,

Je ne pense pas. Enfin... pas chez moi !

Il est difficile de tester ça sur ton fichier, un fichier vide n'est pas très pratique... Mébon sur le principe YAPA de raison : NBVAL ne compte pas les cellules vides... Donc il faut tester pourquoi tu as un chiffre inattendu.

Peut-être présence d'espaces invisibles ?

En tout cas sur ton fichier démo je n'ai pas ce phénomène.

A+

Merci pour ta réponse, je vais joindre un nouveau fichier avec un exemple :

Mon exemple est à la ligne 4.

A l'ouverture du fichier si tu te rends sur la colonne AF, tu vas voir la valeur 2 et sur la colonne AI la valeur 4.

Admettons que tu veuilles changer une info sur cette personne en utilisant le formulaire :

  • ouvrir la feuille de calcul TABLEAU DE BORD et Afficher Formulaire
  • Cliquer un première fois sur le VALIDER pour armer le formulaire
  • A l'aide de la combo box RECHERCHER NOM , choisir DUPOND PIERRE et cliquer sur RECHERCHE NOM
  • Toutes les infos relatives à cette personne remontent dans le formulaire.
  • Admettons que l'on veuille changer sa ville natale,je change New york par Dublin
  • je fais la modif et ensuite appui sur le bouton MODIFIER

Et la, la modif a bien été prise en compte mais si l'on retourne en AF on aura 8 et en AI une erreur de type #VALEUR!

Le fait d'avoir modifié la base via le formulaire a aussi modifié des colonnes Z,AA,AB,AC,AD,AE,AG,AH.

J’espère avoir été plus clair , help !!!

16classeur-testv2.xlsm (528.12 Ko)

Bonjour,

Hum...

Sans vouloir t'offenser ni être désagréable... Il y a de nombreux problèmes dans ton formulaire : Je suis en train d'essayer de le reprendre un minimum, mais c'est un boulot de romain... Un nième travaux d'Hercule !

Ta méthode est très expérimentale et vouée à avorter.

Pour ce qui est du problème que tu signales ( ligne 4 ) je n'ai pas analysé à donf... Mais simplement le fait de faire un double clic en Q4 (sans rien modifier et ta cellule AI se remet à 3.

Je vais essayer de mettre un peu ça au clair, mais je ne suis pas certain d'y parvenir car c'est un truc de ouf.

Je pense que pour tes débuts tu as été un peu optimiste ! Il faut revoir un peu les fondamentaux :

Commence déjà avec une base de donnée d'une quinzaine de champs (de type classique Nom, Prénom, Date de naissance, Code,Ville, Téléphone, E-mail + quelques données numériques) et quand tu seras certain que tout fonctionne bien... (Recherche, Consultation, Ajout, Modification, Suppression) A ce moment là, tu pourras envisager de passer à la pointure au dessus.

Mais pour l'instant je suis très sceptique !

[EDIT] Je n'ai pas répondu aux autres obbservations car ce n'est que la face émergé de l'iceberg : une des nombreuses conséquences des erreurs, contradictions et approximation du truc. Je continue donc de plancher un peu la dessus et essaierai de te tenir au courant dans quelques jours..

A+

Merci beaucoup pour ton attention et tes conseils qui sont absolument bienvenus !

sinon oui ce fichier est loin d’être au top c'est mon premier !

Je l'ai fait en désespoir de cause car travaillant dans la fonction publique,nous avons besoin de ce type d'outils.Voila pourquoi j'ai osé après bien sur j'aurais souhaité faire plus petit pour commencer mais la on ne m'a pas laissé le choix.

Toujours est il que le problème signalé dans mon précédent post touche un certain nombre de cellules qui sont identifiées,une fois ce problème réglé une bonne chose sera faite (l'espoir du débutant

Pour préciser, les problèmes qui me gêne actuellement se situent uniquement dans la feuille "sources " et pour les colonnes de A à BZ

Le même problème touche certaines colonnes : à savoir comment écrire une ligne de code qui me permettrait de transmettre une valeur numérique s'il y en a une et s'il n'y rien une valeur numérique égale à 0 .

Merci d'avance et encore merci pour les liens !

Bonsoir,

Il n'y a pas de raison de passer un zéro ou il n'y a rien !

On ne résout pas les problèmes avec de mauvais subterfuges. Sinon on crée des problèmes en cascade...

Tu peux mettre :

Cells(no_ligne, 26) = IIf(txtenfant3 <> "", CInt(txtenfant3), 0)

Question : Il y a 23 Champs calculés : En principe il n'y a aucune raison de les inclure dans le formulaire (sauf pour info) mais dans ce cas il faut être conscient qu'il ne peuvent pas mis à jour (sinon ils briseraient les formules)

Faut-il vraiment les maintenir dans le formulaire ? Si oui, dans ce cas moi, je mettrai leurs infos en label...

[EDIT2] Dans ces champs calculés, il y a des trucs délirants qui n'ont rien à fiche dans cette BD :

Je laisse tomber le bébé et je jette l'éponge !

A+

Merci pour tes réponses !

A ton avis dans la base il ne devrait y avoir aucune formule ? Dans ce cas ou les mettre ?

Merci

Bonjour,

Excel est un tableur. On peut à la rigueur lui faire gérer une petite "simili base de donnée".

Mais avec 90 champs : Non ! Avec 80 non plus !

Je trouve que 25 c'est déjà pas mal et si vraiment on est un expert on peut se hasarder à quelques champs supplémentaires, voire même à quelques 1 ou 2 champs calculés.

Mais dans ton cas : Non, Non et Non !

Ce n'est pas par hasard que ce genre de service public n'a pas encore réussi à informatiser leur système d'information. C'est tout simplement qu'aucun professionnel n'accepterait le challenge. Ou alors à un prix tellement prohibitif que ça rend le projet irréalisable...

Pour ta gouverne sache que VBA est soumis à quelques contraintes (dans la longueur du code) et que à moins de posséder une bête de gamer, tu n'es pas loin d'atteindre cette limite !

Donc il faudrait déjà commencer par optimiser : Pour vider tous les contrôles, il faut 4 lignes et pas 90. (Et hop 100 lignes de gagnées !)

Pour gérer des ajouts et des modifications vu que c'est le même formulaire, il faut une seule procédure :

Sub WriteRecord(Ligne)

La encore une centaine de lignes de gagnées...

Il faut gérer la cohérence des saisies (et les incohérences...)

Après il faut gérer les types d'infos les conversions de type de la base vers le formulaire et du formulaire vers la base.

Quand tout cela est résolu tu fais ce que tu veux avec ta base de données... Tu peux faire des totaux, des moyennes, des stats, des graphiques, calculer des ratios, que sais-je. Mais TOUSSA tu le fais ailleurs que sur la BD que tu as laborieusement mise au point.

Pour éviter de la fusiller au premier problème...

Les bases de données sensibles, il y en a même qui s'arrangent pour que personne ne puisse les voir (et à plus forte raison encore moins les modifier...)

Après si tu veux afficher simultanément des éléments de ta base de données et des calculs, rien ne t'empêche de le faire sur une feuille séparée (pas sur un Userform !) ou tu pourras organiser comme tu veux ta présentation juste avec des RECHERCHEV...

En résumé :

Le UserForm permet juste une présentation facile de ta BD pour corriger, ajouter ou modifier la BD :

Ce n'est pas un élément de diagnostic ou tu vas pouvoir afficher dans un seul écran toutes ta BD + tous les calculs que tu peux imaginer.

La présentation de ces données et leur impression c'est le job des feuilles de calcul ou tu vas pouvoir organiser cette présentation.

Pour illustrer mon propos je te donne un exemple de Base de Données un peu chargée ou il y a un USF La base de donnée sert à enregistrer des élèves. Bien que ce soit à la rigueur possible. Ce n'est pas le UserForm qu'on imprime en général, mais leur relevé de notes, leurs factures ou d'autres choses qui sont réunies dans une autre feuille de calcul destinée à l'impression.

De même une banque ou tu sollicites un crédit ne t'imprime pas tout le contenu de ta fiche de renseignement mais juste un état des mensualités que tu devras leur payer...

De même un commerçant t'imprime juste un ticket de caisse, pas un relevé de tes infos ni l'origine ou le prix d'achat des produits qu'il vient de te facturer...

Dans le petit classeur démo joint, seul le premier enregistrement (Anna Gourmand) est complet et permet de suivre l'ensemble de la Démo (Regarder le USF, regarder les fiches, visualiser un 2ème tat avant impression...) ici pas de champs calculé, mais une feuille éditable (la fiche Events, ou même la fiche Elève...) pourrait permettre d'inclure un relevé de note ou une facture...

L'ensemble du classeur (dont la BD) est accessible par double clic sur le mot "Accueil" du formulaire. Ensuite on peut accéder aux onglets du classeur ou au code VBA ( avec alt+F11 )

Ce classeur a été réalisé sur la base du lien fourni précédemment.

Bonne lecture.

A+

Bonjour et merci pour votre réponse détaillée à souhait ainsi que le classeur en exemple . Il est clair qu'il va falloir que je reprenne ce formulaire pour en faire quelque chose de plus performant.

Il y a une formation proposée sur ce site , pensez vous qu'elle puisse répondre à mes besoins ? A savoir création d'une base de données,calculs,formulaire....

Encore merci

Bonjour,

Une formation n'est qu'une initiation. C'est à vous de juger jusqu'à quel point celle-ci correspond à vos besoin... Et il existe sur la toile de nombreux autres référents qui pourront vous être utile. Mais si les sources sont abondantes, vous devrez essayer de ne pas trop papillonner (pour éviter de vous perdre dans une jungle inextricable...)

Vous devez aussi être capable de faire la synthèse de ce que vous apprenez, lisez, voyez. Et vous entrainer à le reproduire.

De manière générale l'utilisation d'Excel et particulièrement la pratique de VBA est une longue patience... et le fruit de nombreuses expériences. Toutefois avec un peu de ténacité (et beaucoup de disponibilité) vous pouvez sans doute arriver à vos fins en utilisant des moyens collaboratifs...

Puisque vous semblez dans de telles dispositions, je vais à nouveau me remettre sur votre projet en supprimant pour l'instant les champs calculés et en vous proposant également un autre formulaire permettant de faire un synthèse des infos de la BD.

Si le UserForm permettant la consultation et la mise à jour de la BD est soumis à des règles connues, la conception du formulaire est beaucoup plus souple : vous pourrez (devrez) y participer activement car sur ce point, il n'y a que vous qui cernez l'ensemble de vos besoins...

Bien vouloir patientez quelques heures pour plus de précisions...

A+

Je vous remercie sincèrement pour l’attention que vous me portez. Cela vous aidera peut être de connaitre les intentions de départs concernant ce classeur :

Nous avons eu besoin d'avoir :

  • une base de données
  • des calculs
  • des calculs selon des critères afin d'obtenir des quotations.

Le projet est d'avoir à la fois une BD et des calculs et un formulaire qui sert à la fois de formulaire de saisi et de formulaire de consultation lors des commissions d'attribution, avec la possibilité d'imprimer chaque fiche.

Merci à vous

Bonjour,

Un contrôle ne peut être le résultat d'une saisie directe et d'un calcul :

Veuillez préciser si "Nombre de part" sera une donnée saisie ou calculée ?

Dans le premier cas elle figurera dans la BD et le UserForm, sinon elle ne figurera que dans le formulaire.

A+

C'est une donnée saisie.

Pour information,dans le classeur il y une feuille intitulée "feuill1" qui est en fait une mise à plat de l'ensemble des colonnes.Les cellules en rouge indiquent toutes les colonnes ou il y a calcul et en vert toutes celles qui me posaient des problèmes comme mentionés plus haut.

Je suis à votre disposition pour plus d'information

Merci

Bonjour,

Je voudrais savoir...

Comment et pourquoi tu as généré cette "Feuil13" visible dans VBA Project !

Ce N° Unique à 18 chiffres est-il conforme à la réalité ? Plus généralement un Combo recherche par matricule me semble imbuvable ! (surtout avec autant de digits). Je propose donc de le remplacer par une saisie directe sur TextBox ?

A+

Bonjour,

En effet cette feuille 13 est une erreur,faut la supprimer ! Sinon,le N°Unique est en fait un numéro donné par un organisme,ce numéro identifie la personne auprès de cet organisme.

Concernant la combo box pour la recherche par matricule,elle peut effectivement être remplacée par une TEXTBOX.

Merci

bonsoir,

Trop tard comme tu ne répondais pas je l'ai purement et simplement supprimée, je vais voir si je peux rattraper le coup... Mébon : 18 digits tu confirmes ?

Euh... Toujours comme tu ne répondais pas je t'ai envoyé le fichier avec un lien mail...

Pour la Feuil13... J'ai été incapable de la supprimer, il semble que ce soit un bug, ou une pollution liée à ton fichier. Ce qui ne me semble pas anormal vu "la bête" !

Du coup je suis reparti de zéro ça me semblait plus simple...

Bon avec ça, TORA pas besoin de compter les moutons ce soir. J'espère que tu as une bonne provision de DOLIPRANE !

A+

Bonjour,

Je t'ai envoyé un mail à l'instant

Oui 18 digit, c'est un numéro donné par un organisme.

Merci oui j'ai un tube de Doliprane à coté de moi

Rechercher des sujets similaires à "formules ecrasees"