Signaler

Macro pour journal de caisse

Posez votre question Crsi68300 7Messages postés mercredi 20 septembre 2017Date d'inscription 22 septembre 2017 Dernière intervention - Dernière réponse le 15 nov. 2017 à 20:25 par via55
Bonjour à tous,

J'ai débuté un fichier pour une entreprise, mais je bloque déjà car trop complexe pour moi.
(je fais ça afin de m'améliorer sur Excel...)

Le but serait quand cliquant sur le mode de paiement, ça copie les données dans journal de caisse, sur la bonne ligne en fonction de la date, et sinon se serait trop simple, additionne au fur et à mesure les ventes.

Ensuite, viens déduire les produits du stock.

J'ai vraiment l'impression que c'est irréalisable...

Si quelqu'un peut m'aider?

Merci d'avance
Cris

http://www.cjoint.com/doc/17_09/GIuoXt4NBhD_Suivi-CA-Stock.xlsm
Utile
+0
plus moins
Bonjour

1° rajouter une cellule pour le total en E13 de Vente jour et y mettre une formule de SOMME pour sommer toutes les cellules au dessus

2° Mettre cette macro dans un module :
Sub caisse()
Dim Ligne As Long
With Sheets("Journal de caisse")
Ligne = .Columns(1).Find(Date, , , , xlByColumns, xlPrevious).Row
If Range("E3") > 0 Then .Range("C" & Ligne) = Range("E3")
.Range("D" & Ligne) = Range("E35") - Range("E3")
End With
End Sub


3° Créer un nouveau bouton avec pour code :
Private Sub CommandButton1_Click()
caisse
End Sub


Cdlmnt
Via
Donnez votre avis
Utile
+0
plus moins
Merci beaucoup pour ta réponse, ça ne fonctionne pas comme je le souhaiterais mais grâce à ta macro, je décortique et espère y arriver...

Cris
Donnez votre avis
Utile
+0
plus moins
Maintenant mes 3 macros de validation du ticket fonctionnent, seulement il faudrait que ça additionne avec les cellules du journal de vente, car la sa réactualise seulement.

Voir fichier ci-joint.

Merci d'avance.
Cris

http://www.cjoint.com/c/GIvsmyXk2PD
Donnez votre avis
Utile
+0
plus moins
par exemple là j'essaye sur la ligne contenant G9 mais je n'arrive pas à la composer:

Sub Espece()
Dim Ligne As Long
With Sheets("Journal de caisse")
Ligne = .Columns(1).Find(Date, , , , xlByColumns, xlPrevious).Row
If Range("G9") > 0 Then .Range("C" & Ligne) = Range Sum(("G9") ; "C & Ligne"))
If Range("G5") > 0 Then .Range("D" & Ligne) = Range("G5")
If Range("G24") > 0 Then .Range("F" & Ligne) = Range("G24")
End With
End Sub
Donnez votre avis
Utile
+0
plus moins
Bonjour

Il suffit de modifier tes lignes de macro comme cela :
If Range("G9") > 0 Then .Range("C" & Ligne) =.Range("C" & Ligne)+ Range("G9")

D'autre part il est inutile d'avoir 3 fois la même macro pour especes, cheque et CB

Tu fais une seule macro Sub journal() avec les lignes actuelles qui reportent les données et dans les 3 Sub espece, CB et chèque tu remplaces ces lignes par un appel à journal

Cdlmnt
Via

Donnez votre avis
Utile
+0
plus moins
MERCI beaucoup, ça fonctionne parfaitement!!!

Non j'aimerais que se soit le mode de paiement qui valide le ticket donc j'aimerais conserver les 3.

Maintenant je vais rajouter le fait de réinitialiser le ticket a la fin de chaque macro (mais sa je sais faire)

Ensuite je vais bien lire tes données pour rajouter le fait de déduire les articles du stock. J'espère que tu seras là si problème car tu es un vrai pro!

UN GRAND MERCI.

Cris
Donnez votre avis
Utile
+0
plus moins
Re,

C'est bien le mode de paiement qui valide le ticket mais comme c'est la même opération qui est à faire c'est plus ergonomique de faire une seule macro :
Sub journal ()
Dim Ligne As Long
With Sheets("Journal de caisse")
Ligne = .Columns(1).Find(Date, , , , xlByColumns, xlPrevious).Row
If Range("G9") > 0 Then .Range("C" & Ligne) =.Range("C" & Ligne)+ Range Sum(("G9") ; "C & Ligne"))
If Range("G5") > 0 Then .Range("D" & Ligne) =.Range("D" & Ligne)+ Range("G5")
If Range("G24") > 0 Then .Range("F" & Ligne) = .Range("F" & Ligne)+Range("G24")
End With
End sub 


puis la macro associé au bouton devient :
Sub espece()
journal
End sub


le clic sur le bouton espece lance donc la macro journal

Faire la même chose pour CB et chèque

Pas de souci recontacte moi pour la gestion du stock si problème

Cdlmnt
Via


Donnez votre avis
Utile
+0
plus moins
Ah ok je comprend mieux maintenant se que c'est la macro associée.

mais trop tard j'ai bien avancé sur le fichier...

Maintenant, en cliquant sur le mode de paiement ça interfère sur journal de caisse ainsi que stock...

Mon fichier fonctionne parfaitement, je te le joint ci-dessous:

http://www.cjoint.com/c/GIvwCvJqd0D

Mais maintenant, j'aimerais bloquer les cellules, imaginons on mets une stagiaire en caisse!!!

Mais du coup je suis en erreur. je ne pense pas pouvoir contrer ça donc je ne verrouille pas mais bon si tu as un conseil je suis preneur...

Fichier mode verrouillé:

http://www.cjoint.com/c/GIvwJpO5VsD

Encore un GRAND MERCI!

Cris
Donnez votre avis
Utile
+0
plus moins
J'ai trouvé ceci:

Mais ça ne fonctionne pas, je pense ne pas savoir le placer correctement...


Sub MacroavecfeuilleProtect()

ActiveSheet.Unprotect "lemotdepasse"

'Placez ici vos instructions

ActiveSheet.Protect "lemotdepasse", True, True, True

End Sub

CRIS
Donnez votre avis
Utile
+0
plus moins
Bonjour

C'est bien la méthode à employer

En fait après chaque ligne With (Sheets)... dans tes macros, mettre l'instruction .Unprotect ou .Unprotect "toto" si elle est protégée par un mot de passe (en remplaçant toto par le mot de passe bien sûr)
Et avant chaque End with mettre l'instruction .Unprotect ou .Unprotect "toto"

Cdlmnt
Via
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 29 sept. 2017 à 17:12
Bonjour Via55,

J'ai bien avancer sur le fichier, enfin maintenant la mise en forme ne devrais plus bouger.

Est ce que je peux te demander encore une fois un peu d'aide?

En effet je rencontre un problème lors de la validation de mon ticket de caisse.

Voir dans: Userform3; Sub Valider_le_ticket; section : With sheets(Suivi ventes) et 'presta

Tu verras que lorsque je valide le ticket, j'envoie bien les données dans stock, j'envoie bien également dans le journal de caisse. Mais impossible d'envoyer dans suivi ventes.

Je ne comprend pas pourquoi. 

Merci d'avance si tu peux jeter un œil.

Cris

http://www.cjoint.com/c/GIDpmEte1QD
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour

1) Tu fais rechercher la dernière ligne remplie dans la colonne B, or il y des formules dans la colonne B donc cellules non vides ! il faut rechercher dans la colonne I
2) Il faut rajouter +1 pour avoir la 1ere ligne vide
3) Il y a un point en trop devant Range("E4")

Lignes corrigées :
' Classement dans suivi ventes
With Sheets("Suivi ventes")

i = Sheets("Suivi ventes").Range("I65536").End(xlUp).Row + 1 'Permet de se positionner sur la dernière ligne de tableau VIDE

'presta
If Range("E4") <> 0 Then .Range("I" & i) = (TextBox4)
If Range("E4") <> 0 Then .Range("F" & i) = Range("E4")

Ces lignes gèrent les presta mais il n'y a aucune ligne pour les ventes ?!

Cdlmnt
Via
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 29 sept. 2017 à 18:41
C'est moi qui avait omis de te signaler de changer les Ligne en I dans les 2 lignes suivantes :
If Range("E4") <> 0 Then .Range("I" & i) = (TextBox4)
If Range("E4") <> 0 Then .Range("F" & i) = Range("E4")

ça devrait être bon maintenant

Cdlmnt
Via
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 29 sept. 2017 à 18:48
Non non elles étaient bien en I, c'est moi qui ai changé pour essayer vu que ça ne fonctionnais pas (et j'ai pas pensé à rechanger avant envoi...)

Mais sinon cela ne fonctionne toujours pas, c'est vraiment bizarre car tout est bon...

Cdt
Cris
Répondre
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 29 sept. 2017 à 18:55
ça fonctionne chez moi
mais tu dois avoir des lignes déjà remplies dans ta colonne i vers le bas
vérifie la colonne i
ou ajoute après la ligne i = Sheets("Suivi ventes").Range("I65536").End(xlUp).Row + 1 l'instruction msgbox i pour qu'il t'affiche la 1ere ligne vide trouvée, comme ça tu verras bien
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 29 sept. 2017 à 19:01
Effectivement, j'ai sélectionné colonne I supp valeur, juste à réécrire client en titre.

Et ça fonctionne!

Grand Merci!

Je vais de ce pas écrire tout en rapport de la presta et en rapport des ventes.

Vraiment merci.

Cris
Répondre
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 29 sept. 2017 à 19:23
Bien

Tu as fait un bon boulot avec ce fichier, les userform sont pratiques et fonctionnelles
Bonne suite

Et n'hésites à me recontacter en cas de besoin

Cdlmnt
Via
Répondre
Donnez votre avis
Utile
+0
plus moins
Via,

Peut être peux tu m'aider encore...

En fait ce que je cherche c'est enregistrer le ticket, article par article pour pouvoir après extraire des stats, client, fournisseur etc...

Et aussi avoir un suivi de chaque vente.

Le seul problème, tu verras à la dernière ligne du suivi des ventes, c'est que je n'obtiens pas une ligne par article. exemple lors de la dernière ligne j'ai essayé avec une prestation et 1 article de chaque de chez Zao fournisseur et je récolte 1 seule ligne (sauf que j'aimerais les 4 pour 4 articles/presta).

Je ne sais pas si je suis bien clair dans mon explication, sinon dis moi et je recommence.

Et 2ieme problème, pc très long maintenant pour valider le ticket, formule trop longue ou PC trop faible en capacité?

Merci d'avance pour ta réponse.

Cris

http://www.cjoint.com/c/GIDrNfamWtD
Donnez votre avis
Utile
+0
plus moins
Je suis de sortie ce soir, je regarde ça en rentrant ou demain
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 29 sept. 2017 à 19:59
Normal, pas de souci,
très bonne soirée à toi.

Cris
Répondre
Donnez votre avis
Utile
+0
plus moins
Re

Ton fichier rectifié
http://www.cjoint.com/c/GIDu0YeCNZP

J'ai simplifié la macro avec des boucles et je n'ai pas de lenteur chez moi

Cdlmnt
Via
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 00:14
impossible d'ouvrir le fichier...
Répondre
Donnez votre avis
Utile
+0
plus moins
et ici?
https://mon-partage.fr/f/AYHJOgv4/
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 05:04
Est-ce que tu peux regarder l'ajout d'un nouveau client.
Usf2

Car à l'ajout j'ai besoin qu'il se mette sur la dernière ligne mais avant j'ai besoin de copier les formules des colonnes (A,S,T,U,V)

Je n'y arrive pas...

http://www.cjoint.com/c/GIEdeGeeAnD
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 06:13
Via,

Je viens de remarquer que depuis ta boucle, je n'ai plus le report dans stock...

Je n'ose pas y toucher, je préfère t'attendre.

Cris
Répondre
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 30 sept. 2017 à 12:13
Bonjour Cris,

1) le report dans stock s'effectue bien chez moi dans le fichier que tu m'as envoyé

2) Ne t'embêtes pas avec la recopie des formules par macro, étends d'abord ces formules sur un nombre de lignes conséquentes (nombre de clients maxi évalués : 500 par ex) mais pas jusqu'en bas car ça ferait ramer encore plus
L'extension n'est pas gênante car les formules n'affichent que du vide ou 0 si pas de valeur en colonnes précédentes

Cdlmnt
Via
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 12:46
Bonjour Via,

Je ne te renvoie pas le fichier mais regarde ce qui se passe en fait:

En validant, n'importe quel mode de règlement, tout fonctionne, par contre, en validant une seconde fois ça ne vient plus s'ajouter sur "journal de caisse" mais se colle comme ceci:

10000€10000€

Avant la boucle que tu as fait je n'avais pas ce soucis. (Si ça peux t'aider à comprendre).

Et si il y a cette erreur, là le stock n'actualise pas. Sinon oui.

Ensuite quand je supprime le montant soit CB soit autre, par la suite ça re-fonctionne.

Cris
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 12:55
Je viens de penser, avant ça fonctionnais donc j'ai remplacé:

If Espece = True And TextBox2.Value <> 0 Then .Range("I" & Ligne) = .Range("I" & Ligne) + (TexteBox2)

par

If Espece = True And TextBox2.Value <> 0 Then .Range("I" & Ligne) = .Range("I" & Ligne) + Range("H25")
C'est le total CA du ticket de caisse.

Donc "journal des ventes" = ok
Par contre, la première fois stock ok, mais la seconde non, ne change plus...
Répondre
Donnez votre avis
Utile
+0
plus moins
Désolé oubli de ma part d'un -1 dans la boucle pour les stocks :
If Range("E" & n) > 0 Then .Range("C" & n - 1) = .Range("C" & n - 1) - Range("E" & n)

Cdlmnt
Via
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 14:18
Super effectivement c'étais ça.

Il me tarde d'avoir ta lecture pour le deviner tout seul...

Merci encore
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 14:23
En attendant ta réponse, je cherchais à faire le calcul du rendu monnaie.

Toujours sur Usf3
J'aimerais afficher la différence de Txtbox1 - 2 dans textbox 3 (j'ai aussi essayé avec frame pour le rendre non cliquable.

Voici ce que je fait:
Private Sub TextBox3_Change()
UserForm3.TextBox3.Value = TextBox1 - TextBox2 'aussi essayer avec (.....)
TextBox3.Value = Format(TextBox2.Value, "0.00 €")
End Sub

Mais impossible.

Tant que j'y suis, ensuite, reporter ce montant dans la msgbox de validation, de façon à se que la personne en caisse puisse le laisser affiché avant de cliquer ok, pour s'en servir en rendant la monnaie, vous vous en serais douté...

Si j'en demande trop n'hésites pas à me le dire, car j'apprécie beaucoup ton aide et tes connaissances, mais ça commence à faire beaucoup...
(Si tu passes dans le coin de l'institut de beauté qui va utiliser ce fichier, tu auras massage gratuit de ma part!!!!!!!!)

Bien cordialement,

Cris
Répondre
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 30 sept. 2017 à 15:04
Re,

Pas de souci !
Ta sub dois se déclencher au changement dans textbox1, pas textbox2 :
Private Sub TextBox1_Change()
If TextBox1 = "" Then Exit Sub
TextBox3.Value = TextBox1 - TextBox2
TextBox3.Value = Format(TextBox3.Value, "0.00 €")
End Sub

Pour afficher le rendu aussi dans la boîte de message, modifier ainsi les premières lignes :
Private Sub CommandButton1_Click()
Dim Rep As Integer
    If TextBox3 > 0 Then mes = "A rendre : " & TextBox3
    Rep = MsgBox("Valider la vente?" & Chr(10) & mes, vbYesNo + vbQuestion, "mDF XLpages.com")


En attendant la suite (je suis sûr qu'il y en aura une)
Bien cordialement
Via
Répondre
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 15:27
Wouaw tu es magique!!!! Je n'aurais jamais trouvé.

Mais tu sais qu'à chaque solution que tu me donnes, je la décortique consciencieusement pour comprendre et apprendre.

Je suis passionné de la puissance Excel! c'est pour ça.

Allez à très vite comme tu dit! :)

Cris
Répondre
via55 8700Messages postés mercredi 16 janvier 2013Date d'inscription 21 novembre 2017 Dernière intervention - 30 sept. 2017 à 15:46
Oui c'est ça qui est passionnant avec Excel on n'a jamais fini d'apprendre et tout ce qu'on peut arriver à faire est incroyable

A bientôt

Via
Répondre
Donnez votre avis
Utile
+0
plus moins
Je me suis pas trompé en te disant à très vite...

Bon, bonne nouvelle, l'onglet "suivi ventes" entièrement fini. Pour le terminer, il me restais à chercher le fournisseur, j'ai usé de 2 colonnes sur cotés, écriture blanc, et INDEX EQUIV.

Maintenant je reviens vers toi car j'ai cherché quasiment toute la matinée, pour l'USF1, j'ai regardé 100 000 Tutos, mais ne trouve pas.

En fait j'ai une listbox, qui vient s'alimenter par soit combo nom soit combo prénom (et j'ai réussi à faire une combo active efface l'autre)

Mais là où je bloque, c'est que une fois client affiché dans listbox, j'aimerais juste d'un clic le sélectionner dans cette dite listbox et que sa affiche adresse ville etc...
Via source de données sheets(Clients)

C'est un système de vérification, au cas où j'ai 2 Didier Bertrand par exemple, puis sa permets à la vendeuse, de vérifier si changement de tel ou mail etc...

Voilà, je t'ai tout dit.

Je te joints à nouveau le fichier vu qu'il a évolué.

Merci,
Cris

http://www.cjoint.com/c/GIEpD4Lb72D
Donnez votre avis
Utile
+0
plus moins
Voilà
https://mon-partage.fr/f/vfLoq4ez/

J'ai du rajouter 2 textbox pour le nom et le prenom dans l'userform car l'affichage dans les combobox relance la macro que tuas faite au changement dans les combos. Trop galère à modifier ou à shunter

Pour échanger les fichiers il vaut mieux passer par monpartage on peut ouvrir directement les fichiers avec macro ce qui n'est pas le cas pour cjoint

Cdlmnt
Via
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 30 sept. 2017 à 19:39
ok je retiens pour le partage.

Je regarde de suite ton travail.

Merci
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour Via,

J'espère que tu passes un bon dimanche.

Est-ce que tu pourras regarder, quand tu as 5 min, car sur l'onglet vente jour lorsque que je crée un nouveau client, tout fonctionne mais j'ai le nom et prénom qui vient se copier dans ce même onglet "vente jour", en colonne S et T sur la ligne+1 (en rapport du fichier client). C'est à dire mon client se crée en ligne 20 du fichier client et le nom prénom sur 21.

Seulement, j'ai tout fouillé, formule et macro, je n'arrive pas à trouver où cette (fausse) action a pu être écrite.

Pour moi vu que c'est lié au "Valider de Créer un nouveau client" je ne cesse de penser que ça doit venir de là, mais je ne trouve rien.

Merci d'avance.
Cris

PS: J'ai bien avancé, tout est programmé au niveau recherche client, création client, aussi bien onglet vente que client.

Je vais pouvoir me pencher sur la partie Statistique

https://mon-partage.fr/f/CgRqVP3Q/
Cris68300 99Messages postés dimanche 27 août 2017Date d'inscription 15 novembre 2017 Dernière intervention - 1 oct. 2017 à 15:23
NUL NUL que je suis, oubli ce message!!!

Une formule étais entrée en S et T, suite à la suppression de ses 2 colonnes mon problème est résolu!!!
Répondre
Donnez votre avis
Utile
+0
plus moins
En revanche, si tu as une astuce pour insérer le format code postal dans mes macro d'ajout ou de modifier, je suis preneur.

J'ai trouver avec formatnumber 00000

Mais mon code postal devient 82 100 rangé sur gauche

au lieu de:

82100 rangé à droite

Cdt
Cris
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !