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

NONO14

XLDnaute Impliqué
Bonsoir vgendron,
Merci encore pour ton aide, merci également à TootFatBoy.
Le premier code "Annuler" fonctionne bien. Le deuxième, TextCode_Change, ne fonctionnait pas, alors j'ai supprimé ce bout "If Not EnableEvents Then Exit Sub" et ça fonctionne. Par contre, je viens de m'apercevoir d'une erreur, et là c'est de ma faute, c'est que lorsque l'on tape le code de l'employé(e) il ne prend pas en compte la date du jour. Par exemple, dans mon tableau, si l'on tape FAL221 (Paul AUCHON) il rapatrie les données enregistrées hier dimanche. Je vais donc modifier cette partie en espérant ne pas faire de bêtise.
Je vais me baser sur la recherche du nom, ça doit être le même principe.
 

TooFatBoy

XLDnaute Barbatruc
C'est quoi l'indentation ?? Je ne sais pas ce que c'est et comment ça fonctionne.
C'est la mise en page de ton code .

Par exemple, décaler vers la droite tout ce qui est à l'intérieur d'une boucle FOR ... NEXT de façon à ce que le NEXT se retrouve sous le FOR.
Ca permet de voir en un coup d'oeil si on n'a pas oublié une fin de boucle ou un END IF ou autre.
 

NONO14

XLDnaute Impliqué
J'ai écrit ce bout de code dans TextCode_Change que j'interprète comme "Je recherche dans le tableau "t_Saisie" la colonne "Date", si elle correspond à la date du jour inscrite dans le formulaire alors".
Mais apparemment ça ne fonctionne pas. J'ai du me planter quelque part... Je n'ai pas mis le code en entier parce que je pense que c'est uniquement cette partie qui est foireuse.
Voyez-vous mon erreur ?
Merci pour votre éclairage.

VB:
Private Sub TextCode_Change()

Dim Ctrl As Control
Dim Trouve As Range
Dim Trouve2 As Range

    Set Trouve = Range("t_Noms[Code]").Find(Me.TextCode, lookat:=xlWhole)
    If Not Trouve Is Nothing Then Me.T_bx_Noms = Trouve.Offset(0, 1)
    
    Set Trouve2 = Range("t_Saisie[Date]").Find(Me.T_bx_DateJour, lookat:=xlWhole) 'recherche la date dans le tableau
    If Trouve2 = Me.T_bx_DateJour Then 'si la date est égale à la date du jour dans le formulaire alors
 

TooFatBoy

XLDnaute Barbatruc
Les dates dans ton tableau sont des nombres interprétés comme des dates par Excel.
Une TextBox contient... du texte.

Pas sûr que ça marche, mais essaye CDate(Me.T_bx_DateJour) pour chercher une date.
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
il faudrait que tu postes ta dernière version qui inclue toutes les modifs qui ont été apportées depuis le début..
parce que je viens de regarder ton fichier PointHeure6.xlsm
j'ai l'impression qu'il manque des choses
par exemple ta macro sur le combobox_change ==la partie qui sauvegarde n'a aucune chance de fonctionner correctement...
 

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous
Cette version est la dernière, il ne faut pas tenir compte du code de sauvegarde car il n'est pas fonctionnel. Je l'ai gardé pour m'en inspirer pour la suite. Je ne suis pas sur mon écran actuellement, je vous réponds de mon téléphone.
Je vais tester vos propositions dès que possible.
 

NONO14

XLDnaute Impliqué
Je dois de temps en temps m'absenter pour raison médicale.
Toutes mes excuses
 

Discussions similaires

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