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 :

Automatisation mise en couleurs cellules en conditionnel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut Automatisation mise en couleurs cellules en conditionnel
    Bonjour à tous !..
    Retraité depuis 17 ans, je reviens sur cet excellent site sur lequel j'ai, pendant mes années d'activité, sollicité les spécialistes presque exclusivement sur ACCESS.
    Je n'ai toujours pas fait évoluer Microsoft Office et j'en suis toujours à la version 2003 . (J'ai quelques difficultés avec le ruban d'Office)
    Maintenant, j'en suis au stade de développement pour mes enfants et je bloque sur une automatisation dans un tableau.

    Ce tableau est un calendrier qui devrait permettre à ma fille de suivre ses congés.
    Selon la valeur entrée dans la cellule D4, la cellule contigüe E4 doit prendre la couleur programmée (dans mon exemple, si la cellule D5 = "CPA"; la cellule E5 prend la couleur rouge !. Il faut également que l'on saisisse absolument une valeur dans la cellule coloriée.

    Je bloque donc sur le fait d'automatiser cette procédure. J'avais imaginé, avec le but d'éviter la recopie des formules, attribuer un nom sur les zones mensuelles D434;I4:I34;etc... mais je ne vois pas comment procéder pour programmer cela avec un nom !

    Avez-vous une solution SVP.
    Je vous remercie à l'avance.
    Cordialement.

    Nom : automatisation.jpg
Affichages : 122
Taille : 54,8 Ko

  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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La solution avec une mise en forme conditionnelle mais sauf erreur de ma part, la version 2003 d'excel était limitée à trois règles donc s'il faut plus de trois couleurs en fonction des valeurs en $D4:$D34, il faudra passer par du VBA

    Je n'ai toujours pas fait évoluer Microsoft Office et j'en suis toujours à la version 2003 . (J'ai quelques difficultés avec le ruban d'Office)
    C'est une question d'habitude et à partir du moment où on sait comment personnaliser sa barre d'outils d'accès rapide, c'est un jeu d'enfant
    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 éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Merci Philippe pour la réponse rapide !..

    Oui !.. J'avais bien cerné le problème et il était dans mes intentions de réaliser ce travail en VBA.
    J'ai beaucoup réfléchi mais je ne sais pas par quel bout le prendre.

    J'ai bien trouvé un morceau de code mais c'est l'automatisation pour tout le calendrier qui me pose problème !

    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
    Sub Filter_set()
        Dim LOC As String
     
         LOC = Range("D5").Value
        With Range("E5")
        Debug.Print LOC
     
            Select Case LOC
                Case "CPA"
     
                  .Interior.Color = 255
                Case "RTT"
                  .Interior.Color = 42
                Case "REC"
                   .Interior.Color = 40
            End Select
        End With
     
    End Sub


    Encore merci.

    Cordialement.

  4. #4
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'utiliserais la procédure événementielle "Worksheet_Change" de la feuille

    J'ai au préalable nommé la plage devant contenir les données Area2Color soit dans mon illustration $D$3:$D$9
    Dans le module de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Range("Area2Color"), Target) Is Nothing And Target.Count = 1 Then
       ColorRange Target
      End If
    End Sub
    Dans un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ColorRange(oRange As Range)
      Dim r As Range
      Dim c As Long
      Set r = oRange.Offset(ColumnOffset:=-1)
      Select Case r
        Case "BE": c = vbRed
        Case "LU": c = vbYellow
        Case "FR": c = vbBlue
        Case Else: c = xlNone: MsgBox "Cas non prévu"
      End Select
      oRange.Interior.Color = c
    End Sub

    Illustration


    Nom : 250219 Mfc.png
Affichages : 99
Taille : 15,9 Ko
    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

  5. #5
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Merci beaucoup !..

    Toutefois, je vois que le temps a fait son oeuvre et que j'ai perdu beaucoup de notions.

    Par rapport au deux codes reçus, quelle est la mise en oeuvre exactement ?
    J'ai bien attribué un nom à la zone, mais ensuite ...Comment lancer chronologiquement ces 2 procédures et de quelle façon?
    J'ai encore des notions d'ACCESS mais EXCEL c'est plus difficile pour moi.
    Merci à l'avance

  6. #6
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La procédure événementielle intercepte le changement dans une cellule de la feuille
    Comme on ne veut traiter que l'une des cellules de la plage nommée Area2Color soit dans mon exemple $D$3:$D$9 on va donc le vérifier à l'aide de l'instruction If Not Intersect(Range("Area2Color"), Target) Is Nothing And Target.Count = 1 Then si le test renvoi True on invoque la procédure nommée ColorRange qui se trouve dans un module standard qui se charge de mettre en couleur suivant la valeur se trouvant dans la colonne qui précède celle où la modification à eu lieu soit C5 si la modification a eu lieu en D5
    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

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 191
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Peut-être remplacer cellule par cellule.Value pour préciser qu'on lit le contenu de la cellule

    sinon, dans le code fourni (mais peut-être soucis de copier-coller) il n'y a pas de ligne With, mais un End With à la fin
    et sans With, le .Offset ne marchera pas

  8. #8
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour information, vous pouvez donner le même nom à vos plages de cellules si vous limitez la portée à la feuille. Cela vous évitera cette succession de contrôles par rapport au nom de la feuille.
    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

  9. #9
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    OK !..J'ai gambadé malheueusement pendant 1 journée !..
    J'imaginais que je ne pouvais attribuer le même nom d'une feuille sur une autre.
    Merci beaucoup!
    Cordialement

  10. #10
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 191
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Pour cela il faut absolument que
    Worksheet_Change soit placée dans le code de la feuille concernée
    ColorRange soit placée dans un Module

    sinon ça ne fonctionnera pas
    Double-clic sur la feuille dans l'explorateur de projet pour voir le code de la feuille
    Double-clic sur le module dans l'explorateur de projet pour voir le code du module

    puis il suffira de modifier la valeur d'une cellule de la feuille pour tester si le code fonctionne

  11. #11
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Merci à vous deux !..
    J'ai compris !.. Je vais tester et vous tiens au courant !

  12. #12
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Eureka... Cela fonctionne !..
    Une dernière chose ! Au lieu d'employer Vbred, Vbyellow, etc ... Quel syntaxe retenir pour entrer les couleurs par code 255,42,40 ?
    merci

  13. #13
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 191
    Billets dans le blog
    2
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case "BE": c = RGB(255,0,0)

  14. #14
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Merci beaucoup à tous ceux qui ont contribué !..
    Cordialement.

  15. #15
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Bonjour
    Je me vois contraint de revenir vers vous !
    En effet, le programme mis en place fonctionne bien. Toutefois, lorsque je saisis une variable autorisée parmi les 3 répertoriées (CPA, RTT, REC) et la valeur dans la cellule concernée, la couleur de la cellule est effective et conforme.
    Par contre, lorsque je saisis une mauvaise variable et une valeur, à la sortie de la cellule j'ai bien mon msgbox mais la variable et la valeur reste affichée !.. De plus la cellule passe en couleur bleue ciel !...

    Je vous laisse le code que j'ai incorporé ainsi qu'une image du tableau.
    Avez-vous une idée pour résoudre ce problème svp ? Merci
    Cordialement.

    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
      Dim c As Long
      Set r = oRange.Offset(ColumnOffset:=-1)
      Select Case r
        Case "CPA": c = RGB(0, 255, 0)
        Case "cpa": c = RGB(0, 255, 0)
        Case "RTT": c = RGB(32, 160, 192)
        Case "rtt": c = RGB(32, 160, 192)
        Case "REC": c = RGB(224, 192, 96)
        Case "rec": c = RGB(224, 192, 96)
        Case Else: c = xlNone: MsgBox "Erreur de codification !"
     
        End Select
     
        oRange.Interior.Color = c
     
    ' Debug.Print "variable", oRange, c, r
     
      End Sub
    Nom : automatisation2.jpg
Affichages : 81
Taille : 64,3 Ko

  16. #16
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 191
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Rien dans le code ne semble mettre ce bleu ciel, qui semble être le même bleu que celui des week-end, peut-être regarder du côté des mises en formes conditionnelles ?

    sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      Select Case r
        Case "CPA": c = RGB(0, 255, 0)
        Case "cpa": c = RGB(0, 255, 0)
        Case "RTT": c = RGB(32, 160, 192)
        Case "rtt": c = RGB(32, 160, 192)
        Case "REC": c = RGB(224, 192, 96)
        Case "rec": c = RGB(224, 192, 96)
        Case Else: c = xlNone: MsgBox "Erreur de codification !"
     
        End Select
    peut s'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      Select Case UCase(r)
        Case "CPA": c = RGB(0, 255, 0)
        Case "RTT": c = RGB(32, 160, 192)
        Case "REC": c = RGB(224, 192, 96)
        Case Else: c = xlNone: MsgBox "Erreur de codification !"
     
        End Select

  17. #17
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 214
    Par défaut
    Hello,

    ben oui, merci tototiti2008, sinon il faudrait imaginer tous les cas possibles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      Select Case r
        Case "CPA": c = RGB(0, 255, 0)
        Case "cpa": c = RGB(0, 255, 0)
        Case "Cpa": c = RGB(0, 255, 0)
        Case "CPa": c = RGB(0, 255, 0)
        Case "cPA": c = RGB(0, 255, 0)
        Case "cpA": c = RGB(0, 255, 0)
    ... 
        End Select
    et la c'est juste pour 3 caractères et 3 textes, imaginez pour des mots plus longs et plus de possibilités

  18. #18
    Membre éclairé Avatar de cluster26
    Profil pro
    Inscrit en
    Février 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 297
    Par défaut
    Bonjour.

    J'ai bien avancé sur mon projet en m'appuyant particulièrement sur vos conseils.

    Toutefois, je bloque sur quelque chose qui me paraissait élémentaire.

    Mon classeur est composée de plusieurs feuilles : Janvier, Février, etc....
    J'ai attribué à chaque feuille un nom représentatif d'une zone spécifique : Zone1, Zone2, Zone3, etc...,
    Je souhaite appliquer des instructions en bouclant sur les différentes feuilles et sur les différentes plages
    Je me retrouve donc avec cette programmation VBA mais j'obtiens systématiquement une erreur car je n'arrive à donner une variable à ma plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim cellule As Range
    Dim couleur As Integer
     
    For Each cellule In Range("Zone1")
    if ActiveSheet.Name="Janvier" then
    J'essaye d'attribuer une variable à plage nommée dans le genre "Zone" & i (i étant la variable integer) mais cela ne fonctionne pas !...
    Avez-vous une solution SVP. ?
    Merci à l'avance.
    Cordialement

  19. #19
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour donner un nom à une cellule ou plage de cellules, il y a le gestionnaire des noms
    Je ne comprend pas la ligne ActiveSheet.Name à l'intérieur d'une boucle qui parcourt une plage de cellules. Il faudrait boucler sur la collection des feuilles
    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

  20. #20
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 191
    Billets dans le blog
    2
    Par défaut
    Bonjour ,

    Il nous faudrait plus de précisions
    Y a t-il d'autres feuilles que celles de Janvier à Décembre ?
    Y a t-il le même nombre de zones dans chaque feuille ? Combien ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/01/2020, 10h05
  2. Réponses: 4
    Dernier message: 26/01/2017, 22h45
  3. [XL-2016] Mise en forme conditionnelle couleur cellule
    Par Ragnart dans le forum Excel
    Réponses: 7
    Dernier message: 13/10/2016, 12h57
  4. [XL-2007] Automatiser mise en forme cellule
    Par Feuztoff dans le forum Excel
    Réponses: 10
    Dernier message: 17/04/2014, 06h14
  5. VBA-E mise en couleur conditionnelle
    Par porc-bouc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2008, 09h41

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