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 :

Optimiser une macro [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Météorologiste
    Inscrit en
    Octobre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Météorologiste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 60
    Points : 59
    Points
    59
    Par défaut Optimiser une macro
    Bonjour,

    A peine partie, je suis déjà revenue !

    Je cherche à optimiser la macro ci-dessous pour que son temps d'exécution soit moins long, pouvez-vous m'aider ?

    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
     
    Option Explicit
     
    Public TabDonnees() As Variant
     
    Sub SauvDonnees()
    'Début du chrono
        Dim vchrono As Double
        vchrono = Now()
     
    'Désactive la mise à jour de l'affichage
        Application.ScreenUpdating = False
    'Désactive la mise à jour des recalculs
        Application.Calculation = xlCalculationManual
     
    'Déclaration des variables
        Dim plage As Range, cellule As Range
        Dim nbCells As Long
        Dim i As Integer, j As Integer
        Dim total As Double
     
    'Initialisation des variables
        Call TableauOPS
        Erase TabDonnees
        Set plage = Feuil5.Range("POSITION")
        nbCells = plage.Rows.Count * plage.Columns.Count
        ReDim TabDonnees(nbCells - 1, 7)
     
        For Each cellule In plage
            For i = LBound(TabDonnees, 1) To UBound(TabDonnees, 1)
                TabDonnees(i, 0) = Feuil5.Range("Jour").text 'Date
                TabDonnees(i, 1) = Feuil5.Cells(cellule.Row, Feuil5.Range("Horaire").Column).Value 'Position du personnel
                TabDonnees(i, 2) = cellule.Value 'Nom du personnel
                TabDonnees(i, 3) = Feuil2.Cells(TabTGR.Cells.Find(cellule.Value, LookIn:=xlValues).Row, TabQUALIF.Column) 'Qualification
                TabDonnees(i, 4) = Feuil5.Cells(Feuil5.Range("Ouv").Row, cellule.Column).Value 'Debut
                TabDonnees(i, 5) = Feuil5.Cells(Feuil5.Range("Ferm").Row, cellule.Column).Value 'Fin
                total = Feuil5.Cells(Feuil5.Range("Ferm").Row, cellule.Column).Value - Feuil5.Cells(Feuil5.Range("Ferm").Row, cellule.Column).Value
                TabDonnees(i, 6) = total 'Total
            Next i
        Next cellule
     
    'Ré-activations
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
     
    'Fin du chrono
        vchrono = Now() - vchrono
        MsgBox Format(vchrono, "h:mm:ss")
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Quelque chose n'est pas logique avec les 2 boucles.

    Expliquez ce que le code est censé faire.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Femme Profil pro
    Météorologiste
    Inscrit en
    Octobre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Météorologiste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Le code parcours une plage de cellule et pour chaque cellule de cette plage, il récupère diverses informations qu'il sauvegarde dans la variable tableau TabDonnées.

  4. #4
    Membre du Club
    Femme Profil pro
    Météorologiste
    Inscrit en
    Octobre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Météorologiste
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    C'est bon, j'ai résolu mon problème, en supprimant la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = LBound(TabDonnees, 1) To UBound(TabDonnees, 1)
    Mon code fonctionne et est en plus très rapide

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

Discussions similaires

  1. [XL-2003] Optimiser une macro
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 26/03/2013, 14h59
  2. Optimiser une macro
    Par foxrol dans le forum Macro
    Réponses: 5
    Dernier message: 01/03/2012, 17h24
  3. [XL-2003] Optimiser une macro VBA
    Par momo93240 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2011, 16h46
  4. [XL-2003] Optimiser une macro de mise en forme d'un Tableau
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2009, 12h19
  5. Optimiser une macro
    Par PiliSql dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/05/2008, 20h18

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