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 cellule non vide et sans espace [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Par défaut Mise en forme conditionnelle cellule non vide et sans espace
    Bonjour le forum!
    Je suis en train d'essayer de faire une macro qui ajoute de la mise en forme conditionnelle, et ai besoin de votre aide.

    Dans ma colonne E, je peux avoir :
    1_ des cellules vides (aucune donnée),
    2_ des cellules non vides mais avec seulement des espaces,
    3_ des cellules non vides avec de "vrais" caractères.
    La case E1 contient le nom de mes données, et la dernière cellule non vide de la colonne E est connue et repérée par la variable "lastline".

    Je voudrais que les types 1 et 2 de cellules soient mis en jaune grâce à la mise en forme conditionnelle.
    De plus, une fois la macro exécutée, je voudrais que la mise en forme reste dynamique, c'est-à-dire que, si par exemple, j'enlève le contenu de la case E4, elle devienne jaune, et vice-versa.

    Voici le code que j'ai pour l'instant mais qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            Range("E" & 2 & ":" & "E" & lastline).Select
            Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=LEN(TRIM(E2))=0"
            Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
            With Selection.FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .Color = 65535
                .TintAndShade = 0
            End With
            Selection.FormatConditions(1).StopIfTrue = False
    Voyez-vous ce qui ne va pas dans ce code, ou sinon pouvez-vous me dire comment faire autrement? Merci d'avance !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjours
    en gros tu voudrais que tes cas 1 et 2 devienne jaunnes si il y a 1 ou des espaces ou rien du tout
    ca ca n'est pas trop compliqué ce qu'il l'est c'est a quel moment veut tu que l'effet soit appliqué

    tu a parlé de la "E4" si c'est a partir de la que l'effet doit etre pris en compte
    utilise le selection change avec le le "E4" pour target

    maintenant si c'est sur tout un plage utilise le intersect


    au plaisir

    rebonjour

    trouvant le sujet intéressant

    je t'ai fait un petit code qui:

    a l'activate de la feuille 1 on met toute les cellules vide y compris avec des espaces de la colonne "e"en jaune juste qu'a la dernière ligne utilise de cette même colonne
    le principe c'est de remplacer les doubles espace par rien comme ça on a un point précis de comparaison
    ensuite a chaque fois que tu va changer le contenu d'une de ces cellules
    soit le remplir soit la vider
    si tu la vide elle deviens jaune
    si tu la remplie elle deviens blanche

    code a metre dans le module du sheets concerné
    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
     
    Dim cel As Range
    Private Sub Worksheet_Activate()
        MsgBox Sheets(1).Range("e" & Rows.Count).End(xlUp).Row
     
        For Each cel In Sheets(1).Range("E1:E" & Sheets(1).Range("e" & Rows.Count).End(xlUp).Row)
            cel.Value = Replace(cel.Value, "  ", "")
     
            If cel.Value <> "" Then
                cel.Interior.Color = xlNone
            Else
                cel.Interior.Color = vbYellow
     
            End If
        Next
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim maplage As String
     
        maplage = Sheets(1).Range("E1:E" & Sheets(1).Range("E" & Rows.Count).End(xlUp).Row).Address
        'MsgBox maplage
        If Not Intersect(Sheets(1).Range(maplage), Target) Is Nothing Then
            If Target.Value <> "" Then
                Target.Interior.Color = xlNone
            Else
                Target.Interior.Color = vbYellow
            End If
        End If
     
    End Sub
    voili voilou

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Regarde si ceci te convient :
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Column = 5 Then
     
            Formater Target
     
        End If
     
    End Sub
     
    Sub Formater(Cel As Range)
     
        Dim Fe As Worksheet
        Dim F As FormatCondition
        Dim Plage As Range
        Set Fe = ActiveSheet
     
        Application.ScreenUpdating = False
     
        With Fe
     
            'vire le format conditionnel en place
            .Columns("E:E").FormatConditions.Delete
     
            Set Plage = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp))
     
        End With
     
            'selectionne la plage
            Plage.Select
            'ajout le format conditionnel
            Set F = Plage.FormatConditions.Add(xlExpression, , "=SI(NBCAR(SUPPRESPACE(E2))=0;VRAI)")
     
        With F
            .Interior.Color = 65535
            'ici, le reste des paramétrages
        End With
     
        're-selectionne la cellule en cours
        Cel.Select
     
        Application.ScreenUpdating = True
     
    End Sub
    Hervé.

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Par défaut
    Bonjour Theze et patricktoulon !

    Merci pour vos réponses !
    Je ne savais pas qu'il était possible d'ajouter un code propre à une feuille, qui s'applique à chaque fois qu'elle est modifiée (via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change
    si j'ai bien compris)

    Pour repartir sur mon problème, j'ai essayé vos solutions, mais mes différentes macros faisaient trop souvent appel à l'activation de la page

    Au final, j'ai mis le code suivant :

    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
     
            Dim i As Integer
            For i = 2 To lastline
                With Sheets(1)
                    With .Range("E" & ijk)
                        .FormatConditions.Delete
                        .FormatConditions.Add Type:=xlExpression, Formula1:="=NBCAR(SUPPRESPACE($E$" & i & "))=0"
                        With .FormatConditions(1)
                            .SetFirstPriority
                            .StopIfTrue = False
                        End With
                        With .FormatConditions(1).Interior
                            .PatternColorIndex = xlAutomatic
                            .Color = 65535
                            .TintAndShade = 0
                        End With
                    End With
                End With
            Next i
    avec les $,
    détail sans quoi les mises en forme conditionnelles n'en faisaient qu'à leur tête !!

    En tous cas, merci de m'avoir inspirée ! A bientot

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    a tu essayé mon code au moins ? je l'ai fait par rapport a l'énoncer de ton post

    il n'y avait rien a ajouter a moins que tu a ajouté des conditions

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/06/2015, 22h07
  2. Mise en forme conditionnelle si cellule "vide"
    Par floflo50100 dans le forum Excel
    Réponses: 31
    Dernier message: 15/04/2015, 21h22
  3. Réponses: 2
    Dernier message: 06/02/2015, 17h44
  4. Réponses: 13
    Dernier message: 16/09/2014, 20h55
  5. Mise en forme conditionnelle ET noms de cellules
    Par sat478 dans le forum Excel
    Réponses: 3
    Dernier message: 07/11/2007, 18h44

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