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 :

Optimisation du VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Par défaut Optimisation du VBA
    A tous, bonsoir du Québec
    Premierement merci a toute la communauté de Developpez. Depuis peu je travaille sur un projet et vos post m'ont permis de progresser avec assurance. Prenez pour acquis que je ne connaissais absolument rien du VBA voila 3 semaines... Que de chemin parcouru.

    Ceci dit, voici mon probleme: J'ai le code suivant que je dois répeter 16 fois dans ma page ( en changeant les references bien sûr). En fait je récupere la valeur de cellules différentes en lui attribuant une valeur de 1 a 3. En fait la valeur de la cellule ''x'' ne change pas tandis que la valeur de la cellule "z" change. Je sais pas mal bizarre, mais c'est la seule facon que j'ai trouvé de faire fonctionner tout ça..
    Est-il possible de simplifier ce code car ma page se rafraichit pas mal trop longtemps a mon gout en scintillant 8 a 10 secondes pendant l'éxécution de ce vba... J'ai tenter d'imbriquer les If mais ca foire...

    Merci pour les réponses

    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
     
    If Sheets("pg").Range("x59").Value = 1 And Sheets("pg").Range("z56") = 1 Then
    Worksheets("pg").Range("am56").Value = 2
    Else
    Worksheets("pg").Range("am56").Value = 0
    End If
    If Sheets("pg").Range("x59").Value = 1 And Sheets("pg").Range("z57") = 1 Then
    Worksheets("pg").Range("an56").Value = 2
    Else
    Worksheets("pg").Range("an56").Value = 0
    End If
    If Sheets("pg").Range("x59").Value = 1 And Sheets("pg").Range("z58") = 1 Then
    Worksheets("pg").Range("ao56").Value = 3
    Else
    Worksheets("pg").Range("ao56").Value = 0
    End If
    If Sheets("pg").Range("x59").Value = 1 And Sheets("pg").Range("z59") = 1 Then
    Worksheets("pg").Range("ap56").Value = 3
    Else
    Worksheets("pg").Range("ap56").Value = 0
    End If

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a bien sûr moyen de simplifier le code par exemple en travaillant avec une boucle mais cela ne changera rien à ton problème de "scintillement".
    Pour cela, il suffit de faire précéder le code par l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.ScreenUpdating = False
    et en fin de procédure tu remets la propriéié du ScreenUpdating à True. Ce n'est pas obligatoire mais c'est plus propre.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éprouvé
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 46
    Par défaut
    Bonjour,

    Avec la réponse de Philippe, on supprime le scintillement et on a toujours le même temps d'exécution que la zone modifiée soit visible ou non.
    Si on veut optimiser le traitement, il faut passer par une copie en mémoire et regrouper de ce fait le accès aux cellules. Par exemple avec :

    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
     
      Dim reference          As Integer
      Dim index_entree      As Integer
      Dim tableau_entree() As Variant
      Dim tableau_sortie()  As Variant
     
      Application.ScreenUpdating = False
     
       With Sheets("pg")
        reference = .Range("x59").Value
        tableau_entree = .Range("z56:z59").Value
        ReDim tableau_sortie(LBound(tableau_entree) To UBound(tableau_entree))
     
          reference = .Range("x59").Value
          tableau_entree = .Range("z56:z59").Value
          ReDim tableau_sortie(LBound(tableau_entree) To UBound(tableau_entree))
     
          index_entree = LBound(tableau_entree)
     
          If reference = 1 And tableau_entree(index_entree, 1) = 1 Then
            tableau_sortie(index_entree) = 2
          Else
            tableau_sortie(index_entree) = 0
          End If
          If reference = 1 And tableau_entree(index_entree + 1, 1) = 1 Then
            tableau_sortie(index_entree + 1) = 2
          Else
            tableau_sortie(index_entree + 1) = 0
          End If
          If reference = 1 And tableau_entree(index_entree + 2, 1) = 1 Then
            tableau_sortie(index_entree + 2) = 3
          Else
            tableau_sortie(index_entree + 2) = 0
          End If
          If reference = 1 And tableau_entree(index_entree + 3, 1) = 1 Then
            tableau_sortie(index_entree + 3) = 3
          Else
            tableau_sortie(index_entree + 3) = 0
          End If
           .Range("am56:ap56").Value = tableau_sortie
        End With
     
     End With
     
       Application.ScreenUpdating = True
    C'est plus rapide mais c'est surement moins lisible.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Par défaut
    ouchh... ReDim, LBound, Ubound... je vais être obligé de me défragmenter pour bien absorber tout ça.. lol

    Merci pour le screenupdating. Je comprends maintenant qu'il me faut utiliser des variables dans mon VBA. Implacable logique... j'essai vos astuces assuréments..

Discussions similaires

  1. [XL-2003] Simplification / Optimisation programme VBA
    Par Clementitho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/07/2014, 13h55
  2. Optimisation traitement vba
    Par ninette24 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 01/10/2013, 09h41
  3. Optimisation code VBA Blocs With
    Par Ariaar dans le forum Général VBA
    Réponses: 0
    Dernier message: 13/12/2012, 17h15
  4. [AC-2000] Optimisation de VBA pour la recherche de valeurs dans une table
    Par Tydher dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/07/2011, 09h17
  5. Optimiser code VBA
    Par willytito dans le forum VBA Access
    Réponses: 5
    Dernier message: 19/11/2007, 09h49

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