Microsoft 365 Ecrire une formule de calcul en Vba Excel

NONO14

XLDnaute Occasionnel
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

  • Tablo_Heures.xlsm
    282.8 KB · Affichages: 13
Dernière édition:
Solution
Bonjour
tu dis ne pas vouloir protéger les colonnes..et pourtant tu postes un fichier protégé...

pour inscrire une formule dans une cellule J2 par VBA, voici ma méthode
1) créer une variable qui contient la formule en Anglais
FormuleJ="=if(A2="""",""""if(A2<>""""................)"
en anglais veut dire: les fonctions sont écrites dans la version Anglaise ==> Si==>IF, et==> And....
les ; sont remplacés par des ,
les " sont remplacés par ""

2) inscrire la formule
range("J2").formula=formuleJ

3) pour étirer la formule: autofill

NONO14

XLDnaute Occasionnel
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:

NONO14

XLDnaute Occasionnel
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.
 

TooFatBoy

XLDnaute Barbatruc
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:

NONO14

XLDnaute Occasionnel
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

XLDnaute Barbatruc
@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...
 

vgendron

XLDnaute Barbatruc
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

  • Tablo_Heures.xlsm
    257.7 KB · Affichages: 2

TooFatBoy

XLDnaute Barbatruc
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:

vgendron

XLDnaute Barbatruc
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

  • Tablo_Heures.xlsm
    281.7 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
pour te donner une idée..
une version avec identification par mot de passe de l'utilisateur
les mots de passe sont sur la feuille "Données" qui est masque en xlveryhidden
pour l'instant, le mot de passe = code agent
 

Pièces jointes

  • Tablo_Heures.xlsm
    193.8 KB · Affichages: 3

NONO14

XLDnaute Occasionnel
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.
 

NONO14

XLDnaute Occasionnel
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:

Discussions similaires

Réponses
9
Affichages
342
Réponses
5
Affichages
369
Réponses
3
Affichages
161

Statistiques des forums

Discussions
313 907
Messages
2 103 458
Membres
108 673
dernier inscrit
georsol