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
Voilà, tout est sous forme de tableaux.
J'ai aussi implanté le reste des modules de service CLsCAs (10 modules de classe supplémentaires) car il y a de fortes chances qu'on en ait besoin tôt ou tard.
 

Pièces jointes

  • CLsCAsGui1987.xlsm
    166.8 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Ben vous mettez deux autres lignes de déclarations en tête avec la même chose mais S comme Section à la fin au lieu de L, et la 2ème A comme Achats, et vous faite l'initialisation de ces deux autre ComboBoxLiées sur le même principe. Attention: rappelez vous: ne tentez pas une exécution sans précaution si une même ComboBox aura été confiée à plusieurs ComboBoxLiées.
 

Dranreb

XLDnaute Barbatruc
Ah ! Je vois que vous avez (presque) compris tout seul que vous pouviez aussi faire prendre en charge des contrôles à un ControlsAssocié. Mais pour que l'intitulé de colonne puisse être reconnu il faut transmettre au CAs une information détenue par le CLs correspondant :
VB:
Private Sub UserForm_Initialize()
   Set CLsL = New ComboBoxLiées: CLsL.Plage WshListe
   Set CAsL = New ControlsAssociés: Set CAsL.Colonnes = CLsL.Colonnes
Bon, après, ça ne marche toujours pas, parce qu'il n'existe pas de colonne "NuméroSection" dans le TabL
Ne serait ce pas dans la séquence d'initialisations complètes d'un autre groupe de variables que vous auriez dû le mettre ?
Par exemple vous en avez un dans le TabS, alors ce serait peut être pour le CLsS ou le CAsS ?
Zut, fautes de frappe, j'ai nommé WshASec1 l'objet worksheet qui représente cette feuille. Renommez le donc WshSect comme je voulais le faire.
Mais vous n'avez pas ajouté en tête les déclaration que je vous ai dites. Il devrait y avoir :
VB:
Rem. Variables globales: Objets de service, numéros de Lignes COUrants, Tableaux des Valeurs des Lignes courantes
Private WithEvents CLsL As ComboBoxLiées, CAsL As ControlsAssociés, LCouL As Long, TVLL()
Private WithEvents CLsS As ComboBoxLiées, CAsS As ControlsAssociés, LCouS As Long, TVLS()
Private WithEvents CLsA As ComboBoxLiées, CAsA As ControlsAssociés, LCouA As Long, TVLA()
Et il faut faire autant de paquets d'initialisations dans l'UserForm_Initialize
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
J'ai vu qu'il y avait des bouts de code en commentaire, alors j'ai à peu près réussi à les intégrer
Reste à mettre des CommandButton pour ce que vous voulez faire de tout ça … Valider, Supprimer, tout ça …

*** Pièce jointe supprimée ***
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai encore vu hier soir qu'il y a quelque chose qui ne va pas: On ne peut pas tomber sur une ligne existante de la TabL parce qu'il y a des doublons sur les 3 1ères colonnes.
Et si la dernière colonne "TypeSection" sert plus ou moins à empêcher de partir dans la TabS quand il n'y a rien, au lieu de ne rien mettre, justement, mettez y un code reconnaissable qui n'y figure pas, genre "sans objet" ou "interdit", ce que vous voulez. Et si au contraire les deux y figurant sont possibles, "Fix" et "Var", ne mettez rien. Comme ça il ne restera qu'à supprimer une ligne sur 2 en double.
Rappel: la recherche dans TabL de CBxTypeSection ne serait pas simple puisqu'elle est surtout déjà prévue dans TabS. Pareil pour CBxTypeCde, utilisée pour la TabA. Donc dans la TabL il faut que ça reste des contrôles associés restitués d'une ligne unique où les 3 1ère colonnes correspondent.
 

gui1987

XLDnaute Nouveau
Wahou merci beaucoup c'est super ça m'avance énormément.

J'ai une question pourquoi dans la CBxTypeCde je peux faire un choix entre DA, LVA et Investissement. Cela devrait être "borné" et n'y avoir qu'un choix unique en fonction des choix réalisés dans les CBx précédents (CBxMontant, CBxTypeEquipement et CBxDurée).
Par exemple lorsque je sélectionne dans la CBxMontant "entre 500€ et 1500 €" et dans la CBxTypeEquipement "PC_Tablettes_Matériel_Informatique" alors dans la CBxTypeCde ça m'affiche bien "LVA" mais lorsque je clique dessus il y a aussi le choix de sélectionner "Investissement" ou "DA", or cela ne devrait être uniquement LVA.

Idem pour CdeTypeSection.

De plus, j'ai fait quelques modifications pour que lorsque dans CBxTypeCde il y a Investissement ou LVA alors les CBx qui suivent ça affiche interdit.
En revanche j'ai une autre question comment faire pour qu'un message box apparaisse lorsque dans CBxTypeCde il y a Investissement ou LVA ? Dans le msgbox il y aurait écrit qquchose comment ça "voir avec XXX pour code projet" ? Et que le curseur aille directement sur la TBxCodeProjet lorsque l'on "valide" la msgbox ?

Merci encore pour tout
 

Pièces jointes

  • CLsCAsGui1987.xlsm
    177.2 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Ça ne vaut pas le coup, à mon avis de compliquer pour ça. C'est déjà bien que les CBxTypeCde et CdeTypeSection soient correctement initialisés suite aux choix dans les 3 1ères colonnes.
Il serait cependant possible d'ajouter une CAsL.Enabled = False à la fin de la CLsL_BingoUn pour qu'on ne puisse plus le changer. Je déconseille les MsgBox dans les UserForm. Parfois je prévois plutôt un LabInfo pour informer d'une situation. Une instruction TBxCodeProjet.SetFocus devrait marcher.
Il n'est nulle part ce code projet, dans les tableaux ? Alors à quoi ça servira de le renseigner ?
 

gui1987

XLDnaute Nouveau
Ok merci pas de souci c'est effectivement déjà très bien que ça marche comme ça donc je ne vais pas complexifier.

Comment fonctionne un labinfo, j'ai regardé sur internet mais je n'ai pas réussi à trouver d'explication claire de sa signification. Dans mon exemple de demander à ce qu'une MsgBox s'affiche lorsque Investissement ou LVA est sélectionné qu'est ce qu'un LabInfo pourrait faire ?
Le TBXCodeProjet sert à remplir manuellement un code projet qui serait donné par une personne bien précise donc pas de possibilité de faire de tableau ce serait une saisie manuelle d'où ma demande d'afficher un message "voir avec XXX pour code projet".
Merci encore
 

Dranreb

XLDnaute Barbatruc
Ben c'est un contrôle Label nommé LabInfo à la propriété Caption duquel j'affecte un texte, c'est tout !
Oui mais cette saisie manuelle, elle va où ensuite ? J'ai bien du mal à comprendre à quoi sert cet UserForm si ce n'est pas à mettre à jour un 4ème tableau peut être, avec possibilité d'ajout, modification et suppression !
La méthode ValeursVers des deux objets et la collection Lignes du ComboBoxLiées offre aussi des facilités de ce coté là.
 

gui1987

XLDnaute Nouveau
Bonjour,

J'ai essayé de rajouter d'autres CBx dans le formulaire liés à un nouveau tableau mais une erreur s'affiche et je ne sais pas comment la corriger.
Peux-tu m'aider ?

Merci encore.
 

Pièces jointes

  • Formulaire final.xlsm
    169.9 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Bonjour.
La méthode Plage du CLsD n'a pas été invoquée, sans doute à cause d'un oubli de changer CLsA en CLsD après copie de la 1ère ligne d'initialisation du CLsA prise comme modèle.

Remarque: j'aimerais toujours savoir sur quoi va déboucher la saisie du code projet.
 
Dernière édition:

gui1987

XLDnaute Nouveau
Parfait merci j'ai pas bien MAJ le copier/coller réalisé.

Concernant le code projet il s'agit de demander à une personne responsable des invest de donner le bon code projet, cela ne peut pas être traité sous forme de tableau d'où la nécessite de faire une TextBox.

Merci encore.
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 403
Membres
103 536
dernier inscrit
komivi