Formulaire de modification apparait quand je valide la saisie
Bonsoir à tous,
J'ai un formulaire de saisie qui fonctionne bien, et permet l'enregistrement dans la feuille "BDD".
J'ai rajouté le formulaire de modification qui doit s'ouvrir quand je clique sur la ligne (non vide) de l'onglet "BDD" que je veux modifier, tout se passe bien.
Le problème c'est quand je saisis un nouvel enregistrement dans BDD via le formulaire de saisie je pense que vba repère le changement lors de la validation et déclenche de manière intempestive le formulaire de modification.
Et deuxième problème toujours dans "BDD" mon incrémentation automatique par formule Excel (Champ "N°") ne fonctionne plus. C'est parce que c'est un tableau?
Je tourne en rond et ne trouve pas la solution. Quelqu'un peut-il m'aider.
Merci beaucoup à ce qui me liront. Bonne soirée
Bonjour Sylvain24
Vous avez pas mal de choses à revoir dans votre développement
- Définir ses variables https://www.excel-pratique.com/fr/vba/variables
- Savoir utiliser les objets conteneurs : With... End With
- Comment utiliser les Tableaux Structurés : https://www.excel-pratique.com/fr/astuces/tableau-structure
Voici le code du bouton "Enregistrer" modifié
Private Sub BtnEnreg_Click()
Dim Ctl As Control, Lo As ListObject
Dim nLig As Long
' Désactiver les évènements pour éviter les interactions
Application.EnableEvents = False
' Définir la Tableau Structuré de la feuille BDD
Set Lo = Sheets("BDD").ListObjects("Tableau5")
nLig = Lo.ListColumns("NOM").DataBodyRange.Rows.Count + 1
' Ajouter une ligne au TS
Lo.ListRows.Add
' Compléter les données
With Lo.DataBodyRange
.Cells(nLig, 1).Value = .Cells(nLig - 1, 1).Value + 1
.Cells(nLig, 2).Value = CDate(Me.txtDate)
.Cells(nLig, 3).Value = Me.txtNom
.Cells(nLig, 4).Value = Me.TxtPrenom
.Cells(nLig, 5).Value = Me.cboType
.Cells(nLig, 6).Value = Me.cboMotif
.Cells(nLig, 7).Value = Me.cboDirection
.Cells(nLig, 8).Value = Me.cboBureau
.Cells(nLig, 9).Value = Me.CboCategorie
.Cells(nLig, 10).Value = Me.cboGrade
.Cells(nLig, 11).Value = Me.TxtCoutM
.Cells(nLig, 12).Value = Me.cboQuotité
.Cells(nLig, 13).Value = Me.cboMoisA
.Cells(nLig, 14).Value = Me.Txt_Cout12m
.Cells(nLig, 15).Value = Me.TxtProrata
End With
' Effacer tous les controles
For Each Ctl In Me.Controls
If TypeOf Ctl Is MSForms.TextBox Or TypeOf Ctl Is MSForms.ComboBox Then
Ctl.Value = ""
End If
Next Ctl
' Réactiver les évènements pour éviter les interactions
Application.EnableEvents = True
' Effacer la variable objet
Set Lo = Nothing
'
MsgBox "Votre saisie a bien été enregistrée!", vbOKOnly, "Confirmation"
End SubCe qui empêchera les interactions c'est
Application.EnableEvents = FalseSinon, voici celui de l'initialisation de l'USF
'pour liste déroulante1 Direction/Bureau
Private Sub UserForm_Initialize()
Dim Col As Long
Col = 2
With Sheets("Parambudget")
Do While Cells(1, Col).Value <> ""
frmSaisie.cboDirection.AddItem Cells(1, Colonne).Value
Col = Col + 1
Loop
End With
End SubIl est inutile de sélectionner une feuille pour pouvoir récupérer ou écrire des valeurs dedans
A+
Bonjour,
Dans la pratique on ne créerait pas plusieurs UserForm
https://www.excel-pratique.com/fr/telechargements/utilitaires/userform-crud-excel-no476
A+
EDIT : Dans fichier que vous avez joint, on aperçoit dans VBAProject une Feuil3 qui n'existe pas.
Mon conseil est de ne pas utiliser de classeur qui comportent ce genre de feuilles "fantôme"...
A+
Bonsoir,
Merci beaucoup à BrunoM45 et Galopin01.
Je pars à la pêche donc...je veux dire que je vais étudier tous ces conseils en détail!
Je crois que la partie de pêche va quand même durer...
Bonne soirée
Bonjour,
YFO pas croire que la prog c'est comme une partie de pêche ! La création d'un UserForm "fiable" pour un débutant n'est pas une mince affaire et demande beaucoup de qualité.
Il ne suffit pas de pondre quelques UserForm et quelques contrôles pour que ça marche (bien !)
Je te donne ce que j'ai pondu aujourd'hui Tout n'est pas parfait (en particulier) les combos et les cascades. De plus je n'ai pas du tout travaillé les dernières colonnes ;
En réalité elles n'ont rien à fiche dans le UserForm puisque ce sont des données calculées qui ne sont pas censées être modifiable. Mébon c'est pas sorcier d'arranger cela. Par contre la mise au point des Combo est délicate à cause des nombreuses interférences. Néanmoins ça doit pouvoir s'arranger.
Pour autant le Userform donne déjà une bonne idée du truc : On peut Ajouter, Modifier, Rechercher, Supprimer de manière plus ou moins fiable même s'il reste de nombreuses imperfections à traquer : La chasse aux bugs peux durer quelques semaines d'autant que c'est l'utilisateur final qui va essuyer les plâtres...
Je verrais cette histoire de combo plus tard car la fin de semaine va être chargée. Mébon c'est pour te donner une idée...
Après sur la finition il peut y avoir des retouches mais avec tes données difficiles de dimensionner les contrôles correctement. C'est à discuter...
A+
Edit : Dans la feuille des paramètres je n'ai pas complètement fait le ménage il reste quelques trucs nébuleux qui ne nécessitent pas forcément la mise en Liste ni Tableaux... Là encore ce sont des détails mineurs...
Bonjour,
Pour la pêche c'est en lien avec la citation de Confucius rappelé par BrunoM45.
Sinon le fait de passer pour les recherches par la BDD c'est la possibilité d'utiliser les filtres excel sur n'importe quel champ car la base risque d'avoir "beaucoup" d'enregistrements et cela va compliquer par une combo.
En tout cas encore merci, j'étudie ça.
Bonne journée.
Un UserForm à tout faire ça n'existe pas !
A priori j'ai compris que ton Userform servirait à nourrir ta base de donnée, éventuellement à modifier, rechercher ou supprimer un enregistrement.
Ce type de formulaire (à quelques variantes près), est un standard dans la plupart des applications. Le même formulaire sert à "agir" sur une ligne (enregistrement).
Après si tu veux faire un autre UserForm pour faire des filtres, du reporting... C'est un autre problème que je n'aborderai pas.
A propos des bases de données. A priori un champ calculé n'a aucun intéret. La base de donnée est faite pour recueillir des données brutes.
Après si tu veux en faire des extractions et calculer des trucs. A priori tu es censé faire ça ailleurs... (Dans une autre feuille pour ne pas polluer les données brutes)
Mais à priori ce n'est pas le but d'un UserForm de faire ces calculs.
Bon après une fois qu'on a dit ça, chacun peut bien faire ce qu'il veut. Mébon à priori ici on apprends à se servir des outils de manière basique et plus ou moins conventionnelle.
Après si tu te sens de taille à faire des miracles, c'est ton problème... Tu peux même demander sur ce forum (et les autres) comment on fait des miracles... Mais le résultat n'est pas assuré !
Pour résumer, TOUSSA pour dire que ce genre d'exercice à des exigences de pertinence. On ne peux pas inventer une solution si on n'a pas toutes cartes en main. Et ton premier classeur est bien loin d'éclairer vraiment sur la finalité du projet.
Cordialement.
A+
Donc si j'ai bien compris, la règle en vba "serait" de saisir les données essentielles dans le UF, faire les calculs dans la BDD?
Parce que je souhaite afficher dans le UF les données calculées, donc j'en conclus qu'il vaut mieux que je mette les formules plutôt dans BDD et rapatrier les champs calculés en affichage dans le UF? C'est bien ça?
Cordialement
En la matière YAPA de règle : C'est plutôt une philosophie personnelle.
Une Base de donnée sert à mémoriser, enregistrer des données de travail. Après, ce que tu en fais est un autre problème.
Tu viens nous voir avec une base de données et deux formulaires un d'ajout et un autre de modification : J'en déduit que tu cherches de l'info pour gérer une base de donnée. Donc je te donnes un formulaire aux petits oignons pour ça.
Après tu me dis qu'il faudrait que ton formulaire puisse te permettre d'aller à la pêche. (dans différents champs...)
Bien que ce soit à la rigueur possible, ce n'est vraiment pas le but de ce UserForm : Il vaut mieux gérer tes recherches ou tes extractions autrement. (Note bien que je n'ai pas dit avec un autre UserForm...) Reste à définir quel genre de recherche tu cherches à faire... pour l'instant je n'en dirai pas plus sur ce sujet.
Le problème des champs calculés est encore un autre problème. Après tout tu fais comme tu veux et je t'ai un peu suivi sur ce sujet bien que je n'ai pas terminé le travail. Cependant à mon avis ce n'est pas le rôle d'une base de donnée de stocker des champs calculés (même s'ils sont valorisés en dur)
En fin ce que je dis est très sujet à interprètation : Quand tu enregistres une facture dans une base de données le plus souvent tu enregistres le montant de la TVA et et le total avec. Et ce sont pourtant des champs calculés également.
De la même manière si tu crées une caisse enregistreuse et que ton Userform est ton écran de saisie tu peux effectivement vouloir que ton prix TTC s'affiche également après la pesée et l'enregistrer également dans ta BD.
On voit donc que c'est une notion qu'il faut apprécier avec discernement. Après je ne peux pas t'en dire plus, ça dépend essentiellement de la finalité de cette base de donnée...
La seule chose qu'on peut tenir pour certain est que tout vaut mieux qu'une formule dans la BD... (surtout si la BD est volumineuse)
Dans 9 cas sur 10, je ne ferais le calcul qu'au moment du transfert des données dans la BD... Comme c'est un calcul, il est censé n'être pas modifiable donc un TextBox n'est pas forcément le plus approprié (un Label serait plus lisible pour afficher les résultats) surtout si tu me certifies que l'affichage du résultat dans ton UserForm est indispensable : Très bien c'est toi le chef. Ça ne me pose pas plus de problème que ça...
Mébon garde à l'esprit qu'à priori une Base de Donnée est un espace de stockage et le UserForm est ton interface de saisie.
Ce que tu fais avec des données calculées est un tout autre problèmes que personnellement je traiterai sur une une autre feuille et un autre UserForm.
OK ?
A+
Ok, merci.
Je ne pourrai quasiment pas travailler dessus avant Lundi, mais si tu as des soucis avec ce modèle n'hésite pas à demander.
A+