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 :

Macro vba erronée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur interne
    Inscrit en
    Juillet 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur interne

    Informations forums :
    Inscription : Juillet 2020
    Messages : 16
    Par défaut Macro vba erronée
    Bonjour A tous,

    La macro Ecxel suivante bugue

    l'outil de débogage surligne cette partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    , colors As Scripting.Dictionary
    Code complet :

    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
    Sub TEST()
    Dim rg As Range, cl As Range, colors As Scripting.Dictionary, col As Long, maxnb As Long, colmax As Long, koul
    Set rg = Range("c5:l5")
    Set colors = New Scripting.Dictionary
    For Each cl In rg
        col = cl.Interior.Color
        Select Case col
            Case vbWhite, 8421504:
            Case Else:
                If colors.Exists(col) Then
                    colors(col) = colors(col) + 1
                Else
                    Call colors.Add(col, 1)
                End If
     
        End Select
    Next cl
    colmax = 0
    maxnb = 0
    For Each koul In colors.keys
        If colors(koul) > maxnb Then
            maxnb = colors(koul)
            colmax = koul
        End If
    Next koul
    Sheets("Synthèse résultats ctrl période").Range("M5").Interior.Color = colmax
    End Sub
    N'ayant aucune notion de VBA quelqu'un peut-il corriger ce code :-)

    L'objectif de la macro est de remplir la cellule M5 de la couleur la plus présente dans les cellules C5:L5.

    Exemple :

    Exemple : si la cellule C est remplie en vert, la cellule D est remplie en vert, la cellule E est remplie en vert, la cellule F est remplie en vert, la cellule G est remplie en jaune, la cellule H est remplie en jaune, la celluleI est remplie en violet, la cellule J est remplie en rouge, la cellule K est remplie en vert et la cellule L est remplie en marron la cellule M doit être remplie en vert puisqu'il y a 5 cases vertes, 2 jaunes 1 violette et 1 rouge et 1 marron.

    Enfin si aucune couleur n'a la majorité ---> laisser la case vide pour que je puisse remplir la cellule après analyse.

    Merci par avance pour votre aide.

    Cordialement.

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    C'est pas un bug, c'est un manque.
    Pour que le compilateur comprenne ce code, il faut établir une référence à Microsoft Scripting Runtime :
    Dans le VBE :Outils /Reférences .../Cocher la case correspondante

  3. #3
    Membre averti
    Femme Profil pro
    Contrôleur interne
    Inscrit en
    Juillet 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur interne

    Informations forums :
    Inscription : Juillet 2020
    Messages : 16
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Bonjour,

    C'est pas un bug, c'est un manque.
    Pour que le compilateur comprenne ce code, il faut établir une référence à Microsoft Scripting Runtime :
    Dans le VBE :Outils /Reférences .../Cocher la case correspondante
    Bonjour,

    Merci pour ton aide :-)

    Le résultat de mon code ressort "erroné" : seul le remplissage de la cellules H5 a été pris en compte et pas celui des autres cellules C5:G5 et J5:L5 . Je pense que c'est lié aux codes couleurs repris dans les macros mais je n'en suis pas sûre

    exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Range("D5").Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "='Fiche de contrôle'!$D$183=""PARTIELLEMENT RECUPERE"""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = -0.249946592608417 'Couleur orange
        End With
    Si mon analyse est juste, peux-tu me montrer comment modifier ces codes couleurs ; j'ai essayé ceci pour la couleur grise mais les cases se sont remplies en noir donc j'ai certainement fait une erreur

    Code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "='Fiche de contrôle'!$D$262="""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.349986266670736

    Code après mon test
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "='Fiche de contrôle'!$D$262="""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 48
            .TintAndShade = 0
    Enfin dernière question, le code initial prend en compte les cellules remplies en gris peux tu me le modifier pour quil les exclut du résultat.

    J'ai besoin dans la cellule M5 d'un résultat brut avec prise en compte de toutes les couleurs.

    Et dans la cellule N5 d'un résultat net qui exclut la couleur grise.

    Je remets le code initial ci après :

    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
    Sub TEST()
    Dim rg As Range, cl As Range, colors As Scripting.Dictionary, col As Long, maxnb As Long, colmax As Long, koul
    Set rg = Range("C5:L5")
    Set colors = New Scripting.Dictionary
    For Each cl In rg
        col = cl.Interior.Color
        Select Case col
            Case vbWhite, 8421504:
            Case Else:
                If colors.Exists(col) Then
                    colors(col) = colors(col) + 1
                Else
                    Call colors.Add(col, 1)
                End If
     
        End Select
    Next cl
    colmax = 0
    maxnb = 0
    For Each koul In colors.keys
        If colors(koul) > maxnb Then
            maxnb = colors(koul)
            colmax = koul
        End If
    Next koul
    Sheets("Synthèse résultats ctrl période").Range("M5").Interior.Color = colmax
    End Sub
    Merci par avance pour tes explications :-)

    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Ceci:
    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
    Sub TEST()
        Dim rg As Range, cl As Range, colors As Object, col As Long, maxnb As Long, colmax As Long, koul
        Set rg = Range("c5:l5")
        Set colors = CreateObject("Scripting.Dictionary")
        For Each cl In rg
            col = cl.Interior.Color
            Select Case col
                Case vbWhite, 8421504:
                Case Else:
                    If colors.Exists(col) Then
                        colors(col) = colors(col) + 1
                    Else
                        Call colors.Add(col, 1)
                    End If
     
            End Select
        Next cl
        colmax = 0
        maxnb = 0
        For Each koul In colors.keys
            If colors(koul) > maxnb Then
                maxnb = colors(koul)
                colmax = koul
            End If
        Next koul
        Sheets("Synthèse résultats ctrl période").Range("M5").Interior.Color = colmax
    End Sub

    Cdlt

  5. #5
    Membre averti
    Femme Profil pro
    Contrôleur interne
    Inscrit en
    Juillet 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Contrôleur interne

    Informations forums :
    Inscription : Juillet 2020
    Messages : 16
    Par défaut
    Bonjour,

    Merci pour ta réponse :-)

    Je viens de tester le code et j'ai toujours le même souci seul le résultat de la case H5 est pris en compte. Comme je l'indiquais plus avant il semble que ça soit lié aux codes couleurs utilisés dans mes autres macros.

    Étant totalement novice en vba je n'ai pas réussi à modifier correctement ces codes couleurs puisque le remplissage de la case est passé de gris à noir or je souhaite bien du gris.

    Code initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "='Fiche de contrôle'!$D$262="""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.349986266670736 '= gris dans ma macro
    Code modifié avec erreur visiblement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "='Fiche de contrôle'!$D$262="""""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .Color = 48
            .TintAndShade = 0
    Peux tu corriger ce code pour que je puisse modifier correctement l'ensemble des macros?

    Et me donner les codes pour les couleurs verte orange rouge.

    Merci par avance pour ton aide.

    Cordialement

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Je viens de tester le code et j'ai toujours le même souci seul le résultat de la case H5 est pris en compte.
    Je ne comprends pas, voici un fichier exemple reprenant votre code, testez-le:
    Pièce jointe 575838

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

Discussions similaires

  1. Probleme d'enregistrement sur Macro/VBA de Excel
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/11/2005, 17h23
  2. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47
  3. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  4. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46
  5. [SQL][MACRO VBA]Pb de syntaxe
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2004, 09h11

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