Formulaire VBA - pret de matériel
Bonjour,
Voici mes différents problèmes sur un fichier de prêt de matériel que j'ai repris ici pour ensuite l'adapter à mon besoin.
LE FICHIER :
_____________________
1) Liste dans formulaire
J'ai trouvé sur le net comment associer une liste à une ComboBox => il faut donner la plage nécessaire sur "listfillrange" dans les propriétés de la combobox. Cependant, je ne retrouve pas cela dans les propriétés des miennes.
Je veux associer "ComboBox4" aux cellules présentes dans la colonne "catégories" du tableau nommé "catégories" présent dans l'onglet "liste"
Je veux associer "Combobox5" aux cellules présentes dans le tableau nommé "etat_du_materiel" présent dans l'onglet "liste"
Attention : les informations présentes dans les colonnes citées peuvent varier, notamment par des ajouts
2) Textbox complété automatiquement dans le formulaire en fonction d'autre valeurs
A) Le "TextBox5" doit affiché une date en fonction de la date présente dans "TextBox4" + X jours. Ces X jours sont en fonction de la catégorie. Ce nombre de jour est visible dans la colonne "délai d'emprunt" du tableau nommé "catégories" présent dans l'onglet "liste"
B) Le "TextBox8" doit affiché, comme pour une rechercheV, le rayon associé à la catégorie que l'utilisateur remplira dans le formulaire. (le Rayon associé est visible dans la colonne "rayon" du tableau nommé "catégories" présent dans l'onglet "liste"
3) Débogue du bouton de validation du formulaire (et donc remise à zero du formulaire)
Je pense que la page d'erreur provient des noms des TextBox, mais même en les modifiants, j'ai encore ce soucis (que j'aurais surement aussi sur les ComboBox)
4) Erreur à la reprise du formulaire.
Le formulaire s'utilise 2 fois : 1 fois lors du pret de matériel, une fois lors du retour. Hors, quand je clique dessus après qu'une ligne soit integrée au tableau de l'onglet "SUIVI EMPRUNT", j'ai ce message d'erreur :
Le déboguage m'indique l'erreur, mais je ne vois pas pourquoi cela en est une :
5) le bouton de remise à Zéro du tableau présent dans l'onglet "SUIVI EMPRUNT"
à date, il supprime tout ce qu'il y a sur le tableau mais j'aimerai qu'il ne supprime que les lignes ou il y a de noté "remis" dans la colonne "suivi de l'emprunt", puis il doit peut-etre (je pense) ré-agencer le tableau pour que le formulaire fonctionne, je ne sait pas. Est-ce possible ?
Voila, c'est tout pour mes soucis actuel..
J'ai fait l'effort de comprendre comment tout marchait à partir du fichier d'origine, mais VBA n'est pas DU TOUT un sujet que je maitrise.. aussi, si une âme charitable pourrait m'aider.. cela sera vraiment chouette !
(Je ne pourrais pas forcément répondre à la minute, mais je devrais le faire au moins une fois par jour)
Bonjour,
En voyant vos 2 premières questions je pense que vous repartez d'un trouvé sur le site. non ?
Bon je vous réponds d'abord sur le point 1.
Je veux associer "ComboBox4" aux cellules présentes dans la colonne "catégories" du tableau nommé "catégories" présent dans l'onglet "liste"
.....Je veux associer "Combobox5" aux cellules présentes dans le tableau nommé "etat_du_materiel" présent dans l'onglet "liste"
Oubliez cette manière de faire. Il vaut toujours mieux utiliser la méthode LIST ou ADDITEM
- Allez dans l'USF, Private Sub UserForm_Initialize()
- rajoutez les 2 lignes ci-dessous
Me.ComboBox4.List = Range("Categories").ListObject.ListColumns(1).DataBodyRange.Value
Me.ComboBox5.List = Range("Etat_du_materiel").ListObject.DataBodyRange.ValueVérifiez si tout est ok pour vous
NB : le souci dans ce fichier c'est que vous n'avez pas de logique dans la numérotation des combox et textbox. Donc combo1, combo2...
Là les textbox 6 et 7 n'existe pas. D'où déjà votre erreur que vous signalez au point 2
Idem pour les combo. Vous n'avez pas de combo1...
Ce serait mieux de commencer par là avant de modifier ci et là
Bonjour Dan,
C'est effectivement ici que je l'ai trouvé, j'ai cité le post d'origine sur mon premier post qui lui ne convenait pas 🙂
Merci pour l'aide sur la partie liste, je vais tester cela dès demain.
Concernant le suivi des textbox/combox j'ai bien prévu de rendre cela propre car oui, ayant supprimé et ajouté certaines, cela ne se suit plus.
Concernant le suivi des textbox/combox j'ai bien prévu de rendre cela propre car oui, ayant supprimé et ajouté certaines, cela ne se suit plus.
Oui, on peut contourner pour la macro Effacer qui bugue mais vous allez devoir modifier à droite et à gauche...
Bref du boulot car lorsque vous allez renommer vos textbox et combo, il va falloir aussi adapter. Exemple si vous renommer Textbox4 et Textbox1 et que vous avez un code Textbox4_change il faudra le changer en textbox1_change. Idem dans les lignes de code où vous avez textbox4
Vous comprenez ?
Peut-être que ce serait pour vous plus facile de faire cela en dernier et donc une fois que tout est réglé au niveau de vos codes ?
EDIT :
A) Le "TextBox5" doit affiché une date en fonction de la date présente dans "TextBox4" + X jours. Ces X jours sont en fonction de la catégorie. Ce nombre de jour est visible dans la colonne "délai d'emprunt" du tableau nommé "catégories" présent dans l'onglet "liste"
Dans l'usform1 faites ceci
1. Juste en dessous de l'instruction Option compare Text, ajoutez cette ligne
Dim encours As Boolean2. remplacez le code Private Sub TextBox4_Change() par celui ci-dessous
Private Sub TextBox4_Change() 'on calcule la date estimée de retour
Dim lig As Byte
If encours = True Then Exit Sub
If Me.ComboBox4.ListIndex = -1 Then
encours = True
Me.TextBox4 = vbNullString
MsgBox "Veuillez d'abord choisir une catégorie", vbCritical, "Choix catégorie"
encours = False
Exit Sub
End If
Me.TextBox5 = vbNullString
With Range("Categories").ListObject
lig = .ListColumns(1).DataBodyRange.Find(ComboBox4.Value, LookIn:=xlValues).Row - .HeaderRowRange.Row
Me.TextBox5.Value = CDate(Me.TextBox4.Value) + .DataBodyRange(lig, 3).Value
End With
End Sub3. rajoutez ce code qui agira en cas de changement de la combox catégorie
Private Sub ComboBox4_Change()
encours = True
With Me
.TextBox4 = vbNullString
.TextBox5 = vbNullString
End With
encours = False
End SubBonjour
Votre dernier post est vide... quid ?
Ha mince !
Je vous remerciais dans un premiers temps et était en phase sur le changement des textbox ! Je devrais tester tout ca demain quand j'aurais un pc de dispo
Re,
Ok merci du retour
Pour votre code Effacer, vous pouvez déjà le remplacer par celui ci
Sub Efface()
Dim c As Control
encours = True
For Each c In Me.Controls
Select Case TypeName(c)
Case "TextBox"
c.Value = ""
Case "listbox", "ComboBox"
c.Value = ""
c.ListIndex = -1
End Select
Next c
With Me
.CommandButton1.Visible = True 'le bouton Ajouter devient visible
.CommandButton3.Visible = False ' le bouton Modifier devient invisible
.TextBox1.SetFocus ' on positionne le curseur dans le TextBox1
End With
encours = False
End SubAttention, vous devez avoir déclaré la variable Encours comme je vous l'ai indiqué dans l'EDIT de mon post précédent --> https://forum.excel-pratique.com/s/goto/1217006
Bonjour et bonjour @Dan,
Je suis actuellement entrain de modifier graçe à tes précieux conseils.
1) Je suis coincé au moment de vouloir cliquer sur le formulaire si le tableau a une ligne de rempli. Cela me note ce message d'erreur :
Le debogage me mène ici :
De ce que j'en comprends, le nom de mon userform n'irait pas ? pourtant c'est bien le même.. :(
__________________________________________________________
2) erreur sur date prévue de retour :
Lorsque je rempli le formulaire, j'ai bien la date de retour dynamique. Cependant, j'ai tout de même un message d'erreur :
(les textbox ne sont pas effacé car je dois modifier les noms de chacun pour que le code fonctionne)
Le débogage me mène ici :
J'avoue ne pas comprendre l'erreur..
Peux-tu à nouveau m'accompagner ? (merci, je sens que je progresse :) )
Bonjour
Peux-tu à nouveau m'accompagner ? (merci, je sens que je progresse :) )
Bien entendu
1) Je suis coincé au moment de vouloir cliquer sur le formulaire si le tableau a une ligne de rempli. Cela me note ce message d'erreur
C'est la même erreur que celle mentionnée au départ ...
Je ne comprends pas quand vous écrivez "cliquer sur le formulaire"....
Le message de dépassement de capacité est souvent dû à une variable mal déclarée.
Si vous cliquez sur le bouton en feuille Suivi, l'userform s'ouvre ou pas et sans erreur ?
2) erreur sur date prévue de retour
La textbox 4 et textbox 5, c'est quoi dans votre userform ?
Dans votre premier fichier:
- textbox 4 = date calendrier
- textbox5 = date retour
Là je ne vois pas de date en textbox pour date calendrier. Donc comment avez-vous l'erreur ?
Si c'est sur le changement de la l'info dans la combobox "catégorie", vérifiez que vous avez bien appliqué les 3 points décrit dans mon post précédent
(les textbox ne sont pas effacé car je dois modifier les noms de chacun pour que le code fonctionne)
Vous n'avez pas suivi ce que je vous ai écrit dans mon post précédent.Refaites le point sur les deux posts dans lesquels je vous écris quoi modifier.
NB : je suppose que vous utilisez bien le fichier que vous avez placé dans le fil ?
Bonjour Dan
Le fichier d'origine est une version que j'avais proposée en 2023. Merci d'avoir pris sur toi de l'adapter pour Azryell. Toujours très délicat comme opération dès l'instant où l'on change la structure du tableau d'origine.
Bon courage et Bon WE
Amitiés
Henri
https://forum.excel-pratique.com/excel/vba-tableau-de-suivi-d-emprunt-de-materiel-187938
Bonjour Henri
Oui je m'en doutais en voyant ce fichier et notamment les boutons (idem de ceux de Lulu1234... souvenirs...
Question ... Azryell = Gumz ?
Toujours très délicat comme opération....
Tout à faire d'accord
J'attends son retour pour avancer
Bon WE !
Bonjour Dan et Azryell
Voici le fichier remis d'aplomb avec tes indications et mes propres rectifications. Il ne faut surtout pas MASQUER la colonne A.
Je n'ai pas toucher au bouton RAZ (effacement total de la base). J'ai ajouté un autre bouton: SUPPRESSION des emprunts terminés" qui supprime les enregistrements dont la colonne N (Suivi Emprunt) est égale à "Terminé" et qui ré-indexe les enregistrements restants.
Amicalement
Henri
Bonjour AFEH
Je me rend compte honteusement que je n'avais pas envoyé le message de remerciement.
Merci à toutes les personnes m'ayant aidé, cela m'a rajouter des compétences profitables :)