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 forme conditionnelle >3 par VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut Mise en forme conditionnelle >3 par VBA
    Bonjour,
    Je voudrais écrire mes mises en forme conditionnelle, parce qu'il y en a beaucoup, qu'elles risquent d'être modifiées de temps en temps, et que ça concerne plusieurs feuilles...
    ce que je voudrais, c'est qu'en fonction de plages (toujours les mêmes), si l'utilisateur tape des mots clés, la cellule se colore en fonction du mot clé (évidement sans avoir à lancer une macro).
    je suppose que pour commencer il convient d'écrire le code dans ThisWorkbook
    j'ai essayé avec votre tuto http://silkyroad.developpez.com/Exce...itionnelle/#LV
    mais ça manque d'informations, je n'y arrive pas
    J'ai essayé avec des select case, mais là encore, je n'ai rien d'automatique
    j'ai trouvé qq ch qui commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    mais je ne sais pas ce que c'est qu'une Target, ni comment cela s'utilise
    Je vous joins mon fichier, avec mes bouts de codes.
    Merci de bien vouloir m'expliquer comment m'y prendre.
    http://cjoint.com/?CBfsaqx1jff

  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
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Que tu n'aies pas compris le chapitre du tutoriel dont tu parles est une chose, dire que cela manque d'information en est une autre.
    Dans la procédure événementielle Worksheet_Change l'argument Target est un objet Range qui représente la ou les cellules qui ont été modifiées
    Donc si tu changes la valeur de la cellule A8 en tapant 15, Target.Value sera égal à 15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     MsgBox Target.Value
    End Sub
    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 actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour Philippe,
    Merci de ta réponse, je ne voulais pas vexer qui que se soit, c'est le seul tuto que j'ai trouvé et je dis merci, mais j'aurais aimé avoir qq exemples d'utilisation avec d'autres opérateurs, d'autant plus que le tuto semble vraiment au plus proche de la boîte de dialogue des mises en forme conditionnelle.

    Comment dois-je donner la valeur $E$5avec xlEqual
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .FormatConditions.Add Type:=xlEqual, "=$E$5"
    ?
    Merci

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu peux t'aider de l'enregistreur de macro pour coder ce type d'opération.
    Pour appliquer une MFC à une cellule contenant une valeur égale à celle de E5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$E$5"
    Cordialement.

  5. #5
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour
    Merci pour ta réponse.
    J'ai bien commencé par faire un enregistrement, malheureusement, il reste vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub MefCond1()
    '
    ' MefCond1 Macro
    End Sub
    Donc j'ai essayé ça, dans ThisWorkbook :
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    With Range("A1:C3") ', A5:C10, A15:C20
        'Supprime les MFC existantes
        .FormatConditions.Delete
     
        'Ajoute une condition (Vrai lorsque la cellule est non vide)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$E$5"
     
        With .FormatConditions(1)
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = 16771071       '.Interior.ColorIndex = 15 'Gris
     
        End With
    End With
    End Sub
    Tout fonctionne parfaitement sur les cellules déterminées.
    J'ai plus qu'à saisir mes 31 codes, ça va aller plus vite.
    Encore merci à tous

  6. #6
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    J'ai encore un pb, j'ai voulu dupliquer pour les autres codes ayant la même couleur, mais cela n'est pas pris en compte.
    J'ai également voulu ajouter une conversion des codes en majuscule, ça non plus ne fonctionne pas
    Voilà donc mon nouveau code :
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    With Range("A1:C3, A6:C7, A11:C14") 'Plage devant pratiquer la MeF
        'Supprime les MFC existantes
        .FormatConditions.Delete
     
        'Ajoute une condition (Vrai lorsque la cellule est non vide)
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$E$5"
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$E$6"
     
        With .FormatConditions(1)
            'Définit la couleur de fond de la cellule lorsque la condition sera vraie.
            .Interior.Color = 16771071       '.Interior.ColorIndex = 15 'Gris
     
            'Converti les saisie en majuscule
            Target.Value = UCase(Target.Value)
        End With
    End With
    End Sub
    Est-ce qq'1 voit ce qui cloche ?

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Re,

    Tu n'est pas obligé de passer par les MFC pour réaliser cette mise en forme de cellules.
    Fais ce test en plaçant le code dans le module de la feuille 1.
    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim MaPlage As Range
        Set MaPlage = Range("A1:C3, A6:C7, A11:C14") 'Plage devant pratiquer la MeF
        'Si une seule cellule a été sélectionnée
        If Target.Count = 1 Then
            Application.EnableEvents = False
            'Si la cellule fait partie de la plage à traiter
            If Not Application.Intersect(Target, MaPlage) Is Nothing Then
                'Recherche un mot clé
                Set C = Columns(5).Find(Target, LookIn:=xlValues, lookat:=xlWhole)
                'Si la saisie correspond à un mot clé
                If Not C Is Nothing Then
                    'Affecte la couleur du mot clé à la cellule
                    Target.Interior.Color = C.Interior.Color
                End If
            End If
            'Convertit la saisie en majuscule
            Target.Value = UCase(Target.Value)
        Application.EnableEvents = True
        End If
    End Sub
    Cordialement.

  8. #8
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour gFZT82,
    Merci pour ton aide et tes explications.

    J'ai créé un nouveau fichier, dans lequel j'ai copié ma colonne 5 (E), dans VBE j'ai créé un module dans lequel, j'ai collé ta procédure.
    Quoique je tape en A1, il ne se passe rien, ni majuscule ni couleur quand je tape un mot de la colonne 5.
    Je suis sur cette question depuis ce matin, je ne comprends pas...

    J'ai même essayé l'exemple de Philippe Tulliez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     MsgBox Target.Value
    End Sub
    quand je tape 15 en A8, je n'ai aucun message qui me donne une valeur...

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    J'ai créé un nouveau fichier, dans lequel j'ai copié ma colonne 5 (E), dans VBE j'ai créé un module dans lequel, j'ai collé ta procédure.
    La procédure Worksheet_Change() correspond à un évènement de la feuille sur laquelle on effectue la surveillance.
    Il faut donc que le code soit copié dans le module de la feuille concernée.

    Cordialement.

  10. #10
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci gFZT82, mettre le code dans le module de la feuille concernée est une grande avancée !
    ton code a l'air de fonctionner, même s'il semble que j'ai qq bug avec des copies / collés / glissés.

    C'est vrai que je préférai essayé d'avoir un code avec , car ça "incrémente la boite de dialogue des mises en forme conditionnelle"
    mais là je ne maitrise rien du tout, ni la zone "s'applique à", ni "valeur de la cellule".
    De plus, je dois coder un fichier qui a déjà des mises en forme conditionnelle faite manuellement...
    Donc je verrais demain, j'en ai marre.
    En tout cas merci pour ton aide.

Discussions similaires

  1. Mise en forme conditionnelle adaptée à un code VBA
    Par rihab92 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/05/2015, 09h39
  2. [XL-2010] Peut-on programmer des Mises en Forme Conditionnelles par Vba ?
    Par Vad_18 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/04/2015, 10h42
  3. [XL-2010] Comment gérer les priorités de mise en forme conditionnelle dans un programme VBA
    Par Alain777 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/04/2015, 22h26
  4. Réponses: 3
    Dernier message: 14/11/2011, 13h00
  5. Mise en forme conditionnelle en VBA / Cut-Paste
    Par priest69 dans le forum IHM
    Réponses: 4
    Dernier message: 03/09/2005, 13h54

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