Microsoft 365 Ecrire une formule de calcul en Vba Excel

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

  • Tablo_Heures.xlsm
    282.8 KB · Affichages: 16
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 ...

vgendron

XLDnaute Barbatruc
quand tu sors du USFMot de passe==> tu fais unload (usf mot de passe) tu charges le USF choix

bah la. pareil
quand tu sort du USF Gestion temps==> tu fais unload (USFGestionTemp) et tu charges USF Choix

il va donc falloir prévoir un bouton pour sortir complètement de l'appli
 

NONO14

XLDnaute Impliqué
Je crois que je l'ai déjà dit au départ, mais je te promet que c'est très efficace :
Dis-lui qu'apparemment ce n'est pas faisable, et s'il insiste dis-lui que s'il sait faire alors qu'il te montre car tu serais très content de savoir comment faire ça...
Bonjour TootFatBoy,
Il s'est calmé depuis hier, je lui ai fait comprendre que mon cerveau n'avait que deux lobs (enfin je crois), et que je n'avais que 2 mains, alors s'il veut mettre la main à la tâche je lui laisse volontiers ma place.
 

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,
Voici la dernière version de mon fichier.
Avec l'aide de nombreux contributeurs, que je remercie chaleureusement, il y a eu quelques compléments.
J'ai complété le code pour l'impression des pointages (Editer les pointages) dans le formulaire UfGestMenus.
Il y a donc un copié (t_Recap) /collé (t_Import) des données, un tri des colonnes "Date" et "Code agent" dans le tableau destinataire (t_Import) ainsi qu'un aperçu avant impression.
Je l'ai nommé 15b car je conserve l'original (son jumeau en fait)
 

Pièces jointes

  • PointHeure15b.xlsm
    791.8 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
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 : Me.TextCode.Text = UCase(Me.TextCode)
Option Compare Text signifie que les comparaisons de chaînes sont effectuées sans tenir compte de la casse (majuscules/minuscules) et basées sur l'ordre alphabétique du système actuel.
alors les Codes DEN756i et den756i et Den756I etc etc seront considérés comme Bons !
ou supprimer : Me.TextCode.Text = UCase(Me.TextCode)
et alors entrer le Code Agent en entrant les majuscules et Minuscules !
à voir

Jean marie
 

NONO14

XLDnaute Impliqué
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 : Me.TextCode.Text = UCase(Me.TextCode)

alors les Codes DEN756i et den756i et Den756I etc etc seront considérés comme Bons !
ou supprimer : Me.TextCode.Text = UCase(Me.TextCode)
et alors entrer le Code Agent en entrant les majuscules et Minuscules !
à voir

Jean marie
Bonjour ChTi160,
Merci pour votre contribution. J'ai enlevé la ligne Ucase mais ça ne change rien, ma 2ème TextBox (T_bx_Nom) reste désespérément vide.
Mais j'ai trouvé mon erreur, Trouve n'avait pas été déclaré (Dim Trouve as Range).
Merci de m'avoir mis sur la bonne route.
 

TooFatBoy

XLDnaute Barbatruc
J'ai enlevé la ligne Ucase mais ça ne change rien, ma 2ème TextBox (T_bx_Nom) reste désespérément vide.
Mais as-tu ajouté la ligne indiquée ?


Mais j'ai trouvé mon erreur, Trouve n'avait pas été déclaré (Dim Trouve as Range).
Il me semble que normalement ça ne devrait rien changer, sauf éventuellement si tu as déjà un Trouve déclaré en Public ou en Global.
 

NONO14

XLDnaute Impliqué
En faisant mes tests, je me suis aperçu d'un petit inconvénient au niveau du formulaire UfPointage.
En effet, si l'employé(e) prend son service l'après-midi par exemple, les CheckBoxs du matin sont visibles et rien ne l'empêche de cliquer dessus et de perturber le calcul des heures.
Est-il possible de les cacher selon l'heure ? ça me paraît très compliqué...
 

Discussions similaires

Réponses
9
Affichages
443
Réponses
5
Affichages
410
Réponses
3
Affichages
234

Statistiques des forums

Discussions
314 705
Messages
2 112 076
Membres
111 411
dernier inscrit
NIMY