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 :

Mise en gras avec For each Cellule.Font.Italic lenteur ++ [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é
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut Mise en gras avec For each Cellule.Font.Italic lenteur ++
    Bonjour le fofo,

    Cette petite macro me permet la mise en gras de cellules selon certaines conditions.
    Elle fonctionne très rapidement avec peu de cellules mais devient vraiment lente quand le nombre de cellules augmente.
    Y a-t-il moyen d'optimiser ?

    Merci d'avance


    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
    Sub Mise_en_gras()
     
    Dim cellule_italique As Range
     
    For Each cellule_italique In Worksheets("Bilan").Range("A1:P400")
        If cellule_italique.Font.Italic = True And _
           cellule_italique.Value <= -1.5 Then _
           cellule_italique.Select
     
            With Selection
                Select Case True
                    Case IsNumeric(.Offset(0, -2))
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
                        .Offset(0, -2).Font.Bold = True
                    Case IsEmpty(.Offset(0, -2))
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
                    Case Else
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
                End Select
            End With
     
    Next

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par florent77 Voir le message
    Y a-t-il moyen d'optimiser ?
    Supprime cellule_italique.Select et remplace With Selection par With cellule_italique.

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Et aussi peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    en début de code et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    à la fin

    Voir:

    Application.ScreenUpdating

    (je nesais plus qui m'a donné le lien Application )

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut cas où ...
    Rebonjour,

    Merci à Mehnir et Marcel pour vos retours

    Avant d'essayer Application.ScreenUpdating, j'aurais encore besoin de vous :

    C'est ok pour le cas 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case IsNumeric(.Offset(0, -2))
       .Font.Bold = True
       .Offset(0, -1).Font.Bold = True
       .Offset(0, -2).Font.Bold = True
    ok pour le cas 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Case IsNumeric(.Offset(0, -2))
       .Font.Bold = True
       .Offset(0, -1).Font.Bold = True
       .Offset(0, -2).Font.Bold = True
    ok pour le cas 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Case Else
       .Font.Bold = True
       .Offset(0, -1).Font.Bold = Tru
    Je sèche pour le cas 4 :
    J'ai deux cellules en italique espacées d'une cellule et je ne veux pas que la cellule C4 se mette en gras puisque > -1.5
    En fait, le code du cas n°1 prend le dessus.
    En revanche, si C4 <= -1.5 elle doit se mettre en gras et B4 avec
    J'ai volontairement grisé les cellules qui doivent se mettre en gras pour plus de clarté.

    Auriez-vous une idée ?

    Nom : for each gras.jpg
Affichages : 286
Taille : 19,4 Ko

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    En fait, le code du cas n°1 prend le dessus
    C'est le principe de la méthode Select Case
    Les conditions cessent d'être vérifiées dès lors que l'une d'elles les précédant est vraie.

    Au demeurant.
    Ici, tu peux mettre 2 conditions dans le même cas
    D'autre part, un Select Case peut être inclus dans un cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Case.....
         Select Case 
             ......
         End Select
    Case....
    Le tout reste de bien construire son algorithme.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 133
    Par défaut
    Bonjour le forum,

    Salut Marcel et merciiii

    C'est ok pour les and dans le select case, je ne connaissais pas. Je pense avoir réuni tous les cas possibles pour ma base :

    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
    Sub italique()
     
    Dim cellule_italique As Range
     
    For Each cellule_italique In Range("B1:E4")
     
                If IsNumeric(cellule_italique) _
                     And cellule_italique.Font.Italic = True _
                     And cellule_italique.Value <= -1.5 Then
     
                With cellule_italique
     
                Select Case True
                    Case IsNumeric(.Offset(0, -1)) And IsNumeric(.Offset(0, -2)) And Not .Offset(0, -2).Font.Italic
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
                        .Offset(0, -2).Font.Bold = True
     
                    Case IsNumeric(.Offset(0, -1)) And IsEmpty(.Offset(0, -2))
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
     
                    Case IsNumeric(.Offset(0, -1)) And Not (IsNumeric(.Offset(0, -2)))
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
     
                    Case IsNumeric(.Offset(0, -1)) And .Offset(0, -2).Font.Italic
                        .Font.Bold = True
                        .Offset(0, -1).Font.Bold = True
                End Select
            End With
        End If
     
    Next
     
    End Sub
    Je vais le tester dans ma base et je reviens vous dire niveau vitesse de traitement.

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

Discussions similaires

  1. [Toutes versions] Références de cellules avec for each
    Par brubel dans le forum Excel
    Réponses: 2
    Dernier message: 09/02/2016, 00h35
  2. [XSLT]problème avec for-each incompréhensible
    Par trotters213 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/02/2006, 10h31
  3. [XML][XSLT] Débutant {Probléme avec For-each-group}
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/01/2006, 21h38
  4. [VB]Probleme avec for each .....
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/01/2006, 08h31
  5. [VB.NET] Problème avec For Each...
    Par cyrcroix dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/06/2005, 10h49

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