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 :

Améliorer code VBA pour mise en forme


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut Améliorer code VBA pour mise en forme
    Je suis à la recherche d'une solution plus simple afin de ne pas ralentir la saisie ds ma feuille.

    Les cellules de la colonne A conditionnent la couleur ds les cellules qui sont sur la même ligne pour colonne B à F.

    Merci d'avance pour votre aide

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim i&
        With Feuil14
            For i = 1 To 6000
                'si cellule colonne A # vide et cellules colonnes B a F # vide
                If .Cells(i, 1) <> "" Then
                    For j = 1 To 6
                        If .Cells(i, j) <> "" Then
                            Cells(i, j).Interior.ColorIndex = 3
                        End If
                    Next j
                End If
                'si cellule colonne A = vide et cellules colonnes B a F # vide
                If .Cells(i, 1) = "" Then
                    For j = 1 To 6
                        If Cells(i, j) <> "" Then
                            Cells(i, j).Interior.ColorIndex = 4
                        End If
                    Next j
                End If
                'si cellule colonne A = vide et cellules colonnes B a F = vide
                If .Cells(i, 1) = "" Then
                    For j = 1 To 6
                        If .Cells(i, j) = "" Then
                            Cells(i, j).Interior.ColorIndex = xlNone
                        End If
                    Next j
                End If
                'si cellule colonne A # vide et cellules colonne B à F = vide
                If .Cells(i, 1) <> "" Then
                    For j = 1 To 6
                        If .Cells(i, j) = "" Then
                            Cells(i, j).Interior.ColorIndex = xlNone
                        End If
                    Next j
                End If
     
            Next i
        End With
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Est-ce que tu peux expliquer ce que tu cherches à faire ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Désolé par mon manque de précision.

    Je vais essayer d'être plus clair.

    Petit exemple:

    je possède 6 colonnes A,B,C,D,E,F

    lorsque je met "x" ds la cellule "B2", le font devient vert
    lorsque je met "x" ds la cellule "C2", le font devient vert
    lorsque je met "x" ds la cellule "E2", le font devient vert
    1°)si je met "x" ds la cellule "A2, le fond devient rouge ds "A2" + "B2" + "C2" + "E2"
    2°)si j'enlève "x" ds la cellule "A2, le fond devient transparent ds "A2" puis vert ds "B2" et"C2" et "E2"

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    tu n'utilise pas le bon événement ... utilise plutôt :

    II-E. Worksheet_Change


    et ne parcours pas toutes les lignes de ta feuille ... agit seulement sur la ligne sur laquelle as lieu le changement de valeur ... et seulement si ce changement as lieu dans les colonnes A à E...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     if Target.Column < 6
    ...

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Mets la macro suivante dans le module de la feuille :

    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 Range)
        If Target.Column > 6 Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "x" Then
            Select Case Target.Column
                Case 1
                    Target.Resize(, 3).Interior.ColorIndex = 3
                    Cells(Target.Row, 5).Interior.ColorIndex = 3
                Case 2, 3, 5
                    Target.Interior.ColorIndex = 4
            End Select
        ElseIf Target.Column = 1 And Target.Value = "" Then
            Target.Interior.ColorIndex = vbnone
        End If
    End Sub

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    ta proposition m'a beaucoup aidé et se rapproche de ce que je voulais. Voici avec mes modifs

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column > 7 Then Exit Sub
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "x" Then
            Select Case Target.Column
                Case 1
                    With Target.Interior
                        .Pattern = xlPatternLinearGradient
                        .Gradient.Degree = 90
                        .Gradient.ColorStops.Clear
                    End With
                    With Target.Interior.Gradient.ColorStops.Add(0)
                        .ThemeColor = xlThemeColorDark1
                        .TintAndShade = -0.149021881771294
                    End With
                    With Target.Interior.Gradient.ColorStops.Add(1)
                        .Color = 255
                        .TintAndShade = 0
                    End With
                Case 2, 3, 4, 5, 6
                    With Target.Interior
                        .Pattern = xlPatternLinearGradient
                        .Gradient.Degree = 90
                        .Gradient.ColorStops.Clear
                    End With
                    With Target.Interior.Gradient.ColorStops.Add(0)
                        .ThemeColor = xlThemeColorDark1
                        .TintAndShade = -0.149021881771294
                    End With
                    With Target.Interior.Gradient.ColorStops.Add(1)
                        .Color = 5296274
                        .TintAndShade = 0
                    End With
            End Select
        End If
        If Target.Value <> "x" Then
            Select Case Target.Column
                Case 1, 2, 3, 4, 5, 6
                    Target.Interior.ColorIndex = vbnone
            End Select
        End If
    End Sub
    mon petit soucis est:

    si j'ai "x" ds la cellule "A2", celle ci devient rouge (ce qui est bon), mais les autres cellules passeront rouge que si il y a "x" dedans.

    si j'enlève "x" de la cellule "A2", celle ci devient transparente (ce qui est bon), mais les autres redeviennet verte si il y a "x" dedans

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    si j'ai "x" ds la cellule "A2", celle ci devient rouge (ce qui est bon), mais les autres cellules passeront rouge que si il y a "x" dedans.
    Tu as mal transposé mon code, d'une part et tu as ajouté les colonnes D et F. Que veux-tu maintenant ?

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

Discussions similaires

  1. [WD-2010] Code VBA - WORD - Outlook pour mise en forme d'un message
    Par xav31so dans le forum VBA Word
    Réponses: 19
    Dernier message: 27/11/2013, 09h50
  2. Réponses: 6
    Dernier message: 18/11/2013, 17h48
  3. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  4. [CSS] Besoin d'aide pour mise en forme !
    Par TorF dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 19/03/2005, 19h28
  5. Code touches virtuels -> mise en forme
    Par Neilos dans le forum Windows
    Réponses: 3
    Dernier message: 18/11/2004, 23h37

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