Microsoft 365 Ecrire une formule de calcul en Vba Excel

  • Initiateur de la discussion Initiateur de la discussion NONO14
  • 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 !

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,

Comment pourrait-on écrire cette formule de calcul en Vba, s'il vous plaît ? Pour le moment elle est écrite en dur dans des cellules Excel de mon tableau.
Cependant, il m'est demandé de l'écrire dans du code afin que personne ne puisse y accéder. Cette formule se trouve dans la colonne J du tableau de la feuille "Recap", il y en d'autres du même genre dans les colonnes K et L et un peu plus simples dans les colonnes M, N, O.
Bien sûr je pourrais protéger ces colonnes mais ce n'est pas ce qui m'est demandé, j'ai proposé cette solution, mais elle ne garantie pas une sécurité suffisante en cas d'effacement malencontreux par la personne qui va gérer ce fichier.
MAX_MAT et autres sont des Noms donnés à des cellules de la feuille "Données", soit les cellules L3 à O5.
Mot de passe de la feuille "falaise"
Merci par avance pour vos idées.
VB:
=SI(A2="";"";SI(A2<>"";SI(ET(D2<>"";E2<>"");E2-D2;SI(ET(D2<>"";E2="";F2<>"");MAX_MAT-D2;SI(ET(D2<>"";E2="";ET(F2<>"";G2=""));"";SI(ET(D2<>"";E2="";F2="";G2="";H2="";I2<>"");MAX_MAT-D2;SI(ET(D2<>"";E2="";F2="";G2<>"");MAX_MAT-D2;SI(ET(D2<>"";E2="";ET(F2="";G2="");ET(H2="";I2<>""));I2-D2;SI(ET(D2<>"";E2="";F2="";G2="");MAX_MAT-D2;SI(D2="";""))))))))))
 

Pièces jointes

Dernière édition:
Solution
Bonjour le Fil
juste pour signaler qu'a ce Niveau il y a un problème !
VB:
Private Sub TextCode_Change()
Dim Ctrl As Control
Dim Ctrl2 As Control
Dim Trouvé As Boolean
 Dim Trouve As Range

    Me.TextCode.Text = UCase(Me.TextCode) 'On met en Majuscule tout le Contenu du TextBox
    If Not EnableEvents Then Exit Sub
    Sheets("Liste_agents").Unprotect "falaise"
    'on cherche le nom associé au code dans la TS "t_Noms"
    With Sheets("Liste_agents").ListObjects("t_Noms")
    'ci-dessous on recherche dans une colonne ou se trouvent des Minuscules
    Set Trouve = .ListColumns(1).Range.Find(Me.TextCode, lookat:=xlWhol
Tu peux si la case n'a pas d'importance mettre Option Compare Text en tête de Module.
et supprimer ...
En attendant, je me suis permis quelques modifs/optimisations de ton code

pour l'instant j'ai commenté tout ce qui protège ou déprotège les feuilles

1) un module dans lequel tu définis ton mot de passe une seule fois (ca évite de l'écrire un peu partout dans le code)
2) un module avec deux macros pour protéger ou déprotéger la feuille saisie

3) pour la saisie d'heures, ton code "_change" passe son temps à déprotéger, reprotéger, modifier..
plutot que devoir cliquer sur le bouton en haut à gauche, un double clic suffit
voir code dans évènement _beforedoubleclic
Je suis de retour. J'ai testé vos modifications/optimisations et j'avoue que c'est plutôt intéressant. Cependant le donneur d'ordre préfère rester sur le clic d'un bouton plutôt que le double-clic. Il va donc falloir passer par l'optimisation via le bouton en évitant tous les protèges et déprotèges.
La modification sur une case saisie doit se faire après la frappe d'un mot de passe car une seule personne sera autorisée à agir sur les saisies.
Ensuite, après le double-clic, il aurait été bien de passer à la case suivante sans rester sur la case active.
De toute façon, je dois rester sur le clic bouton.
Merci beaucoup pour votre investissement à vouloir m'aider, j'apprécie.
 
Dernière édition:
vgendron,
J'ai regardé votre proposition. Il y a une idée à creuser, mais là il y a trop de données. Je dois rester sur la configuration précédente mais l'idée des MFC est très intéressante et je vais m'en inspirer.
Voilà comment je compte faire : Si une heure d'arrivée n'est pas suivie d'une heure de départ alors la case départ sera rouge et si une case de départ n'est pas consécutive à une heure d'arrivée la case sera rouge.
Par exemple, un pointage le matin à l'arrivée mais de pointage de départ du matin alors case départ en rouge même si une autre case départ est pointée.
Suite à cela le comptage des heures faites restera vide ou calculé au minimum, je ne sais pas encore.
J'espère que je suis assez clair dans mes explications...cependant, vous voyez l'idée.
 
J'ai testé vos modifications/optimisations et j'avoue que c'est plutôt intéressant. Cependant le donneur d'ordre préfère rester sur le clic d'un bouton plutôt que le double-clic.
Mais pourquoi les donneurs d'ordres sont-ils tous faits sur le même modèle ??? 😭

À chaque fois qu'il y a un truc stupide, tu peux être sûr qu'ils vont foncer dessus tête baissée et ne pas en démordre, même si tu leur montres un truc plus intuitif, plus simple à utiliser et plus simple à programmer et dépanner... 🙄 🙄 🙄

Perso, je ne leur laisse pas le choix : je leur dit que ce qu'ils veulent n'est pas faisable, ou en tout cas moi je ne sais pas faire. 😁


Ici c'est le bouton inutile, qu'il veut absolument avoir.
Bien souvent c'est la case à cocher, tout aussi inutile, qu'ils veulent absolument voir sur chacune des 1732 lignes du tableau...
 
Dernière édition:
Je suis d'accord avec vous et je fais le forcing dans ce sens. Cependant il faudra régler les petits inconvénients que j'ai cité plus haut : Pouvoir passer à la case suivante (à droite ou en bas peu importe) après le double-clic et la modification uniquement possible par un mot de passe. De cette façon je pourrai présenter quelque chose de plus abouti. J'ai bon espoir d'aller dans votre sens.
 
@TooFatBoy
pourquoi faire simple quand on peut faire compliqué
Eh oui, hélas !

Mais en plus ils s'en foutent puisque ce ne sont même pas eux qui utiliseront le fichier. À croire que c'est uniquement pour montrer que ce sont eux qui décident...


Moi, quand le chef me dit "mais si c'est faisable, je l'ai déjà vu !", je lui réponds que moi je ne sais pas faire mais que si lui sait faire je serai content qu'il m'apprenne.
Vu que la plupart du temps leur niveau en Excel se limite à peu près à =A1+B1, ça clôt la conversation et ils n'y reviennent généralement pas...
 
regarde la PJ

déjà.. il va falloir passer par des TS (tables structurées)
ca évite d'avoir des tableaux à rallonge avec 95% de lignes vides..


quand tu cliques ailleurs que dans la TS, rien ne se passe
quand tu cliques DANS la TS, DANS une des colonnes de saisie, ca met ou remplace l'heure de pointage
ET ca se déplace sur la ligne vers la droite

un truc qui me dérange depuis le début..
il y a une feuille "Saisie"==> c'est à priori la que les employés (ou toi??)font leur pointage
la feuille Recap ne devrait donc contenir QUE des formules pour compiler les données de la feuille Saisie (bon.. la .. au lieu de formules, faudra passer pas du PQ (ton chef va être content.. ca fait pro..)

PS: j'imagine que la macro "Aléatoire" c'était juste pour remplir 6 noms bidons avec des codes..
tu aurais aussi pu mettre Nom1 nom2.. Code1 code2....
ca évite le code compliqué pour pas grand chose...

pour l'histoire de protection.. LA question est:
QUI remplit ce fichier??
chaque employé? ==>donc;. leur interdire de remplir les lignes des collègues.. ==> passer par un formulaire serait pas mal..
ou juste UNE personne ==> dans ce cas.. la protection est inutile..
 

Pièces jointes

Je n'ai pas vu ta PJ, mais cette nuit j'étais moi aussi parti sur un TS pour la feuille "Saisie". Comme tu dis, ça évite les lignes vides inutiles. 😉

D'après ce que j'ai compris du fonctionnement prévu : chaque agent pointe, et seul le chef peut, avec un pw, modifier une cellule déjà remplie.
J'ai bon ??? 🤔


[Délire]
Y a pas moyen que chaque agent scanne son code à barres avec une douchette qui mettrait à jour une BDD ?
[/Délire]
 
Dernière édition:
Je n'ai pas vu ta PJ, mais cette nuit j'étais moi aussi parti sur un TS pour la feuille "Saisie". Comme tu dis, ça évite les lignes vides inutiles. 😉

D'après ce que j'ai compris du fonctionnement prévu : chaque agent pointe, et seul le chef peut, avec un pw, modifier une cellule déjà remplie.
J'ai bon ??? 🤔


[Délire]
Y a pas moyen que chaque agent scanne son code à barres avec une douchette qui mettrait à jour une BDD ?
[/Délire]
le délire, c'est que normalement c'est ce que toute entreprise a chez elle lorsque les agents doivent pointer.. ca s'appelle une pointeuse....

sinon
@NONO14
je me suis amusé à créer un formulaire de saisie
pour le lancer; bouton "Nouveau Pointage" sur la feuille "Saisie"

bien sur.. avant de lancer le formulaire on pourra demander à l'utilisateur de s'identifier avec son mot de passe, pour qu'il ne puisse saisir QUE ses heures
 

Pièces jointes

regarde la PJ

déjà.. il va falloir passer par des TS (tables structurées)
ca évite d'avoir des tableaux à rallonge avec 95% de lignes vides..


quand tu cliques ailleurs que dans la TS, rien ne se passe
quand tu cliques DANS la TS, DANS une des colonnes de saisie, ca met ou remplace l'heure de pointage
ET ca se déplace sur la ligne vers la droite

un truc qui me dérange depuis le début..
il y a une feuille "Saisie"==> c'est à priori la que les employés (ou toi??)font leur pointage
la feuille Recap ne devrait donc contenir QUE des formules pour compiler les données de la feuille Saisie (bon.. la .. au lieu de formules, faudra passer pas du PQ (ton chef va être content.. ca fait pro..)

PS: j'imagine que la macro "Aléatoire" c'était juste pour remplir 6 noms bidons avec des codes..
tu aurais aussi pu mettre Nom1 nom2.. Code1 code2....
ca évite le code compliqué pour pas grand chose...

pour l'histoire de protection.. LA question est:
QUI remplit ce fichier??
chaque employé? ==>donc;. leur interdire de remplir les lignes des collègues.. ==> passer par un formulaire serait pas mal..
ou juste UNE personne ==> dans ce cas.. la protection est inutile..
Bonjour,
Chaque agent pointe à son arrivée et à son départ (normalement). Le responsable sera le seul habilité pour toutes modifications des pointages d'où la nécessité d'un mot de passe. La feuille "Saisie" sert en somme de feuille de pointage. La feuille "Recap" sert de sauvegarde des pointages de la journée et ainsi cumulés donneront les pointages du mois. J'ai besoin d'un calcul par plage (matin, AM, soir) car les heures ne sont pas au même tarif selon la plage. La macro "Aléatoire" m'est très utile afin de créer un code complètement aléatoire sans se casser la tête. Pour les TS je suis d'accord.
 
Je n'ai pas vu ta PJ, mais cette nuit j'étais moi aussi parti sur un TS pour la feuille "Saisie". Comme tu dis, ça évite les lignes vides inutiles. 😉

D'après ce que j'ai compris du fonctionnement prévu : chaque agent pointe, et seul le chef peut, avec un pw, modifier une cellule déjà remplie.
J'ai bon ??? 🤔


[Délire]
Y a pas moyen que chaque agent scanne son code à barres avec une douchette qui mettrait à jour une BDD ?
[/Délire]
Bonjour,
Je travaille toujours de cette façon pour les essais et ensuite je structure le tout une fois que le travail est validé, sans doute ai-je tort. Comme écrit plus haut, en effet chaque agent pointe et seul le chef peut modifier le tableau. J'avais étudié la possibilité d'une douchette, mais cela m'a semblé être compliqué à mettre en place avec juste Excel. Financièrement, il n'est pas possible d'acquérir un logiciel spécialisé, alors on se débrouille avec les moyens du bords et nos petites connaissances.
 
Dernière édition:
- 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

Réponses
9
Affichages
491
Réponses
3
Affichages
271
Réponses
4
Affichages
445
Réponses
4
Affichages
697
Réponses
9
Affichages
646
Retour