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 :

Majoration en fonction des heures [Toutes versions]


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
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Par défaut Majoration en fonction des heures
    Bonjour,

    Je suis en train de créer une macro Excel mais je bloque sur un problème: j'ai 4 colonnes, une avec les heures de début, l'autre avec les heures de fin, une avec la durée (entre ces 2 horaires) et enfin une avec les jour. J'aimerai faire des tarifs majorés en fonction de ces colonnes donc jusque là ça va, avec quelques if on s'en sort mais j'ai un soucis. Prenons un exemple, on est samedi, l'heure de début indique 18h, l'heure de fin indique 22h30 et la durée 4h30 et imaginons maintenant que entre 18h à 19h ce soit non majoré, entre 19h et 21h30 majoré de 25% et de 21h30 à 22h30 majoré de 50%, comment je peux faire ? Je n'arrive pas à trouver de solution si quelqu'un à une piste je suis preneur !

    Merci d'avance !

    Edit: Voici le tableau des majorations à appliquer si ça peut-être utile

    Nom : Capture.PNG
Affichages : 488
Taille : 8,4 Ko

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Par défaut
    J'ai entendu parler du select case, ça peut marcher ?

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Citation Envoyé par Shaplow Voir le message
    J'ai entendu parler du select case, ça peut marcher ?
    Pourquoi pas !
    Ce n'est qu'une autre façon d'écrire If Then

    Pour ma part, je me passerais du VBA, Excel est avant tout un outil de calcul parfaitement adapté à ce genre de problème relativement simple.
    Par contre j'utiliserais tableau plus facile à exploiter, par exemple :
    Nom : Tbl.jpg
Affichages : 409
Taille : 23,1 Ko

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Par défaut
    Salut, merci de ta réponse !

    En gros je suis en stage en entreprise et les employés recoivent un fichier excel un peu barbare d'un logiciel et le but derrière c'est qu'ils lancent la macro et tous les calculs se font automatiquement ainsi que l'organisation des différents tableaux, du coup comment ne pas utiliser VBA mais automatiser la chose quand même haha ?

    Merci pour le tableau, j'avais fait l'autre à l'arrache pour expliquer, je me doutais bien que j'aurai galéré sous cette forme !

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Bonjour,
    Si le fichier à traiter viens effectivement d'une extraction d'un logiciel, une macro VBA semble être une meilleure idée que de réécrire les fonctions "à la mano" à chaque extraction.
    Pourrais-tu envoyer une copie de ton fichier ?

    Mickamax

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Par défaut
    Citation Envoyé par Mickamax Voir le message
    Bonjour,
    Si le fichier à traiter viens effectivement d'une extraction d'un logiciel, une macro VBA semble être une meilleure idée que de réécrire les fonctions "à la mano" à chaque extraction.
    Pourrais-tu envoyer une copie de ton fichier ?

    Mickamax

    Salut, merci de ton aide !

    Oui biensûr, est-ce que le code te suffit ? Il y a des informations confidentielles dans le fichier mais si jamais tu en as réellement besoin je peux les enlever et t'envoyer ça demain

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    Sub GESTION_TEMPS()
    '
    ' GESTION_TEMPS Macro
    '
    ' Touche de raccourci du clavier: Ctrl+h
     
    '
        '
        ' Déclaration des variables
        '
     
        Dim plage As Range, reg As Range, firstAdd As String, cel As Range
     
        '
        ' Défusion des cellules
        '
     
        Cells.Select
        With Selection
            .VerticalAlignment = xlBottom
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
     
        '
        ' Separer les différents tableaux avec la position
        '
     
        Set plage = Worksheets("export").Cells
        Set reg = plage.Find(What:="Sem n°")
     
     
        If Not reg Is Nothing Then
            firstAdd = reg.Address
            Do
                reg.CurrentRegion.Copy
                Sheets.Add After:=ActiveSheet
                ActiveSheet.Paste
                Set reg = plage.FindNext(reg)
            Loop While Not reg Is Nothing And reg.Address <> firstAdd
        End If
     
     
        '
        ' Réorganisation des tableaux
        '
     
        Dim sh As Worksheet
        For Each sh In ActiveWorkbook.Sheets
        sh.Activate
        If sh.Name <> "export" Then
     
            'Changement des noms des feuilles
            sh.Name = Right(ActiveSheet.Range("A1").Value, Len(ActiveSheet.Range("A1").Value) - InStr(ActiveSheet.Range("A1").Value, ":"))
            Columns("H:H").Select
            'Réorga
            Selection.Delete Shift:=xlToLeft
            Selection.Delete Shift:=xlToLeft
            'Début: Mise en place des horaires
            Columns("E:E").Select
            Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
            Columns("D:D").Select
            Application.DisplayAlerts = False
            Selection.TextToColumns Destination:=Range("D1"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(7, 1)), TrailingMinusNumbers:= _
            True
            Application.DisplayAlerts = True
            Columns("E:E").Select
            Selection.Delete Shift:=xlToLeft
            Range("D2").Select
            ActiveCell.FormulaR1C1 = "Horaires début"
            Range("E2").Select
            ActiveCell.FormulaR1C1 = "Horaires fin"
            'Mise en place sous-totaux
            For Each cel In Range("A3", Range("A3").End(xlDown))
                If cel.Value <> cel.Offset(1, 0).Value And cel.Value <> "" And cel.Value <> "Sous-total:" Then 'Ajouter ici toutes les values des cellules de la colonne A pour ne pas faire buguer
                    cel.Select
                    Selection.Offset(1).EntireRow.Insert
                    Selection.Offset(1).Value = "Sous-total:"
                    Selection.Offset(1).Font.Bold = True
                    'Selection.Offset(1, 3).FormulaLocal = "=SOUS.TOTAL(9)" https://www.generation-nt .com/reponses/sous-total-vba-entraide-482931.html
                    With Selection.Offset(1).Resize(1, 12).Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .ThemeColor = xlThemeColorDark2
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
                End If
            Next cel
     
     
     
            ' Pour la majoration regarder le select case
     
     
        End If
        Next sh
     
    End Sub
    Edit: J'ai un photo d'un des tableaux que le logiciel m'envoie de base, il y en a pleins sur une page mais je les ai séparer dans différentes feuilles pour les réorganiser

    Nom : Capture.PNG
Affichages : 402
Taille : 44,0 Ko

    Edit 2: En fait je crains que tout ceci ne serve à rien puisque j'ai même pas commencé à coder les majorations vu que je ne sais même pas comment démarrer

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,

    Je répète :
    Citation Envoyé par Patrice740 Voir le message
    ...Excel est avant tout un outil de calcul parfaitement adapté à ce genre de problème relativement simple.
    D'autre part, il est plus facile d'appendre à utiliser Excel que d'apprendre la programmation.

    L'inconvénient MAJEUR étant que, ton stage terminé, personne ne seras en mesure de maintenir ton code en état de fonctionnement et ton "outil" tombera très rapidement en désuétude !!!

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 19
    Par défaut
    J'entends bien tes arguments mais moi mon but c'est d'apprendre la programmation, alors certes je suis pas du tout à l'aise avec VBA je connais ce langage que depuis quelques jours du coup je nage un peu parce que c'est différent de ce qu'on a vu mais je m'adapte. Ensuite j'ai pris les précautions pour que justement mon code reste fonctionnel le plus longtemps possible ! Le fichier que sort le logiciel a des bases qui restent toujours pareil donc j'ai fait en sorte d'utiliser ces bases pour mon programme comme ça il fonctionnera le plus longtemps possible et au final même si il marche pas très longtemps c'est pas grave j'aurai acquis de l'expérience !

    Du coup merci de ton aide, mais là tu contournes mon problème alors que moi je cherche une solution haha

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/03/2018, 13h00
  2. [XL-2010] Comment trouver le résultat d'une textbox en % en fonction des heures ?
    Par TSAFACK-M dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/08/2016, 18h00
  3. Fonction de comptage des heures
    Par leara500 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/11/2012, 10h16
  4. Réponses: 7
    Dernier message: 19/10/2011, 16h09
  5. [PHP 5.3] fonction date - afficher des heures au délas de 24H
    Par Michel Rotta dans le forum Langage
    Réponses: 9
    Dernier message: 04/05/2011, 10h13

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