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 :

Répartition selon critère


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut Répartition selon critère
    bonjour tous le monde et merci à vous tous
    j'ai liste de personnel classé de 1 à 13 - 14A - 14B-15A-15B puis 16 à 19 et je veux attribuer à chacun d'eux une prime en fonction de sa catégorie . j'arrive à faire ça comme suit :
    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
    i = Sheets("Augmentation année 2016").Range("A" & Rows.Count).End(xlUp).Row
    'Affectation Augmentation 50 DT
    Liste50 = Array("1", "2", "3", "4", "5", "6", "7")
        For i = 2 To i
        If IsNumeric(Application.Match(CStr(Sheets("Augmentation année 2016").Range("F" & i)), Liste50, 0)) Then Sheets("Augmentation année 2016").Range("L" & i) = 50
    Next i
     
    'Affectation Augmentation 55 DT
    Liste55 = Array("8", "9", "10", "11", "12", "13", "14A", "14B")
        For i = 2 To i
        If IsNumeric(Application.Match(CStr(Sheets("Augmentation année 2016").Range("F" & i)), Liste55, 0)) Then Sheets("Augmentation année 2016").Range("L" & i) = 55
    Next i
     
    'Affectation Augmentation 60 DT
    Liste60 = Array("15A", "15B", "16", "17", "18", "19")
        For i = 2 To i
        If IsNumeric(Application.Match(CStr(Sheets("Augmentation année 2016").Range("F" & i)), Liste60, 0)) Then Sheets("Augmentation année 2016").Range("L" & i) = 60
    Next i
    je cherche
    * si c'est possible améliorer ce code
    * Maintenant à chaque fois que je veux changer les montants (exemple 20 / 30 /40 au mieu de 50/55/60 ou la facon de répartir je dois entrer et changer le code
    est il possible de faire ça via des textbox ou listbox ou listview ??
    Merci et bonne et heureuse journée à tous
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bonjour à toi,

    Pour l'amelioration du code je te propose ceci :
    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
        Dim classesPerso
        Dim classe
        Dim augmentation
        classesPerso = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14A", "14B", "15A", "15B", "16", "17", "18", "19")
        augmentation = Array(50, 55, 60)
     
        For Each classe In classesPerso
            Select Case classe
                Case "1", "2", "3", "4", "5", "6", "7"
                    Debug.Print "classe1"
                    Debug.Print augmentation(0)
                Case "8", "9", "10", "11", "12", "13", "14A", "14B"
                    Debug.Print "classe2"
                    Debug.Print augmentation(1)
                Case "15A", "15B", "16", "17", "18", "19"
                    Debug.Print "classe3"
                    Debug.Print augmentation(2)
            End Select
        Next
    Il te reste à remettre le code pour écrire dans tes cellules qui vont bien

    Après si tu veux modifier les valeur d'augmentation directement, sil faut soit faire un UserForm, soit tu créé des plages nommées et tu les utilises dans ta fonction.
    Du style une cellule nommée PClasse1, PClasse2, PClasse3 :
    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
        Dim classesPerso
        Dim classe
        Dim augmentation
        classesPerso = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14A", "14B", "15A", "15B", "16", "17", "18", "19")
        augmentation = Array(50, 55, 60)
     
        For Each classe In classesPerso
            Select Case classe
                Case "1", "2", "3", "4", "5", "6", "7"
                    Debug.Print "classe1"
                    Debug.Print Range("PClasse1").Value
                Case "8", "9", "10", "11", "12", "13", "14A", "14B"
                    Debug.Print "classe2"
                    Debug.Print Range("PClasse2").Value
                Case "15A", "15B", "16", "17", "18", "19"
                    Debug.Print "classe3"
                    Debug.Print Range("PClasse3").Value
            End Select
        Next
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 914
    Points : 5 121
    Points
    5 121
    Par défaut
    merci beaucoup de cette réponse rapide...

    svp j'ai pas arriver à adapter ton code
    que dois je ajouter pour renseigner la colonne L?? (chui trop limité en VBA)
    merci encore
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

Discussions similaires

  1. [XL-2007] Répartition de Commande selon critères
    Par Loupire dans le forum Excel
    Réponses: 2
    Dernier message: 09/07/2010, 09h54
  2. affichage des champs selon critère dans un formulaire
    Par emmablue dans le forum Access
    Réponses: 5
    Dernier message: 31/07/2006, 09h39
  3. Eclater une colonne en plusieurs selon critère
    Par Tatoine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/07/2006, 11h19
  4. Réponses: 5
    Dernier message: 03/07/2006, 16h39
  5. Réponses: 7
    Dernier message: 29/06/2006, 11h11

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