VBA Liste de livres empruntables
Bonjour, Je souhaite réaliser un tableau Excel avec Userform reprenant une liste de personnel, ainsi qu'une liste de livres.
Le tableau, via un bouton "Emprunter" lancerait l'userform.
Cet Userform reprendrait un menu déroulant pour la liste du personnel ainsi qu un choix des livres.
Le personnel sera amener a faire lui même l'emprunt. La séléction d un ou plusieurs lives doit être possible.
Une fois le personnel et le u les livre(s) choisit, l emprunt serait enregistré, rendant ainsi le temps de celui ci l impossibilité de voir dans la liste des choix de livre, le livre déjà sortit.
Une option quand un personnel rends le ou les livres serait pas mal également.
Avec la possibilité d effectuer une recherche rapide via liste des livres sorties, afin de savoir quel personnel le possede.
Je fais appel a votre expertise pour m apporter quelques idées ou participation sur les macros, n'etant pas expert.
D'avance merci.
Fichier de base modifier
Je ne parviens pas a faire en sorte que le bouton "valider emprunt" inscrive dans ma feuille 'Data" le nom du personnel et le livre emprunter. Si jamais.
Bonsoir Cfapa, bonsoir le forum,
Ton code sur le bouton Valider Emprunt est plein d'incohérences :
Private Sub CommandButton1_Click()
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
flag = 1
Exit For
End If
Next i
If flag <> 1 Then
MsgBox "Vous devez sélectionner un ou plusieurs noms dans la liste des employés.", 16
Exit Sub
End If
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
lgn = Range("A" & Rows.Count).End(xlUp)(2).Row
Range("A" & lgn) = TextBox1
If OptionButton1 = True Then
Range("B" & lgn) = ListBox1.List(i)
Else
Range("C" & lgn) = ListBox1.List(i)
End If
End If
Next i
lgn = Range("A" & Rows.Count).End(xlUp).Row
Range("A7:C" & lgn).Sort key1:=Range("A7"), order1:=xlAscending, key2:=Range("B7"), order2:=xlAscending, Header:=xlNo
Unload Me
UserForm1.Show
End Sub• Le message indique que l'utilisateur doit cocher un ou plusieurs noms dans la liste
il faudrait pour cela que la propriété [MultiSelect] de cette ListBox1 ne soit pas fmMultiSelectSingle mais fmMultiSelectMulti ou fmMultiSelectExtended !
• Range("A" & lgn) = TextBox1
Elle est où cette TextBox1 ?
• If OptionButton1 = True Then
ll est où ce bouton d'option ?
• Comme la colonne A est vide, vu que la TextBox1 n'existe pas, la ligne :
Range("A7:C" & lgn).Sort key1:=Range("A7"), order1:=xlAscending, key2:=Range("B7"), order2:=xlAscending, Header:=xlNoPlante !...
Tu aurais écrit :
• Range("A" & lgn) = TextBox1.Value
C'est cette ligne qui aurait planté en premier.
Revoie donc ton code. Tel qu'il est, ça ne peut pas marcher...
Bonsoir, et merci pour ces pistes.
Du coup j'ai modifier en listbox le choix multiples des livres, et en combobox la liste personnel
Me reste a comprendre comment avancer pour le bouton valider
J'avais recuperé une partie d code d un autre fichier.... Je ne maitrise pas trop.
bonsoir,
tous les livres sont au même niveau : Ils ne sont pas classés par catégories ? ils n'ont pas de références ?
Ce sont des précisions qu'il faut nous donner dès le départ...
On n'a pas besoin de la liste des livres mais s'il y a une liste de catégories, ça serait bien qu'on l'aie.
De même s'il y a des références ça serait bien qu'on aie tout de suite la logique de classement inter-catégorie...
A+
Bonjour, actuellement il n y a pas de catégorie, il n y en aura pas.
Pas de classement non plus ? pas de noms d'auteurs ?
Non il s'agit d un petit nombre de livres, pas de classement ni auteur de prevue, le projet sert a enregistrer les emprunt et accessoirement retrouver qui a tel ou tel livre, rien de plus.
galopin01 a écrit :bonsoir,
tous les livres sont au même niveau : Ils ne sont pas classés par catégories ? ils n'ont pas de références ?
Ce sont des précisions qu'il faut nous donner dès le départ...
On n'a pas besoin de la liste des livres mais s'il y a une liste de catégories, ça serait bien qu'on l'aie.
De même s'il y a des références ça serait bien qu'on aie tout de suite la logique de classement inter-catégorie...
A+
Je vous communique la liste des demain
Bonsoir le fil, bonsoir le forum,
En pièce jointe ton fichier modifié avec le code ci-dessous :
Private Sub CommandButton1_Click() 'bouton "Valider Emprunt"
Dim D As Worksheet 'déclare la variable D (onglet Data)
Dim I As Integer 'déclare la variable i (Incrément)
Dim LI As Integer 'déclare la variable LI(LIgne)
Set D = Sheets("Data") 'définit l'onglet D
LI = D.Range("C" & Application.Rows.Count).End(xlUp).Offset(1, 0).Row 'définit la ligne Li
D.Cells(LI, 1).Value = Date 'renvoie la date du jour dans la colonne 1 (=A)
D.Cells(LI, 2).Value = Me.ComboBox1.Value 'renvoie le nom du personnel dans la colonne 2 (=B)
For I = 0 To Me.ListBox2.ListCount - 1 'boucle sur tous les éléments de la ListBox2
If ListBox2.Selected(I) Then 'condition : si l'élément est sélectionné
LI = D.Range("C" & Application.Rows.Count).End(xlUp).Offset(1, 0).Row 'définit la ligne Li
D.Cells(LI, 3).Value = Me.ListBox2.List(I) 'renvoie le tite du livre dans la colonne 3 (=C)
End If 'fin de la condition
Next I 'prochain élément de la boucle
Unload Me 'vide et ferme l'UserForm
End SubATTENTION ! dans ton fichier les données allaient s'écrire à partir de la ligne 150 (plus ou moins, je ne me souviens plus). Cela signifie que les certaines cellules de la la colonne A contenait des données non visibles (espaces ou autres ?). Pour que le code fonctionne correctement j'ai supprimé toutes le lignes sauf la première...
Le Fichier :
Merci beaucoup, cela me permet d avancer grandement. Est il possible d ajouter une option rechercher sur le tableau des emprunts, une recherche par livre, affichant l emprunteur ? ou peut être également un bouton permettant d effacer l'emprunt que l on vient de faire ?
Cordialement
Bonjour,
J'éssai de créer un champ "recherche" permettant via liste déroulante des livres de savoir qui à emprunté celui ci.
De même, le combobox de la liste du personnel apparait vide, j aimerai que par défaut soit remplit du premier de la liste personnel.
Pour terminer, peut être qu un bouton "effacer" pourrait effacer le dernier emprunt.
Merci d avance pour votre aide.
bonjour,
Du bon usage des mots...
Il faut être plus rigoureux Sheets et Worksheets ne sont pas interchangeables...
On n'utilise pas Sheets parce que c'est plus court et que c'est moins fatigant à écrire !
Dans la plupart des cas il faut utiliser Worksheets sinon il y a 1 chance sur 2 d'arriver à un plantage VBA.
Si -comme moi- vous êtes fatigué de naissance, prenez l'habitude d'instancier des raccourcis :
Dim Liste
Dim WsS as Worksheet
Dim WsC as Worksheet
Dim WsD as Worksheet
Dim WsP as Worksheet
Set WsS = Worksheets("Source")
Set WsC = Worksheets("Cible")
Set WsP = Worksheets("Perso")
Set WsD = Worksheets("Datas") '...Ensuite vous pouvez vous permettre d'écrire :
With WsP
Set liste = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
ComboBox1.List = liste.Value
End With
'...Nota : Les déclarations (Dim) ne sont pas en option, il est universellement admis par tous les développeurs de les mettre en premier dans le code. Prenez l'habitude de commencer vos feuilles VBA par "Option Explicit" qui veillera à ce que vous n'oubliez pas ces déclarations. Vous progresserez plus rapidement !
A+
Bonjour le fil, bonjour le forum,
Certains forums permettent de mettre des appréciations sur les posts sous forme de "Like" ou avec des "+1 / -1".
Comme Excel-Pratique ne le permet pas, je voulais juste "plussoyer"
Bonjour, n ayant pas tout compris.... ou en sommes ,nous .?
Re,
En fait mon précédent post s'adressait à Galopin... Pardon.
Sinon pour ce que tu demandes il faut pas mal remanier. Possible que je te propose une solution dans le week-end...
Re,
Tu as rajouté un contrôle que je n'ai pas sur ma machine (DTPicker ou Calendrier). Lequel ? Je ne peux donc pas l'utiliser et, si tu es toujours intéressé, la solution que je te proposerai sera sans ça. D'ailleurs, si le fichier est destiné à d'autres utilisateurs sur d'autres PC, je te recommande de n'utiliser que des contrôles usuels pour éviter les bugs...
Attendant ta réponse.
Ouaf ! Salut ThauThème et tous !
Je ne voudrais pas être en reste pour plussoyer le post de Galopin !
(Je n'utilise pas Explicit, mais ça ! c'est un challenge pour prouver que je n'en ai pas besoin pour tout déclarer !)
Sheets, j'avais trouvé judicieux au début... jusqu'à... un problème qui m'a fait transpirer un moment (l'expérience... !), c'était avant de croiser Galopin, à qui je dois cependant pas mal d'autres choses auxquelles je n'avais pas pensé avant...
Cordialement.
ThauThème a écrit :Re,
En fait mon précédent post s'adressait à Galopin... Pardon.
Sinon pour ce que tu demandes il faut pas mal remanier. Possible que je te propose une solution dans le week-end...
Re,
Tu as rajouté un contrôle que je n'ai pas sur ma machine (DTPicker ou Calendrier). Lequel ? Je ne peux donc pas l'utiliser et, si tu es toujours intéressé, la solution que je te proposerai sera sans ça. D'ailleurs, si le fichier est destiné à d'autres utilisateurs sur d'autres PC, je te recommande de n'utiliser que des contrôles usuels pour éviter les bugs...
Attendant ta réponse.
Sans soucis aucune obligation de passer par DTPicker
Bonsoir le fil, bonsoir le forum,
En pièce jointe la version v03. À la différence de la v01, les dates et personnel sont répétés sur toutes les lignes...
L'UserForm2 EMPRUNT s'utilise comme celui de la v01 pour l'ajout de données. Le bouton Rechercher va fermer cet UserForm2 pour ouvrir l'Userform3 RECHERCHER.
Par défaut la recherche se fait sur les livres. Au fur et à mesure que le texte est édité dans la TetxBox1, la ListBox1 affiche toutes les lignes contenant le texte édité. Si elle se vide s'est qu'aucune occurrence n'est trouvée.
Les boutons d'options permettent de cibler la recherche par livre, personnel ou par date...
Lorsque l'édition est terminée dans la TextBox1, sélectionner une ligne dans la ListBox1.
Le Bouton Supprimer vas supprimer l'emprunt dans l'onglet Data après message de confirmation.
Le bouton Modifier va fermer l'Userform3 et rouvrir l'UserForm2 EMPRUNT avec les données correspondantes de la ligne sélectionnée affichées dans les 3 contrôles (TextBox1 = Date, ComboBox1 = Personnel, et ListBox1 = Livre).
Modifier le ou les contrôles et valider. Les données de la ligne sont modifiées...
Voir les variables déclarées publiques dans le module [Module1], voir le Gestionnaires de Noms pour les plages dynamiques (Personnel et Livres) avec la formule DECALER, qui alimentent la ComboBox1 et la Listbox1 d'EMPRUNT.
C'est la variable LI qui fait tout...
CE QUI MANQUE !
• La gestion ds retours
• La gestion des livres déjà prêtés qui ne doivent plus apparaître dans la liste s'ils n'ont pas été rendus...
Mais je ne sait pas si tu en as besoin ?...
Bonjour,
Super boulo, merci beaucoup. Concernant La gestion ds retours, La gestion des livres déjà prêtés qui ne doivent plus apparaître dans la liste s'ils n'ont pas été rendus... Cela serait un plus, mais pas forcement une necessité absolue. Cela va dépendre du temps disponible que vous accorder a ce projet, encore, et vous avez déjà contribuer grandement
Merci encore