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

172020.xlsm (151.12 Ko)

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+

182020-vg.xlsm (157.36 Ko)

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 ?)

Spoiler

capture

@mayo:

Une alternative aux Boutons.....un clic dans une cellule....

32020-1.xlsm (31.62 Ko)

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+

Re,

Merci galopin01,

Quel est le message d'erreur ?

capture capture2

J'ai recopié tes codes sur le fichier de mayo et cela fonctionne à merveille (hormis certains boutons, certainement dû à une différence de texte), il me reste à analyser et à digérer tout ça,

Bravo à toi,

Amitiés,

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).

capture
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, (étant autoditacte et mon niveau en anglais assez faible) pourrais-tu m'expliquer ces lignes:

 
                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

6caisse-2020-1.xlsm (57.70 Ko)

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".
5test2.xlsm (49.68 Ko)

Ce n'est pas optimisé, , mais ça semble fonctionnel,

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,

Rechercher des sujets similaires à "commande bouton"