IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour faire des addidtions et soustractions avec textbox dans un userform/Planning [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut Macro pour faire des addidtions et soustractions avec textbox dans un userform/Planning
    Bonjour à tous,

    voici quelques mois, je me suis mis à la programmation sur excel et j'ai l'impression qu'il n'y pas de limite, les seules limites sont malheureusement mes compétences. Je pense qu'au sein de votre club au contact de professionnels et de passionnés que je pourrais évoluer, enfin je l'espère...

    Je suis au début de la construction d'un nouvel outil qui va permettre de construire un planning sur une période donnée à partir d'un userform au sein duquel on va construire le planning hebdo.
    Dans cet userform, pour une journée, il y a 4 textbox qui font le calcul de la différence des heures réalisées le matin (hrs fin -hrs début) + la différence des heures réalisées l'après midi (hrs fin -hrs début) et le total apparait dans la 5e textbox. Les 5 textbox sont alignés et correspondent au lundi. Même chose pour le mardi, merdredi etc... jusque dimanche.
    L'objectif de faire faire les calculs dans l'userform

    J'ai réussi à faire la macro pour le premier jour de la semaine, le lundi et là je pensais avoir la solution pour faire tous les autres jours de la semaine mais je bloque. Je me suis déjà arraché les cheveux pour trouver la technique pour les heures au delà de 24H00, car comme vous devez le savoir excel n'aime pas cela
    Pour le mardi, j'ai tenté de passer par un 2e module de classe avec lequel je créé la même macro que le lundi mais en changeant les variable pour les boucles (i pour lundi, j pour mardi, k pour mercredi etc...) et en augmentant le nombre de textbox dans la boucle définie dans l'userform "Option Explicit Dim txt(1 To ??)"
    4 pour lundi et je suis passé à 8 quand j'ai voulu tester le mardi, et j'aurais mis 28 pour arriver au dimanche...
    J'ai également changé la variable "iv1 qui fait le calcul sur la feuille pour le lundi, j'avais mis iv2 pour mardi etc...
    Je pense que c'est à ce niveau là que cela n'est pas correct.

    J'ai bien évidemment cherché sur le net mais en vain... je tente donc d'avoir auprès de vous un conseil ou un modèle d'une macro adaptée pour les autres jours de la semaine.
    J'espère ne pas avoir été trop long ni trop lourd ds les explications. N'hésitez pas si vous avez des questions mais je joins le fichier qui parlera de lui même.
    j'espère être sur le bon post, sinon n'hésitez pas à me réorienter
    Je vous remercie par avance pour votre aide.
    A bientôt

    Danny

    Copie de Classeur2.xls

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste à améliorer. Dans le module de la Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim txt(1 To 35) As New classe1, I As Byte
     
    Private Sub UserForm_Initialize()
     
        For I = 1 To 35
     
            Set txt(I).GroupeTxt = Controls("T" & I)
     
        Next I
     
    End Sub
    Dans le module de classe "Classe1"' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    Public WithEvents GroupeTxt As MSForms.TextBox
     
    Private Sub GroupeTxt_Change()
     
        Dim DebMatin As Date
        Dim FinMatin As Date
        Dim DebAprem As Date
        Dim FinAprem As Date
        Dim Lundi As Date
        Dim Mardi As Date
        Dim Mercredi As Date
        Dim Jeudi As Date
        Dim Vendredi As Date
        Dim Samedi As Date
        Dim Dimanche As Date
        Dim Total As Double
        Dim I As Integer
     
        For I = 5 To 35 Step 5
     
            'si la longueur du texte est égale à 5 pour tous
            If Len(user.Controls("T" & I - 4).Value) = 5 _
                And Len(user.Controls("T" & I - 3).Value) = 5 _
                And Len(user.Controls("T" & I - 2).Value) = 5 _
                And Len(user.Controls("T" & I - 1).Value) = 5 Then
     
                'converti en date
                DebMatin = CDate(user.Controls("T" & I - 4).Value)
                FinMatin = CDate(user.Controls("T" & I - 3).Value)
                DebAprem = CDate(user.Controls("T" & I - 2).Value)
                FinAprem = CDate(user.Controls("T" & I - 1).Value)
     
                'totalise en convertissant en double
                Total = CDbl(FinMatin - DebMatin + FinAprem - DebAprem)
     
                'affiche au format heures : minutes
                user.Controls("T" & I).Value = Application.WorksheetFunction.Text(Total, "hh:mm")
     
            End If
     
        Next I
     
        On Error Resume Next 'permet de totaliser ligne par ligne
     
        'idem, conversion en date
        Lundi = CDate(user.T5.Value)
        Mardi = CDate(user.T10.Value)
        Mercredi = CDate(user.T15.Value)
        Jeudi = CDate(user.T20.Value)
        Vendredi = CDate(user.T25.Value)
        Samedi = CDate(user.T30.Value)
        Dimanche = CDate(user.T35.Value)
     
        'puis en double
        Total = CDbl(Lundi + Mardi + Mercredi + Jeudi + Vendredi + Samedi + Dimanche)
     
        'au format heures : minutes au delà de 24 h
        user.TextBox40.Value = Application.WorksheetFunction.Text(Total, "[h]:mm")
     
     
     End Sub
     
    Private Sub GroupeTxt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
     
    End Sub
     
     
    Private Sub GroupeTxt_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     
        If KeyCode <> 8 Then 'suppression !
     
            If Len(GroupeTxt) = 2 Then GroupeTxt = GroupeTxt & ":"
            If Len(GroupeTxt) > 5 Then GroupeTxt = Left(GroupeTxt, 5)
     
        End If
     
    End Sub
    Attention, il faut améliorer le "masque de saisie" (je n'ai pas creusé) pour éviter les bugs
    Dans ta Form, paramètre les TabIndex comme il faut afin que les saisies son confortables.

  3. #3
    Membre averti
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Par défaut
    Bonjour Theze,

    je te remercie pour ton retour et ton travail
    Je viens d'essayer et cela marche du feu de dieux
    J'avais créé une textbox40 hier soir pour le total semaine et magie le résultat est apparu
    Je vais en effet améliorer le masque de saisie..., tu as raison
    je vais m'imprégner également de ce que tu as fait pour rajouter une colonne formation, un challenge !!
    Je te remercie encore pour tout
    Un excellent weekend
    Danny

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2015, 16h21
  2. [FASM] Créer une macro pour faire des chaînes explicites
    Par Forthman dans le forum Assembleur
    Réponses: 0
    Dernier message: 30/07/2014, 10h36
  3. [Framework] Configuration de spring pour faire des tests avec maven
    Par wsp_ape dans le forum Spring
    Réponses: 7
    Dernier message: 17/06/2011, 18h12
  4. Problème pour faire des box extensibles avec des images)
    Par dream_of_australia dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/11/2007, 11h58
  5. Qu'installer pour faire des diagrammes UML avec Eclipse
    Par sekaijin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 20/07/2007, 23h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo