• Initiateur de la discussion Initiateur de la discussion Mapat
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Mapat

XLDnaute Occasionnel
Bonjour

J'essaie de me faire une base pour gérer ma cave.
Je tâtonne depuis longtemps pour avoir quelque chose qui me convienne.
J'ai trouvé un programme de Dranreb qui permet des recherches avec différents combo
Le fonctionnement est superbe.
J'ai essayé de le continuer pour le personnaliser mais je n'y suis pas arrivé !
Voici donc le fichier joint modifié ........ en attente et qui demande de l'aide
Merci à vous et à Dranreb si il voit cette requête
 

Pièces jointes

Re : Cave à vin

Bonjour.
Voila, je pense être arrivé au bout.
Je ne vois pourtant dans la BtnValider_Click aucun dispositif sur le modèle du 1er code proposé dans mon poste #14 permettant d'ajouter ou de retirer des bouteilles.
J'aurais préféré, pour ce côté plus agéable, faire fonctionner l'évolution de mon stock avec le bouton que vous aviez mis en place
Lequel, "Retirer une bouteille" pour en retirer juste une immédiatement ? Je pense que je le ferais comme ça :
VB:
Private Sub BtnRetirer1_Click()
VLgn(1, 11) = VLgn(1, 11) - 1
CL.PlgTablo.Cells(LCou, 11) = VLgn(1, 11)
GarnirChamps
TBxAJourStock.Value = WorksheetFunction.Sum(CL.PlgTablo.Columns(11))
TBxValeurStock.Value = WorksheetFunction.Sum(CL.PlgTablo.Columns(20))
End Sub
Mais il vaudrait mieux sécuriser tout en veillant entre autre à ce que ce bouton ne soit Enabled que si LCou ainsi que VLgn(1, 11) sont > 0

Attention bogue : votre code rentre des String dans la la colonne Prix d'achat au lieu de Currency. Je suis très étonné que les multiplications marchent quand même.
 
Dernière édition:
Re : Cave à vin

Bonjour

J'ai inséré le code ci-dessus et tout fonctionne bien.
Je voudrais vous solliciter pour une dernière chose.
J'aimerais pouvoir afficher la photo de la bouteille appelée.
Je mettrais le fichier excel et les photos dans un même dossier, avec rajout d'une colonne et création d'un nom pour chaque photo
J'ai essayé avec un code qui me sert à une autre application mais encore une fois sans succès.
Merci et bon après-midi
 
Re : Cave à vin

Bonjour.

Non ce n'est pas la dernière chose parce qu'il y a encore plein de choses à revoir, des bogues à corriger, des noms de contrôles plus clair à mettre, une procédure HabiliterContrôles pour sécuriser le tout, qui sera appelée systématiquement à la fin de toutes les autres procédures, sauf celles qui appellent GarnirChamps, car celle ci l'appellera elle même à la fin. À titre indicatif, j'ai une version actuelle, non terminée (il faut que vous appreniez à programmer pour pouvoir être autonome dans sa maintenance), qui utilise les noms de contrôles suivants dans la GarnirChamps :
VB:
Private Sub GarnirChamps()
Me.TBxDateAchat = VLgn(1, 1)
' CbxAppella: 2, CbxDomaine: 3, CbxMillésim: 4, CbxDsgnCru: 5, CbxRégion: 6, CbxConten: 7, CbxLaRobe: 8
Me.TBxPrix = Format(VLgn(1, 9), "0.00 €")
If LCou > 0 Then
   Me.LabInfoCru = "Disponibilité :  " & VLgn(1, 11) & " " & VLgn(1, 7) & IIf(VLgn(1, 11) > 1, _
      "s d'une valeur totale de " & Format(VLgn(1, 18), "0.00 €"), "") & vbLf _
      & "Remarque :  " & IIf(VLgn(1, 10) > VLgn(1, 11), "Déjà été ouvert par le passé :  " & VLgn(1, 10) - VLgn(1, 11), "Il n'en a jamais été ouverte.")
Else
   Me.LabInfoCru = ""
   End If
Me.LabInfoStat = WorksheetFunction.Sum(CL.PlgTablo.Columns(10))
Me.TBxMvtAchat = "": Me.TBxMvtRetrait = ""
Me.LabInfoStat = LabInfoStat & ", " & WorksheetFunction.Sum(CL.PlgTablo.Columns(11))
Me.TBxNomVigneron = VLgn(1, 12)
Me.TBxAdresseVigneron = VLgn(1, 13)
If IsEmpty(VLgn(1, 14)) Then Me.TBxTelFixe = "" Else Me.TBxTelFixe = Format(VLgn(1, 14), "00"" ""00"" ""00"" ""00"" ""00")
If IsEmpty(VLgn(1, 15)) Then Me.TBxTelPort = "" Else Me.TBxTelPort = Format(VLgn(1, 15), "00"" ""00"" ""00"" ""00"" ""00")
Me.TBxMessagerie = VLgn(1, 16)
'Me.LabInfoStat = Format(WorksheetFunction.Sum(CL.PlgTablo.Columns(17)), "0.00 €")
'Me.LabInfoStat = Format(WorksheetFunction.Sum(CL.PlgTablo.Columns(18)), "0.00 €")
End Sub
Il faut préciser deux choses: 1) - J'ai eu l'idée de mettre des ComboBox pour la couleur (qui s'appelle la robe pour un vin) et le contenant, ça sera très pratique si on les met tout en premier. 2) - Quitte à utiliser des Label pour les informatons non modifiables, autant y mettre des phrases qui décrivent la situation: LabInfIdt remplace l'actuel LabInfo. Il affiche "Vin " & VLgn(1, 8) & " de " & VLgn(1, 4) & " en " & VLgn(1, 7) pour un vin trouvé (inutile d'afficher la date d'achat puisqu'il fait l'objet d'une TextBox), LabInfoCru au bas d'une section "Information sur ce cru" qui commence par la TBxDateAchat et la TbxPrix et enfin une LabInfoStat seule élément d'une section "Statistiques cave" pour décrire la cave actuelle et les dépenses passées (pas encore faites, ces phrases).

Il faudra donc y ajouter:
VB:
Me.ImgBouteille.Picture = LoadPicture(ThisWorkbook.Path & "\" & VLgn(1, ?))
 
Dernière édition:
Re : Cave à vin

Bonjour


J'avais également pensé au côté pratique concernant les 2 bombobox contenant et couleur,
je les ai rajoutés dans "info lors de l'achat"


Je ne comprends pas ce que ces tbx représenteront TBxMvtAchat TBxMvtRetrait
Pour le labInfoCru ça ne fonctionne pas


Pourquoi mettre des labels info alors que les informations sont déja
représentées dans "historique des achats" et "Evolution du stock" ?




Bonne journée
 

Pièces jointes

Re : Cave à vin

Bonjour.

Les CbxLaRode et CbxConten serait plus pratique tout au début avant tout le reste. L'idée c'est de les ajouter aux CL.Add dans l'UserForm_Initialize.

TBxMvtAchat et TBxMvtRetrait seraient vides lors de la présentation de la fiche suite à un choix de vin ou après une validation et serviraient, la 1ère, à y saisir un nombre de bouteilles achetées à ajouter dans la base au nombre disponible et historiquement achetées, la 2ième un nombre à retirer seulement du nombre disponible s'il en faut plus d'une ou si on veut différer cette soustraction jusqu'au moment de la validation, voire si on ne pourra plus faire autrement, une fois les sécurités mises, la bouteille à retirer faisant partie d'un nombre tout juste acheté qui n'a pas encore été enregistré.

C'est un choix que vous pouvez ne pas suivre, mais je trouve plus joli de faire des phrase pour décrire ce qui n'est pas modifiable plutôt que juste des chiffres dans plusieurs Label. De toute façon vos "historique des achats" et "Evolution du stock" contiennent actuellement des TextBox au lieu de Label, ce qui est incorrect pour des info non modifiables.
 
Dernière édition:
Re : Cave à vin

Re,


Pour TBxMvtAchat, c'est vrai que dans le cas d'achat déjà connu, ça peut être intéressant.
Pour TBxMvtRetrait, le bouton 'retirer une bouteille" peut suffire car dans le cas de plusieurs bouteilles retirées en une seule fois, il suffit de cliquer autant de fois que de flacons, ou bien écrire directement le nombre dans le textbox.


Je ne peux qu'adhérer à votre façon de voir comment écrire et présenter les codes de programmation puisque je m'essaye laborieusement à ça.
Dans le post 18, quand je mets le code


If LCou > 0 Then
Me.LabInfoCru = "Disponibilité : " & VLgn(1, 11) & " " & VLgn(1, 7) & IIf(VLgn(1, 11) > 1, _
"s d'une valeur totale de " & Format(VLgn(1, 18), "0.00 €"), "") & vbLf _
& "Remarque : " & IIf(VLgn(1, 10) > VLgn(1, 11), "Déjà été ouvert par le passé : " & VLgn(1, 10) - VLgn(1, 11), "Il n'en a jamais été ouverte.")
Else
Me.LabInfoCru = ""
End If


ça ne marche pas


J'ai supprimé les texbox et mis des labels dans les zones infos
 

Pièces jointes

Re : Cave à vin

Je ne les vois pas ces instructions dans votre dernier classeur, alors c'est normal qu'elles ne marchent pas !
Il faut les mettre, déboguer, réfléchir et corriger.
Ça fait "L'indice n'appartient pas à la sélection". À tout les coups, on n'a pas récupéré assez de colonnes dans cette dernière version.
Effectivement, dans la CL_Résultat on fait VLgn = CL.PlgTablo.Rows(LCou).Resize(, 17).Value
Il faut au moins en récupérer 18, voire 21
Mais moi j'ai supprimé les colonnes copies de nombre et de stock, elles ne servent à rien.
Pour le Redim VLgn quand c'est une nouvelle pièce de la cave on peut s'arrêter à 17. il ne faut pas les écrire dans la base puisque ce sont des formules.
 
Re : Cave à vin

Ça marche presque sauf la dernière colonne c'est à dire la 18 qui ne fait pas partie de tablo
J'ai également supprimé les colonnes total bouteilles et total en stock
C'est vrai que c'est bien d'avoir ces petites infos
 

Pièces jointes

Re : Cave à vin

Je ne vous suis pas, qu'est-ce qui ne va pas avec la colonne 18 après avoir mis dans CL_Résultat
VLgn = CL.PlgTablo.Rows(LCou).Resize(, 19).Value ?
Ce n'est pas remis à jour après validation, c'est ça ?
Il faudrait réexécuter ces instructions derrière CL_Actualiser dans la BtnValider_Click :
VB:
VLgn = CL.PlgTablo.Rows(LCou).Resize(, 19).Value
Call GarnirChamps: BtnValider.Caption = "Modifier"
LabInfIdt = "Vin " & VLgn(1, 8) & " de " & VLgn(1, 4) & " en " & VLgn(1, 7)
Mais bon, moi je n'aime pas écrire 36 fois les mêmes instructions en divers endroits, je préfère faire des procédures que j'appelle quand il faut. Là ces instructions peuvent peut être s'intégrer à GarnirChamps tout simplement dans le cadre du If LCou > 0 Then

On en est là, à peu près :
VB:
Private Sub UserForm_Initialize()
Set Excel = Application
Set CL = New ComboBoxLiés
CL.Plage Sheet1.rows(2)
CL.Add Me.CbxAppella, 2
CL.Add Me.CbxDomaine, 3
CL.Add Me.CbxMillésim, 4
CL.Add Me.CbxDsgnCru, 5
CL.Add Me.CbxRégion, 6
CL.Add Me.CbxConten, 7
CL.Add Me.CbxLaRobe, 8
CL.CouleurSympa
CL.Actualiser
End Sub

Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
Select Case NbrLgn
   Case 0: If Complet Then LabInfoIdt = "C'est une nouveauté…" Else LabInfoIdt = "Choisir…"
   Case Is > 1: LabInfIdt = NbrLgn & " cas. Veuillez affiner la recherche…"
   Case Else: Exit Sub
   End Select
LCou = 0: GarnirChamps
End Sub

Private Sub CL_Résultat(Lignes() As Long)
If UBound(Lignes) <> 1 Then Exit Sub
LCou = Lignes(1): GarnirChamps
End Sub

Private Sub GarnirChamps()
Rem. Gérés par CL:  CbxAppella: 2, CbxDomaine: 3, CbxMillésim: 4, CbxDsgnCru: 5, CbxRégion: 6, CbxConten: 7, CbxLaRobe: 8
Me.TBxMvtAchat = "": Me.TBxMvtRetrait = ""
If LCou > 0 Then
   VLgn = CL.PlgTablo.Rows(LCou).Resize(, 19).Value
   LabInfIdt = "Vin " & VLgn(1, 8) & " de " & VLgn(1, 4) & " en " & VLgn(1, 7)
   Me.LabInfoCru = "Disponibilité :  " & VLgn(1, 11) & " " & VLgn(1, 7) & IIf(VLgn(1, 11) > 1, _
      "s d'une valeur totale de " & Format(VLgn(1, 19), "0.00 €"), "") & vbLf _
      & "Remarque :  " & IIf(VLgn(1, 10) > VLgn(1, 11), "Déjà été ouvert par le passé :  " & VLgn(1, 10) - VLgn(1, 11), "Il n'en a jamais été ouverte.")
   BtnValider.Caption = "Modifier"
Else
   ReDim VLgn(1 To 1, 1 To 17)
   Rem. LabInfIdt contient un texte fixé par CL_Change
   Me.LabInfoCru = ""
   BtnValider.Caption = "Ajouter"
   End If
Me.TBxDateAchat = VLgn(1, 1)
Me.TBxPrix = Format(VLgn(1, 9), "0.00 €")
Me.TBxEntreStock = VLgn(1, 11)
Me.TBxNomVigneron = VLgn(1, 12)
Me.TBxAdresseVigneron = VLgn(1, 13)
If IsEmpty(VLgn(1, 14)) Then Me.TBxTelFixe = "" Else Me.TBxTelFixe = Format(VLgn(1, 14), "00"" ""00"" ""00"" ""00"" ""00")
If IsEmpty(VLgn(1, 15)) Then Me.TBxTelPort = "" Else Me.TBxTelPort = Format(VLgn(1, 15), "00"" ""00"" ""00"" ""00"" ""00")
Me.TBxMessagerie = VLgn(1, 16)
        'Historique des achats
Me.LabTotalBoutAchat = WorksheetFunction.Sum(CL.PlgTablo.Columns(10))
Me.LabValeurTotalAchat = WorksheetFunction.Sum(CL.PlgTablo.Columns(18))
Me.LabValeurTotalAchat = Format(WorksheetFunction.Sum(CL.PlgTablo.Columns(18)), "0.00 €")
        'Evolution du stock
Me.LabNombreStock = WorksheetFunction.Sum(CL.PlgTablo.Columns(11))
Me.LabValeurStock = WorksheetFunction.Sum(CL.PlgTablo.Columns(19))
Me.LabValeurStock = Format(WorksheetFunction.Sum(CL.PlgTablo.Columns(19)), "0.00 €")
End Sub

Private Sub BtnEffacer_Click()
CL.Nettoyer
End Sub

Private Sub BtnValider_Click()
Dim I As Long
If LCou = 0 Then
   CL.PlgTablo.Rows(1).Copy
   CL.PlgTablo.Rows(2).Insert
   For I = 1 To CL.Count: With CL.Item(I): VLgn(1, .Col) = .CBx.Text: End With: Next I
   LCou = 1: End If
VLgn(1, 1) = Me.TBxDateAchat
VLgn(1, 9) = CCur(Me.TBxPrix)
VLgn(1, 10) = Me.TBxNbrBouteille
VLgn(1, 11) = Me.TBxEntreStock
VLgn(1, 12) = Me.TBxNomVigneron
VLgn(1, 13) = Me.TBxAdresseVigneron
VLgn(1, 14) = Empty: If IsNumeric(Me.TBxTelFixe) Then VLgn(1, 14) = CDbl(Me.TBxTelFixe)
VLgn(1, 15) = Empty: If IsNumeric(Me.TBxTelPort) Then VLgn(1, 15) = CDbl(Me.TBxTelPort)
VLgn(1, 16) = Me.TBxMessagerie
CL.PlgTablo.Rows(LCou).Resize(, 17).Value2 = VLgn
CL.Actualiser
GarnirChamps
End Sub

Private Sub BtnRetirer1_Click()
VLgn(1, 11) = VLgn(1, 11) - 1
CL.PlgTablo.Cells(LCou, 11) = VLgn(1, 11)
GarnirChamps
End Sub

Private Sub BtnSupprimer_Click()
CL.PlgTablo.Rows(LCou).Delete
CL.Actualiser
End Sub
 
Dernière édition:
Re : Cave à vin

Bonjour Dranreb, le forum

Bravo, c'est vraiment de cette façon que j'espérais voir fonctionner cette base. Vous êtes certainement devin !!!
Il y avait de belles différences d'écriture !
Maintenant, si l'on peut faire apparaître la photo de la bouteille ce sera alors super !

Bonne journée
 

Pièces jointes

Re : Cave à vin

Bonjour.

J'ai déjà répondu à cette question dans un des nombreux postes précédents dont vous n'avez tenu aucun compte.
Voilà pourquoi il manque plein de chose, parce que je suis reparti de votre dernier classeur où vous ne les aviez pas mises.
Puisque vous êtes décidé à refuser de réfléchir pour comprendre comment ça doit marcher pour en déduire où il faut mettre les instructions que je vous indique, je me vais me désabonner de cette discussion.
 
Re : Cave à vin

Re

Sans doute considérez-vous "mon manque de réflexion" énervant.
J'ai essayé ce que vous aviez indiqué. N'ayant pas réussi, j'ai enlevé la ligne.
Mais ne croyez pas que, comme vous dites, je refuse de réfléchir.
Je suis comme vous avez pu vous en rendre compte, un novice et je ne serai jamais à un niveau comme le vôtre
C'est pour cette raison que je vais parfois sur ce forum.
Je regrette votre réaction. Je vous remercie pour tout le temps que vous m'avez consacré
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

J
Réponses
2
Affichages
1 K
jedifox
J
S
Réponses
2
Affichages
17 K
G
Retour