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 :

Besoin de rapidité sur l'exécution de la macro [XL-2010]


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2008
    Messages : 87
    Par défaut Besoin de rapidité sur l'exécution de la macro
    Bonjour,

    J'ai créé une macro qui fonctionne bien. elle me permet de synthétiser le nombre de personne par activité et ceux ci par jour sur toute l'année.

    J'ai mis une demande de date de démarrage pour alléger le calcul et ce qu'il y a dans le passée par rapport à la date du jour nous intéresse peu mais ayant encore 5.5 mois à faire avant la fin 2014 ça fait beaucoup de calcul. En l’occurrence 2368 cellules à remplir soit d'un 0 soit du nombre de personne concernée. Car en tout j'ai 16 activités différentes et j'ai un planning de 280 personnes donc 280 lignes à analyser. (pour le moment)

    En clair, elle prend 1 mn pour 5.5 mois. Mais je voudrais ramener ça à quelques secondes. car la zone d'affectation des activités est régi par un _change.

    Vous avez une suggestion ?

    Merci pour votre aide,

    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
     
    Sub calculEFF()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Dim wsPP As Worksheet, Activite As String, Nbrediag As String, date_deb As Date
     
    Set wsPP = Sheets("Planning du personnel")
     
    With wsPP
    finlist = .Range("A1000").End(xlUp).Row
    fincol = .Range("XFD5").End(xlToLeft).Column
     
    date_deb = InputBox("Date ?", "Quelle sera la date de début du calcul", Date)
     
    'recherche de la premiere colonne de départ et de la colonne de fin
    c = 6
    For c = 6 To fincol
        If .Cells(4, c) = date_deb Then
            coldep = c
            Exit For
        End If
    Next
     
    'demarrage du calcul à la date donnée précédement
    i = 7
    e = 24
    Effectif1 = 0
    Effectif2 = 0
    Nbrediag = 0
    cpteur = 0
     
    cpteur = 0
    For c = coldep To fincol
        For i = 7 To 21
            'determination du nombre de personne suivant l'activté renseigné dans la colonne D
            Activite = .Cells(i, 4)
                For e = 24 To finlist
                   If .Cells(e, c).Borders(xlDiagonalUp).LineStyle = xlContinuous And .Cells(e, c).Value = Activite Then
                       Nbrediag = Nbrediag + 1
                   End If
                Next e
             'Compte le nombre de personne présente et déduit les 1/2 journée
                Effectif1 = WorksheetFunction.CountIf(.Columns(c), Activite)
                cpteur = cpteur + Effectif1
     
            'determination du nombre de personne suivant l'activté renseigné dans la colonne D si non vide
            If .Cells(i, 5) <> "" Then
                Activite = .Cells(i, 5)
                For e = 24 To finlist
                   If .Cells(e, c).Borders(xlDiagonalUp).LineStyle = xlContinuous And .Cells(e, c).Value = Activite Then
                       Nbrediag = Nbrediag + 1
                   End If
                Next e
                Effectif2 = WorksheetFunction.CountIf(.Columns(c), Activite)
                cpteur = cpteur + Effectif2
            End If
            'compte le nombre d'absent + les 1/2 journée
            If Activite = "Abs" Then
                valeur = WorksheetFunction.CountIf(.Columns(c), Activite) + Nbrediag / 2
            Else 'Compte le nombre de personne présente et déduit les 1/2 journées
                valeur = Effectif1 + Effectif2 - Nbrediag / 2
            End If
            If valeur <> Int(valeur) Then
                .Cells(i, c) = valeur
                .Cells(i, c).NumberFormat = "0.0"
            End If
     
            .Columns(c).EntireColumn.AutoFit
            Effectif1 = 0
            Effectif2 = 0
            Nbrediag = 0
            valeur = 0
        Next i
     
        'Nombre de personne non déterminer par des activités courantes hormis les samedis sans activité (PA)
        NbrePA = WorksheetFunction.CountIf(.Range(.Cells(25, c), .Cells(finlist, c)), "PA")
        valeur = WorksheetFunction.CountA(.Range(.Cells(25, c), .Cells(finlist, c))) - cpteur - NbrePA
        If valeur <> Int(valeur) Then
            .Cells(22, c) = valeur
            .Cells(22, c).NumberFormat = "0.0"
        End If
        valeur = 0
        cpteur = 0
        .Columns(c).EntireColumn.AutoFit
    Next c
     
    End With
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2007] Problème rencontré sur arrêt exécution d'1 macro en cours de fonctionnement
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/07/2012, 14h08
  2. vb.net : besoin d'explication sur l'exécution de NtBackup
    Par 1coni dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/05/2006, 16h55
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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