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

Vue hybride

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

  2. #2
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour,

    Je pense que tu devrais regarder du coté des variables Array. (Clique sur moi)

    Les variables tableaux ont l'avantage de faire les calculs directement sur la mémoire, en plus de ne pas recalculer ta page Excel à chaque modification (Ce qui prend tu temps en réalité)

    Tu peux suivre le lien que j'ai indiqué plus haut, c'est un Excellent tutoriel sur les variables Array.

    Bonne chance
    Cdlt

  3. #3
    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
    Merci Nico,

    Est ce vraiment interessant dans mon cas, car je dois lire chaque cellule et et verifier s'il une diagonale. car j'y pensais bien mais je ne sais pas comment m'y prendre car le tableau fera peut être + de 365 colonnes et plus de 200 lignes. mais il devrait s'adpater au fur et mesure de la récolte d'information.

    MErci,
    wilfried

  4. #4
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Citation Envoyé par will-1981 Voir le message
    Le tableau fera peut être + de 365 colonnes et plus de 200 lignes. mais il devrait s'adpater au fur et mesure de la récolte d'information.
    Aucun soucis, il n'y a pas (de mémoire) de limite de taille de ce type lors de la création d'un tableau.
    Pour l'adapter, il vaut mieux que tu connaisse une de ses dimensions, tu pourras ajuster l'autre au fur et à mesure de tes calculs (C'est bien sur mieux si tu connais directement la taille du tableau).

    A vrai dire, je ne sais pas si ça vaut réellement le coup, je n'ai pas spécialement la réponse à ton problème, ce n'est qu'une piste que tu peux explorer

    Je te conseille vivement de lire le tutoriel dont j'ai mis le lien dans mon précédent post (>> Ce lien là <<)
    C'est un tutoriel de developpez.com, très clair, et qui m'as beaucoup aidé.

    Pour info, la réduction de temps de calcul est monstrueuse ! De mémoire, tu peux faire passer un temps d’exécution de 5min a 1s ~

    Voila, si tu as des questions, n'hésite pas,
    Cdlt

  5. #5
    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
    Merci pour tes explications,

    Tu penses que je devrais dabord charger toutes les données dans le tableau dynamique, faire ma tambouille, l'inscrire dans un autre tableau dynamique et restituer le résultat sur la feuille excel ?

    Merci,

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour,

    exemple dans cette discussion

+ 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, 15h08
  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, 17h55
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 11h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 20h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 13h19

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