Commande bouton
Bonjour,
j'ai creer une feuille base avec tout mes marchandises et une feuille ticket
je souhaiterai de l'aide sur le code vba
pour que lorsque je clique sur mon bouton "frite enfant"
la feuille ticket se remplie automatiquement avec les données de ma base "frite enfant"
et également si je clique sur le bouton ensuite sur le bouton 'grande frite"
la feuille ticket se rempli automatiqement mais a la ligne en dessous de ma frite enfant forcément
j'avais trouvé un tuto sur excel mais ça ne fonctionne pas et je viens de perdre 4h donc si quelqu'un peut m'aider ce serait top
Bonjour,
Une solution en pièce jointe.
Nota : le bouton doit correspondre exactement à l'intitule du plat.
Si le plat n'existe pas ou comporte une différence avec le texte du bouton, il n'y a aucun message d'erreur.
A+
super merci j'etudie ça ce soir merci merci merci
Bonjour mayo, galopin01, le forum,
@galopin01: sur mon pc , rien ne se passe et j'obtiens une erreur (problème de version d'excel ?)
@mayo:
Une alternative aux Boutons.....un clic dans une cellule....
Amitiés,
bonjour,
xorsankukai : Je ne pense pas, c'est du code tout ce qu'il y a de plus ordinaire et qui n'est pas spécifique à 2016.
Essai de placer le fichier dans ton répertoire Excel habituel puis lance le à nouveau...
Quel est le message d'erreur ?
A+
Comme beaucoup de classeurs avec macro ceux ci ne peuvent fonctionner directement dans le navigateur. Il faut les télécharger puis les enregistrer dans votre répertoire de travail Excel pour pouvoir l'ouvrir sans problème.
Il n'y a aucune différence entre mon classeur et celui de mayo hormis le bouton Reset que j'ai ajouté pour vider le ticket.
Nota :
Il y a du code dans le module ThisWorkbook :
Private Sub Workbook_Open()
Init
End Sub
Dans Feuil1 :
Private Sub CommandButton60_Click()
Range("H3:J23").ClearContents
End Sub
Dans Module1 :
Option Explicit
Dim Buttons() As New Classe1
Sub Init()
Dim BtnCnt As Integer
Dim Obj As OLEObject
BtnCnt = 0
For Each Obj In Worksheets("ticket").OLEObjects
If TypeOf Obj.Object Is MSForms.CommandButton Then
BtnCnt = BtnCnt + 1
ReDim Preserve Buttons(BtnCnt)
Set Buttons(BtnCnt).CmdBtnGrp = Obj.Object
End If
Next Obj
End Sub
Sub Action(s$)
Dim i%, iRL%, rng As Range
Set rng = Worksheets("base").Range("A1").CurrentRegion
iRL = Range("H30").End(xlUp).Row + 1
For i = 2 To rng.Rows.Count
If rng.Cells(i, 2) = s Then
Cells(iRL, 8) = rng.Cells(i, 1)
Cells(iRL, 9) = rng.Cells(i, 2)
Cells(iRL, 10) = rng.Cells(i, 3)
End If
Next
End Sub
Et dans le module de Classe Classe1 :
Public WithEvents CmdBtnGrp As MSForms.CommandButton
Private Sub CmdBtnGrp_Click()
Dim s$
s = CmdBtnGrp.Caption
Action s
End Sub
Bonne digestion !
Nota : La plupart du temps les différences de texte sont dues à la présence d'espaces invisibles à la fin d'un mot soit dans la base soit dans le texte du bouton.
Ex : "GRANDE FRITE " avec un espace à la fin dans la base...
A+
C'est genial aussi sans les boutons
j'aimerai par contre modifier la couleur violet par une couleur plus clair car mon mari n'a pas de bon yeux lol
et mettre les frite par ordre croissant
soit
frite enfant
petite
moyenne
grande
mais j'ai peur de tout faire capoter donc si vous avez encore 5 mn a me consacrer
en tout cas un grand merci car je peux l'utiliser de suite grace a vous 'ai gagner 5 jours de boulot
merci merci
Re,
@mayo: merci pour ton retour,
Le fichier modifié : comme j'utilise des plages nommées dans la macro, si tu rajoutes un élément dans une liste de la feuille ticket , il est pris en compte (par contre il faudra également l'ajouter dans la BASE pour qu'il y ai correspondance de code et de prix, sinon ça n'affichera que la désignation).
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ListObj As ListObject, Sh As Worksheet, j As Long
Set Sh = Sheets("ticket")
Set ListObj = Sh.ListObjects("Tableau2")
j = Sh.Cells(Rows.Count, 9).End(xlUp).Row
If Not Application.Intersect(Target, Range("menus, carte, frites, boissons, sauces")) Is Nothing Then
With ListObj
Sh.Cells(j, 9) = Target.Value
Sh.Cells(j, 8).FormulaR1C1 = _
"=IFERROR(INDEX(base[code],MATCH(Tableau2[DENOMINATION],base[designation],0)),"""")"
Sh.Cells(j, 10).FormulaR1C1 = _
"=IFERROR(INDEX(base[prix],MATCH(Tableau2[DENOMINATION],base[designation],0)),"""")"
End With
ListObj.ListRows.Add
Sh.Range("K1").Select
Sh.Range("K1").FormulaR1C1 = "=IFERROR(SUM(Tableau2[[PRIX ]]),"""")"
End If
Cancel = True
End Sub
@galopin01:
Il faut les télécharger puis les enregistrer dans votre répertoire de travail Excel pour pouvoir l'ouvrir sans problème.
C'est pourtant ce que j'avais fait, mais pas moyen avec ton fichier....
J'ai bien recopié l'intégralité de tes codes sur le fichier de mayo, et ça fonctionne.....encore une bizarrerie....inutile de s'attarder inutilement la dessus, l'essentiel c'est que cela fonctionne.......mais que la digestion est difficile !
Amitiés,
Bonjour,
@ xorsankukai,
Ta procédure peut-être allégée, car les formules des tableaux n'ont pas besoin d'être dupliquées.
J'en ai profité pour revoir la chose.
Cdlt.
Un exemple :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ListObj As ListObject, Cell As Range
If Not Application.Intersect(Target, Range("menus, carte, frites, boissons, sauces")) Is Nothing Then
If Not IsEmpty(Target) And Target.CountLarge = 1 Then
Set ListObj = Me.ListObjects(1)
With ListObj
If .InsertRowRange Is Nothing Then
Set Cell = .HeaderRowRange.Cells(2).Offset(.ListRows.Count)
Else
Set Cell = .InsertRowRange.Cells(2)
End If
Cell.Value = Target.Value
.ListRows.Add
End With
End If
End If
End Sub
Bonjour Jean-Eric
Que dire sinon que c'est parfait, merci pour ta correction.
Cependant, je ne comprends pas tout,
If .InsertRowRange Is Nothing Then
Set Cell = .HeaderRowRange.Cells(2).Offset(.ListRows.Count)
Else
Set Cell = .InsertRowRange.Cells(2)
End If
J'éprouve encore quelques difficultés pour manipuler les" listobjects"....
Me.ListObjects(1)= ListObjects("Tableau2") ?
Me désigne la feuille ticket et (1) pour le premier tableau de la feuille ticket ?
Je m'y perds un peu avec tous ces tableaux....
Merci de m'accorder un peu de ton temps,
Re,
Un peu d'explications :
1 - Me représente la feuille active.
2 - Dans la mesure ou la feuille comporte un tableau unique (table), il n'est pas nécessaire de le nommer.
Me.ListObjects(1)= ListObjects("Tableau2")
3 - La propriété InsertRowRange retourne Nothing, lorsque la première ligne du tableau comporte des données.
Si tel est le cas, on compte le nombre de lignes pour déterminer Cell. Sinon, Cell sera sur la première ligne (vide) du tableau.
* Dans notre cas, on a .Cells(2) car on travaille sur la colonne 2 de la table.
J'espère que cela t'aidera dans la compréhension de la chose !...
A te relire.
Cdlt.
Re,
J'espère que cela t'aidera dans la compréhension de la chose !..
Merci infiniment Jean-Eric pour tes explications, c'est nettement plus clair pour moi,
Amitiés,
Bonsoir
Le VBA étant assez compliqué pour moi si je n'ai pas regarder un cours et reproduire ce cours
si vous pouvez encore m'aider ce serait très très gentil
donc je voudrais pouvoir faire une copie de ma feuille "ticket "
1 ) autant de fois que je le souhaite
2) par le biais d'une macro
3) que cette macro se termine par un messagebox qui dit renomer "votre ticket "
4) que je puisse modifier ce nouveau ticket pour y ajouter des menus ou des boissons
pour mise en attente commande
ainsi enregistrer chaque ticket et faire les stat des ventes
est ce que c'est possible
j''ai mis un exemple de ce que je voudrais avec "ticket2" pour le copier en "ticket 3" et "stock"
au cas ou il serait peut etre possible de faire une macro pour qu'en fin de journée je sache combien j'ai vendu de ref
merci de votre aide
Bonsoir mayo,
Si je comprends bien, tu souhaites créer autant de feuille qu'il y a de commande ?
Si oui, ça risque d’être très difficile de t'y retrouver par la suite,
Un essai:
Pour 1-2-3
Un clic sur ajouter une commande:
- on quitte la commande en cours (il faudra re-selectionner l'onglet pour agir dessus)
- on rajoute une commande vierge.
(Si le nom demandé existe déjà, on ne fait rien).
Cordialement,
Bonjour
Merci beaucoup votre aide.
Alors oui c'est bien ce que je souhaite comme je fait max 30 commandes par jour ça devrait aller.
donc la j'ai testé c'est parfait, par contre, la feuille "modèle" est invisible c'est bien ça ?
et c'est cette feuille invisible "modèle" qui sert de base a mes nouvelles commandes ?
car j'ai ajouter un tableau de calcul monnaie sur la feuille ticket mais lorsque je creer une nouvelle commande le tableau n'apparait pas
donc si je souhaite ajouter un nouveau menu ou mon petit tableau c'est sur cette feuille "modèle"que cela se passe ?
du coup comment puis je faire pour modifier cette feuille "modèle" pour pouvoir par la suite ajouter des menu ?
Dernière chose
est il possible de créer un nouveau bouton de commande qui m'enregistre sur une feuille qu'on appellerai" recap vente"
toute les lignes du ticket , le montant total du ticket, le montant des ticket resto reçu et le nom du ticket
je vous ai fait un exemple avec 2 tickets et ce que je souhaiterais avoir sur ma feuille "récap vente"
j'aimerai être aussi forte que vous !! vraiment merci pour votre temps
Bonjour, c'est bon j'ai reussi a faire ce que je voulais
Par contre juste si vous pouvez m'expliquer comment ajouter des menus ou des viandes a la cartes ou des boissons
ça je n'ai pas reussi
merci de votre aide
Bonjour mayo,
A voir si cela te convient...
Les onglets "Modèle" et "BASE" sont masqués par défaut.
J'ai rajouté une feuille "Accueil":
- Le bouton "Commande" permet de créer la première commande (tu peux créer les suivantes à partir de ce bouton où directement depuis l'onglet crée)
- Le bouton "Réglages" te donne accès aux feuilles "BASE" et "Modèle" pour effectuer tes modifs où ajouts (mot de passe: mayo).
- Le bouton "RAZ" supprime tous les onglets des commandes et efface la feuille "recap vente".
Ce n'est pas optimisé,
Cordialement,
Merci
pour l'instant le fichier de la derniere fois est super je l'utilise depuis hier et je gagne un temps fou
je regarde celui ci demain car aujourd'hui pas possible et je reviens vers vous
grand grand merci
Bonjour mayo,
Merci pour ton retour, ravi que cela t'aide,
Quelques modifs à tester.....
Même fonctionnement que mon dernier post , avec en + :
- Rajout d'un bouton "Modif" sur la feuille "Modèle" : il désactive l'évènement Change de la feuille pour permettre les ajouts/modifications (attention, penser à recliquer sur le bouton pour réactiver l'évènement !)
- Lors de l'ajout d'une commande, l'onglet est de couleur Rouge, ce qui signifie que la commande est en attente.
- Si tu cliques sur "Enregistrer dans recap", l'onglet devient Vert ce qui signifie que la commande est terminée/payée (j'efface alors les cellules H1 et L1)
En espérant que cela te convienne, n'étant pas un pro, il y a certainement moyen de faire mieux où plus simple,
Cordialement,