Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Création formulaire VBA

gui1987

XLDnaute Nouveau
Bonjour à vous,

Je suis nouveau sur le forum et novice en VBA et je souhaitais votre aide car je voudrais faire un formulaire pour des demandes d'achat avec différentes conditions mais je n'arrive pas à faire ce que je voudrais.
J'ai mis les instructions de ce que je voudrais arriver à faire dans le fichier excel joint, je pense que ça doit être faisable mais avec ma faible connaissance je n'y arrive pas.
Pouvez-vous m'aider ?
Si mes instructions ne sont pas claires n'hésitez pas à me demander à les éclaircir.
En espérant qu'une âme charitable saura m'aider
Merci d'avance
 

Pièces jointes

  • Formulaire DA.xlsm
    64.3 KB · Affichages: 72

Dranreb

XLDnaute Barbatruc
Ça ne répond pas à ma question. Où sera conservé ce numéro de projet saisi une fois l'UserForm fermé ?
Ainsi d’ailleurs que tous les choix ou saisies effectués dans les ComboBox …
 

gui1987

XLDnaute Nouveau
Bonjour,

J'ai 2 questions supplémentaires concernant mon fichier :
- est-il possible de rentrer un montant exact (par ex : 1300€) en début de formulaire (dans une textbox ou autres) et que CBxMontant et CBxMttDevis se mettent à jour automatiquement ?
- comme vous le souligniez il faudrait pouvoir exporter les données saisies soit dans l'onglet DA en dessous du bouton commande soit dans un nouvel onglet. Il faudrait donc faire un bouton commande "Exporter" mais quel serait le code pour arriver à faire cet export ?

Merci encore.
 

Pièces jointes

  • Formulaire DA final.xlsm
    171.9 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Bonjour.
cette Sub à ajouter à l'air de faire ce que vous demandez :
VB:
Private Sub CBxMontant_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim V
   V = CLsL.Item(CBxMontant).Valeur
   If Not IsNumeric(V) Then Exit Sub
   Select Case V
      Case Is < 500: CBxMontant.Text = "< 500€"
      Case Is > 1500: CBxMontant.Text = "> 1500€"
      Case Else: CBxMontant.Text = "entre 500€ et 1500€"
      End Select
   End Sub
Prévoyez un tableau pour les combinaisons de valeurs exportées, et faites le supporter par une 5ème paire ComboBoxLiées/ControlsAssociés Normalement ce serait plutôt 2 bouton, un CBnValider qui affichera "Ajouter" ou "Modifier" selon le cas et un CBnSuppr avec "Supprimer" en fixe.
 
Dernière édition:

gui1987

XLDnaute Nouveau
Désolé je ne comprends pas la réponse apportée... :-(
Que dois-je faire pour que la Sub que vous m'avez fournie fonctionne ? Je dois rajouter un Combobox avec toutes les valeurs possibles dans un tableau avec en 1ère colonne de 1€ à XXXXX€ et en 2ème colonne la valeur associée (soit < 500€, soit entre 500 et 1500, soit > 1500€) ? Idem pour CBxM ?
Ou alors je dois mettre une TextBox avec le montant à taper ?

Quand vous évoquez de prévoir un tableau pour les combi de valeurs exportées qu'entendez-vous ?

Merci encore
 

Dranreb

XLDnaute Barbatruc
Ben non, je croyais que ça touchait la CBxMontant qui existait déjà et dans laquelle on devrait pouvoir taper (en plus de "<", ">", "e", car les ComboBox sont faites avant tout pour y taper des choses, le bouon d'affichage de la liste n'étant là qu'au cas où on ne saurait plus quoi taper) un nombre.
J'entends par là un tableau des lignes saisies, muni des colonnes à produire, la base des demandes d'achats à mettre à jour, quoi.
 

gui1987

XLDnaute Nouveau
Ah effectivement votre code fonctionne parfaitement mais il ne s'agit pas tout à fait de ce que je souhaite car je voudrais conserver le montant exact (pour l'export des données) donc comment faire pour que lorsque le montant exact est saisi (soit dans une nouvelle CBx soit dans la CBxMontant) la CBxMontant et la CBxMttDevis se mettent à jour ? Je sais pas si mon explication est claire...
De plus, j'ai créé un tableau avec en colonne les différentes informations saisies que je souhaiterai récupérer. Je mets en PJ le fichier modifié.

Merci
 

Pièces jointes

  • Formulaire DA final.xlsm
    177 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Pas vraiment clair je trouve.
D'habitude les montants se saisissent dans des TextBox, non des ComboBox, à moins qu'on ait absolument besoin de pouvoir retrouver dans un tableau une ligne portant un certain montant bien précis.
Toujours pas mis la liste des demandes d'achats à mettre à jour ? Ah si (pourquoi ne l'avais-je pas vu ??)
Normalement ce ne sera pas "Export" mais "Ajouter" ou "Modifier" et "Supprimer"
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je ne sais pas ce que j'avais fait pour ne pas voir la nouvelle feuille. J'ai dû être perturbé par le fait que certaines étaient masquées.
Bon, et bien ajoutez les initialisations comme pour le reste. Prévoyez bien des ComboBox pour l'ensemble des infos dont la combinaison sera unique dans cette base.
Par exemple si tout peut être en double sauf le code projet, mettez une CBxCodeProjet au lieu de la TBxCodeProjet, confiez la à CLsM (pourquoi M ?) et tout le reste à CAsM. Ajoutez une TBxMontant pour saisir le montant.
Un ComboBoxLiées n'accepte que des ComboBox de recherche et identification, dont il assume les listes dynamiques, tandis qu'un ControlsAssociés accepte la plupart des contrôles courants, notamment les TextBox mais aussi quelques autres, y compris des ComboBox à listes fixes ou prises en charge par des ComboBoxLiées s'appuyant sur d'autres tableaux.
 
Dernière édition:

gui1987

XLDnaute Nouveau
Bonjour et merci pour vos explications.
J'ai essayé de faire ce que vous m'avez demandé mais ça ne marche pas (voir fichier PJ).

Concernant le montant je souhaiterais finalement n'avoir à rentrer le montant qu'une seule fois dans TBxMtt et que la CBxTypeEquipement et la CBxNbDevis puissent "se mettre à jour" (comme lorsque cela se fait avec la CBxMontant et la CBxMttDevis mais finalement ces 2 CBx sont inutiles car redondante avec la TBxMtt que je viens de créer). Est-ce possible ?

Pour les CmdButton il y aura 2 ou 3 boutons ? Effacer, Ajouter et Supprimer ? Quelle différence entre effacer et supprimer ?

Ensuite comment ça marchera pour récupérer dans l'onglet Tableau_Export les informations qu'on vient de saisir dans le formulaire ? Il faudra cliquer sur Ajouter ?

Merci pour votre aide je suis un peu perdu.
 

Pièces jointes

  • Formulaire DA final.xlsm
    178.6 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Toujours pas vu d'initialisations de CLsM et CAsM dans votre dernier classeur. Pour ma gouverne, il signifie quoi le M à la fin ?
Pas vu de TBxMtt non plus.
D'après ce que je comprends les CBxMontant et CBxMttDevis sont nécessaires pour l'instant puisqu'elle vont chercher des infos dans des tables annexes. Mais il faudrait les appeler autrement, parce que ce ne sont en réalité pas des montants mais plutôt des sortes de grandes tranches de montants.
D'habitude je fais un CBnValider unique qui affiche automatiquement "Ajouter" ou "Modifier" selon qu'une correspondance à été trouvée ou non sur les critères d'identification de la ligne dans la base à mettre à jour, d'après les ComboBox prise en charge par le ComboBoxLiées de ce tableau. "Supprimer" permet de supprimer la ligne trouvée, "Effacer" ne fait que nettoyer les contrôles en vue d'y entrer autre chose.
Oui, en principe on clique sur le CBnValider pour enregistrer la ligne modifiée ou nouvelle, mais en général je mets la propriété Default de ce CommandButton à True, de sorte qu'il est aussi actionné par la touche Entrée.
Je mets également assez souvent à True la propriété Cancel du CBnEffacer, pour qu'il puisse aussi être actionné par la touche Echap.
 

gui1987

XLDnaute Nouveau
Le M n'a pas de signification particulière j'ai voulu mettre E comme Export mais ça faisait CAsE et cela a engendré une erreur j'ai donc mis M.
J'ai fait les initialisations du CLsM et CAsM mais surement avec une erreur car cela me renvoie une erreur 1004 lorsque je lance le formulaire.
J'ai bien fait un TBxMtt tout en haut du formulaire.

En effet les CBxMontant et CBxMttDevis sont nécessaires actuellement car les plages permettent de définir les CBxTypeEquipement et CBxNbDevis mais est-il possible de supprimer les 2 CBxMontant et CBxMttDevis en mettant des conditions peut-être grâce au montant saisi dans la nouvelle TBxMtt ?



En PJ le fichier (j'ai bien fait l'initialisation et le TBxMtt lors de l'envoi du fichier précédent, peut-être un problème lors du téléchargement du fichier ?)
 

Pièces jointes

  • Formulaire DA final.xlsm
    182 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Il y a une erreur parce que l'intitulé de la colonne est "CodeProjet", non "Code Projet".
Plus bas il y a des colonnes "TypeEquipement" et "TypeSection" qui n'existent pas. Il y en a peut être d'autres encore …
La CBxCodeProjet n'a pas à être confiée au CAsM si elle l'est déjà au CLsM.
Corrigez tout ça avant qu'on ailles plus loin.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
En avant première, les procédures concernant tout ça seront à peu près comme ça :
VB:
Private Sub CLsM_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   If NbrLgn = 1 Then Exit Sub
   LCouM = 0: CBnValider.Caption = "Ajouter": CBnSupprimer.Enabled = False
   ReDim TVLM(1 To 1, 1 To CLsM.Colonnes.Count)
   End Sub
Private Sub CLsM_BingoUn(ByVal Ligne As Long)
   LCouM = Ligne: CBnValider.Caption = "Modifier": CBnSupprimer.Enabled = True
   TVLM = CLsM.Lignes(LCouM).Range.Value
   CAsM.ValeursDepuis TVLM
   End Sub
Private Sub CBnValider_Click()
   CAsM.ValeursVers TVLM
   If LCouM = 0 Then
      CLsM.ValeursVers TVLM
      CLsM.Lignes.Add.Range.Value = TVLM
      CLsM.Actualiser
   Else
      CLsM.Lignes(LCouM).Range.Value = TVLM
      End If
   End Sub
Private Sub CBnSupprimer_Click()
   If LCouM = 0 Then Exit Sub
   If MsgBox("Êtes-vous sûr de vouloir supprimer ça ?", vbYesNo + vbDefaultButton2, Me.Caption) = vbNo Then Exit Sub
   CLsM.Lignes(LCouM).Delete
   CLsM.Actualiser
   End Sub
 

gui1987

XLDnaute Nouveau
Super j'ai fait les modifications et ça fonctionne. Merci beaucoup.

Pourquoi lorsque je fais ajouter dans le formulaire, l'implémentation dans l'onglet Tableau_Export commence à partir de la ligne 3 et non juste en dessous des titres des colonnes ?

De plus, concernant ma question sur les montants est-il possible de n'utiliser que la TBxMtt et de supprimer la CBxMontant et CBxMttDevis pour éviter d'alourdir le formulaire mais en conservant les conditions nécessaires pour le fonctionnement de la CBxTypeEquipement et CBxNbDevis ?
 

Pièces jointes

  • Formulaire DA final.xlsm
    189.7 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Vous souhaiteriez que les lignes soient toujours ajoutées au début, pourquoi ?
En principe il ne faut pas laisser de ligne vide dans un tableau.
Laissez la CBxMontant en attendant mais appelez la autrement parce que ce n'est pas un montant c'est plutot un profil de montant, et seul le CBxL sait ramener les éléments de ce profil. Éventuellement si on arrive à la piloter entièrement depuis une Private Sub TBxMtt_Change() on pourra la rendre invisible, mais rien ne presse. La CBxNbDevis ne devrait-elle pas plutôt être une TextBox TBxNbDevis ? Au fond il me semble que la TabD ne sert pas à grand chose.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…