Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 17
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 ...

NONO14

XLDnaute Impliqué
hello
non, je ne suis pas souffrant, juste pas dispo car absent :-D
la c'est bon, je suis de retour chez moi

et donc la.. tu en es où de ton fichier ?

hello @ChTi160 ,@TooFatBoy
Bonjour vgendron,
Désolé pour la méprise. Alors le fichier, comment dire, il va beaucoup changé depuis ce matin. Suite à une réunion et du fait des éternelles modifications il a été arrêté qu'il fallait remettre à plat tout le projet.
Il faut simplifier les choses tout en étant complètes.
Il ressemble à ça à présent, mais les codages ne sont pas encore faits
 

Pièces jointes

  • GestPersonnnel.xlsm
    606.8 KB · Affichages: 7

NONO14

XLDnaute Impliqué
Oui il faut que je recommence à coder. Je ne l'ai pas encore fait, c'est un exemple réalisé juste après la réunion pour avoir une idée du rendu.
Maintenant je vais m'attaquer au codage et là il y a du boulot cat beaucoup de choses ont changé, mais la philosophie reste à la même.
 

NONO14

XLDnaute Impliqué
Par exemple, est-il possible de raccourcir ce code ?
VB:
'Controles de saisie des heures
'************************************
'************************************Lundi
Private Sub Tbx_11_Change()
    If IsDate(Me.Tbx_11) Or Me.Tbx_11 = "" Then Call CalculerTotaux(1)
End Sub

Private Sub Tbx_12_Change()
    If IsDate(Me.Tbx_12) Or Me.Tbx_12 = "" Then Call CalculerTotaux(1)
End Sub

Private Sub Tbx_13_Change()
    If IsDate(Me.Tbx_13) Or Me.Tbx_13 = "" Then Call CalculerTotaux(1)
End Sub

Private Sub Tbx_14_Change()
    If IsDate(Me.Tbx_14) Or Me.Tbx_14 = "" Then Call CalculerTotaux(1)
End Sub

Private Sub Tbx_15_Change()
    If IsDate(Me.Tbx_15) Or Me.Tbx_15 = "" Then Call CalculerTotaux(1)
End Sub

Private Sub Tbx_16_Change()
    If IsDate(Me.Tbx_16) Or Me.Tbx_16 = "" Then Call CalculerTotaux(1)
End Sub
 

vgendron

XLDnaute Barbatruc
à part intégrer l'évènement _change dans le module de classe ctextbox.. je ne vois pas comment.. il n'y a qu'une ligne de code

par contre, dans l'initialize du formulaire de choix tu peux déjà faire une boucle
ca suppose de recréer la table "t_actions" et d'être sûr d'avoir assez de checkbox sur ton formulaire

VB:
With Sheets("Données").ListObjects("t_Actions")
    For I = 1 To .ListRows.Count
        Me.Controls("Chk_" & I).Caption = .DataBodyRange(I, 1).Value
    Next I
End With
'Me.Chk_1.Caption = Sheets("Données").Range("I2").Value
'Me.Chk_2.Caption = Sheets("Données").Range("I3").Value
'Me.Chk_3.Caption = Sheets("Données").Range("I4").Value
'Me.Chk_4.Caption = Sheets("Données").Range("I5").Value
'Me.Chk_5.Caption = Sheets("Données").Range("I6").Value
'Me.Chk_6.Caption = Sheets("Données").Range("I7").Value
'Me.Chk_7.Caption = Sheets("Données").Range("I8").Value
'Me.Chk_8.Caption = Sheets("Données").Range("I9").Value
'Me.Chk_9.Caption = Sheets("Données").Range("I10").Value
'Me.Chk_10.Caption = Sheets("Données").Range("I11").Value
End Sub
 

NONO14

XLDnaute Impliqué
Oui j'avais tapé ce code à la va-vite pour une petite démonstration, j'allais corriger le tir, mais merci de l'avoir fait pour moi, c'est cool
Non il y a les 7 jours de la semaine codés de la même façon. On parle bien du contrôle de saisies des heures ?
 

vgendron

XLDnaute Barbatruc
si une seule doit etre active, j'aurais plutot utilisé des optionsbutton (dans le meme groupe: voir propriété)

sinon, je ferais UNE macro appelée par tous les chk_x_click, et en paramètre, le nom du control appelant
(avec caller)
 

Discussions similaires

Réponses
9
Affichages
474
Réponses
5
Affichages
433
Réponses
3
Affichages
261
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…