XL 2013 Modifier une base de donnée depuis un formulaire USF

océanne

XLDnaute Occasionnel
Bonjour le forum,

Malgré ce bel après-midi ensoleillé, je travaille un classeur excel pour le suivi de mes commandes et je jette une bouteille dans le forum, car je coince.
Plutôt qu'un grand discours, je vous joins un extrait de mon fichier excel que j'ai anonymisé, dans lequel j'ai une base de donnée de plusieurs milliers de lignes et d'une cinquantaine de colonne et je souhaiterait que les utilisateurs puissent réaliser des modifications depuis un formulaire et non pas à partir de la feuille excel elle même....car c'est trop prise de tête et il y a un risque de se tromper de ligne.

Du coup, j'ai créé mon formulaire (userform2) avec 4 zones de listes modifiables et autres zones de textes (au dessus de chacune j'ai mis les intitulé pour se repérer et la lettre de la colonne)....mais je ne parviens pas à réaliser le code pour interfacer mon formulaire et ma feuille de calcul.

Dans le premier menu déroulant je renseigne "la région de commande" (5 items)
Dans le second menu déroulant, je souhaiterais que n'apparaissent que les "codes commandes" qui dépendent de la région de commande choisie
Dans les deux autres menus restants, je souhaite que l'utilisateur puisse choisir entre deux items qui sont "junior" et "sénior".
Pour les zones de texte, je souhaite simplement que les données de la ligne concernée apparaissent
...et que pour toute modification réalisée dans les menus déroulants comme dans les zones de textes, que celles ci se répercute dans la feuille de calcul.

Et dans l'idéal, je voudrais ajouter un bouton "création" dans le formulaire, afin de pouvoir créer de toute pièce une nouvelle ligne en bas de la base de donnée....mais ça ce sera pour plus tard.

Merci à celui ou celle qui prendra le temps de me lire, sachant que je me suis penché sur le code de Mr BoisGontier qui a réalisé qq chose de semblable à mon besoin...mais c'est trop haut pour moi.

Océanne.
 

Pièces jointes

  • USF consultation et modification lignes tableau.xlsm
    64.5 KB · Affichages: 22

Dranreb

XLDnaute Barbatruc
Bonjour.
Il y a ça qui minimise les risques d'erreur de ligne. Ç'est mieux si la plage est sous forme de tableau, ça permet de spécifier les intiltulés de colonnes en guise de spécifications de colonnes aux Add.
Il est possible d'installer dans le projet VBA du classeur utilisateur les modules de service du complément .xlam si vous préférez.
 

océanne

XLDnaute Occasionnel
Merci pour votre proposition Dranreb, mais malheureusement au sein de ma société, pour raisons de sécurité, je ne dispose pas de droits pour installer ce type de fichiers ou autres macros complémentaires.
Par conséquent, ma question reste ouverte.
Merci à tous pour votre appui.
O.
 

océanne

XLDnaute Occasionnel
Merci encore DranReb pour votre gentillesse, votre disponibilité et votre technicité mais ceci est trop abstrait pour moi, la marche est bien trop haute.
Même après lecture du mod'op, je ne vois pas comment faire avancer mon projet à partir de ces éléments.
Je visais plus humblement de renseigner du code dans mon "UserForm2" pour arriver à mes fins comme décrit dans mon premier message en haut de ce fil.
Bonne soirée le forum.
 

Dranreb

XLDnaute Barbatruc
Pourtant tout ce qu'il faut derrière est déjà écrit, il ne reste plus qu'à aligner les CLs.Add et les CAs.Add pour tous les contrôles à prendre en charge. Ce n'est quand même pas à moi de faire ça, si ?
Surtout que vous n'avez même pas pris la peine de donner des noms mnémonique à vos contrôles pour qu'on puisse s'y retrouver !
Je pense qu'il faudrait aussi, et même surtout, des ComboBox pour les colonnes du début, parce qu'il me semble qu'elles servent à identifier une ligne existante pour pouvoir la retrouver en vue de la modifier. Naturellement pour la créer on y tapera les nouvelles informations. D'ailleurs d'une manière générale les ComboBox sont faites pour y taper des chose, pas pour toujours se précipiter bêtement sur le bouton qui affiche la liste. Même pour atteindre une info existante ce n'est en général pas le plus rapide.
Vous verrez, dès qu'il y aura suffisamment de ComboBox confiées à CLs pour que leur combinaison unique corresponde à une ligne existante de la base, tout marchera comme sur des roulettes !
 
Dernière édition:

océanne

XLDnaute Occasionnel
Bonsoir Le Forum, Dranreb,

Je viens vous donner quelques nouvelles.
En m'y remettant ce soir, j'ai compris ce que vous voulez dire concernant CLs.Add et les CAs.Add.
C'est vrai, je n'ai pas donné de noms mnémoniques aux contrôles, cependant, dans l'USF j'avais renseigné les intitulés des colonnes concernées.
C'est sans importance, je vous remercie pour votre aide, je suis parvenue à transposer sur mon projet, j'ai un bug avec l'expression Obj.ListObjects(1) dans l'extrait du module de classe ci-dessous :

Public Sub Plage(ByVal Obj As Object, Optional ByVal NbCol As Variant = 0)
Select Case TypeName(Obj)
Case "ListObject": Set ObjTablo = Obj: Set PlgTablo = ObjTablo.Range
Case "Range": Set PlgTablo = Obj: Set ObjTablo = PlgTablo.ListObject

Case "Worksheet": Set ObjTablo = Obj.ListObjects(1): Set PlgTablo = ObjTablo.Range

"Erreur d'exécution 9, l'indice n'appartient pas à la selection"

Mais je suis sur la bonne voie et je vais m'en sortir.

Bonne soirée à tous.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
La base à mettre à jour est-elle toujours encore couverte par un ListObject, c'est à dire un tableau Excel ?
Il semblerait que vous ayez spécifié en argument de CLs.Plage un objet Worksheet ne contenant aucun ListObject.
Il n'est pas complètement impossible de faire traiter à un objet ComboBoxLiée une plage n'ayant pas fait l'objet d'une mise sous forme de tableau, mais c'est plus malcommode :
Les intitulés de colonnes ne peuvent plus être utilisés en guise de spécification de colonne aux Add, et la propriété Lignes ne peut plus être utilisée, il faut prendre PlgTablo à la place. L'ajout d'une nouvelle ligne est plus compliqué aussi.
 
Dernière édition:

Discussions similaires