Gestion de base de données

Bonjour,

J'ai créé un tableau avec des données, puis un tableau de bord qui, en cliquant sur des boutons, accède directement à un onglet en rapport avec ledit bouton.

Sur chaque onglet, j'ai créé des boutons avec un nom pour chacun (ex : bouton 1 = chose 1, bouton 2 = chose 2 etc. J'ai ensuite créé un formulaire Userform et piur finir quand on clique sur n'importe quel bouton de n'importe quel onglet, ce formulaire s'ouvre, tout cela fonctionne.

Dans ce formulaire j'ai créé des textbox que j'ai nommé en rapport avec l'intitulé.

Plutôt que de personnaliser mon Userform à chaque bouton, je voudrais qu'en cliquant sur le bouton1 par exemple, le userform s'ouvre et le champ REF qui est un textBox soit rempli avec le contenu du bouton cliqué, ici dans REF, doit apparaître chose 1.

Le but final est qu'une fois le champ REF est rempli, je crée un code VBA qui va chercher tous les éléments en rapport avec le contenu du champ REF soit en faisant entrée ou autre chose.

J'ai créé un code qui permet d'afficher le contenu du bouton :

Sub recuperer_nom ()

nom = Application.Caller

MsgBox (nom)

Peut-être qu'en ajoutant un argument je pourrais ensuite passer cette procedure dans celle qui permet d'ouvrir directement le formulaire puis en récupérant le contenu de la variable, mais je ne suis pas expert.

Merci infiniment pour votre patience et votre aide.

Bonjour DD4477

En déclarant une variable publique, voilà ce qu'on peut faire

69dd4477-exemple.xlsm (20.12 Ko)

@+

...Après pour aller plus loin, un bon aperçu de ton fichier semble indispensable.

Toutefois garde à l'esprit qu'un bon UserForm pour un bon tableau n'est pas forcément chose facile même pour quelqu'un de bien rompu à cet exercice.

Mais un UserForm pour plusieurs tableaux différents j'ai rarement vu ça et ce n'est pas à la portée du premier débutant venu...

A+

Bonjour,

Voir fichier en PJ

Il n'y a que 2 tableaux : l'onglet base qui contient tous les matériels de prêt, l'onglet PRETS pour tous les matériels prêtés

En partant du tableau de bord, je veux prêter une Airbox, je constate qu'il y en a en stock vu le nombre de Airbox disponible, je clique sur le bouton Airbox qui me rend dans l'onglet des Airbox, j'en choisi une disponible et en cliquant sur le bouton qui convient (vu que la case devant est verte), cela ouvre un formulaire de saisie : comme j'ai cliqué sur Airbox2 par exemple, automatiquement dans le formulaire qui s'ouvre, le mot Airbox2 est enregistré dans REF et si je fais entrée (ou autre commande) tous les chmaps liés à ce matériel se remplissent, il ne reste plus qu'à saisir la Direction et le nom de la personne emprunteuse, les dates de prêts. En validant, l'état dispo devient prêté, une ligne est sauvegardée dans l'onglet PRETS. Par conséquent il n'est plus disponible, la couleur passe au rouge dans l'onglet devant le bouton Airbox2 et elle est décompté dans le tableau de bord. Enfin une fiche est éditée pour l'utilisateur. Et quand le matériel revient, l'etat passe à dispo.

Voyez-vous cette gestion trop compliquée ou bien seriez-vous assez patients pour m'aider à finaliser ce projet ?

Bonjour,

Pour ceux que cela intéresse, j'ai compris que le problème se situe dans l'affichage du contenu du textBox.

En effet, il faut bien utiliser une variable qui fait appel au clic du bouton :

nom = Application.caller

puis Msgbox(nom) renvoie bien au contenu du bouton pourvu qu'il soit bien nommé

J'ouvre bien le formulaire qui va bien mais je ne sais pas afficher le contenu du textBox à son ouverture avec le contenu du bouton.

Merci de votre aide.

Le problème c'est que tes boutons sont vraiment pas pratique dans ce contexte.

Il vaudrait mieux cliquer directement sur la référence voulue (colonne C)

59gprets-vg.xlsm (93.08 Ko)

A+

Bonjour,

Merci de votre intérêt sur le sujet. Finalement j'ai contourné le problème en exportant le contenu du bouton sur un autre onglet et j'ai créé la saisie autour et cela fonctionne bien puisque dès que le contenu est exporté, toutes les références sont automatiquement remplis.

Le but maintenant est que à la date x je prete le materiel toto pour 2 semaines et l'onglet pret est bien alimenté.

du coup il faut que je dise que l'etat du matériel devient prêté. En admettant que cette opération soit ok, a la date y avec y > x ce materiel revient dans les stocks, pour cela je dois trouvé une formule qui rechercherait le matériel non pas depuis le début du tableau mais depuis la fin pour connaitre le dernier état du matériel (tout est consigné dans les prets, les prets comme les retours).

Je vais essayer de creer une recherche depuis la fin du tableau et si l'état est dispo, la case en regard du materiel dans l'onglet sera verte.

Si vous avez une idée, je suis preneur.

Merci beaucoup.

Merci galopin01.

En effet cela fait le travail mais je ne comprends pas comment, en cliquant sur A1 par exemple, le formulaire apparaît. J'ai beau essayer d'aller dans les propriétés, je ne vois pas, j'ai bien trouvé ton code par contre et encore merci beaucoup.

Si tu peux encore m'aider, il s'agit de trouver un code ou une formule qui trouverait la dernière occurrence de A1 dans le tableau des prêts.

si l'etat est prêté, alors A1 devient rouge, sinon il reste vert.

Mille mercis.

Pour Galopin01,

pour comprendre ce que tu as fait j'ai copié ton code sur un autre onglet mais j'ai une erreur concernant le Range. Je ne vois pas où tu spécifie que le Range renvoie aux cellules "cliquables" de l'onglet actif.

As-tu cacher une partie de ton code autre part ?

Merci

Pour Galopin01

J'ai trouvé d'où vient le Lair et l'ai personnalisé pour chaque onglet. Merci

C'est la macro :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Not Intersect(Target, Range("Lair")) Is Nothing Then
      usfSaisie.Tag = Target.Value
      usfSaisie.Show
   End If
End Sub

...qui envoie au usf "Target".Value c'est à dire la valeur de la cellule cliquée.

Le Range Lair est défini dans le Gestionnaire de Noms.

Ensuite l'évènement Activate du usf fait le reste...

Pour la suite je pense que tu mets un peu la charrue avant les boeufs...

Le problème c'est de gérer ta base de donnée de prêts. Surement pas de chercher la dernière ligne de quoi que ce soit...

C'est clair que si l'objet est prêté c'est qu'il n'est plus là et il n'y aura rien à chercher ! De même si tu l'as inscrit en retour il n'y aura rien à chercher...

C'est sur que quand tu vas prêter un objet il va passer en rouge dans ton tableau de bord ! Pas besoin de bouton ni de feuilles intermédiaires pour ça : Multiplier le nombre de feuilles ne fera que multiplier tes problèmes...

Quand ton usf va valider la sortie ça va mettre ton tableau de bord en rouge pour cet objet... et vice versa quand l'objet sera revenu il ne sera plus en rouge...

Donc la seule question, c'est comment je gère ma base de donnée de prêts.

Ça pour l'instant je ne peux pas le faire pour toi, je n'ai pas une connaissance assez fine de tous les objets que tu gères dans chaque catégorie. (Il y en a 58 si j'en croit le Tableau de bord mais 68 si je regarde la "Base" et bien sur il n'y a rien qui précise dans quelle catégorie rentre chacun d'eux...

Il faut donc que tu te trouves un modèle de gestion de base de donnée qui te fasse "la totale" (Ajout/Modification/Recherche/Suppression) de tes mouvements de prêts. Tu trouveras un modèle de USF complet et parfait pour cet usage dans la section des téléchargements sous ce lien :

https://www.excel-pratique.com/fr/telechargements/utilitaires/userform-crud-excel-no476

Il est un petit peu compliqué à gérer à cause du calendrier, mais comme tu vas avoir pas mal de dates à gérer...

Bon sinon tu peux toujours essayer de "réinventer la roue" : Toussa dépend si tu fais ça juste pour t'initier à macroter ou si c'est un besoin réel pour ton travail...

A+

Pour Galopin01 :

J'ai trouvé une formule qui me donne la dernière occurrence d'un materiel donné dans mon projet :

=SIERREUR(INDEX(TPRETS[ETAT];GRANDE.VALEUR(SI(TPRETS[REF]='AIRBOX-CLEF 4G'!C3;LIGNE(INDIRECT("2:"&LIGNES(TPRETS[REF]))));1));"")

Bonne journée.

Rechercher des sujets similaires à "gestion base donnees"