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 :

appliquer une macro à plusieurs cellules


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut appliquer une macro à plusieurs cellules
    Bonjour,

    J'ai une colonne dans laquelle on peut remplir soit "standby" soit "projected" soit "finish" soit "In Progress". Je souhaiterai que la couleur de la case change en fonction du nom renseigné. Sachant que ma colonne est la "AL" et que les ligne susceptibles de changer sont de 8 à 486.

    Débutant que je suis, je n'arrive pas à mes fins.

    voici ma macro:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Sub couleur1()
     
    Dim I As Integer
    For I = 486 To 8
    Next I
     
    Range("al" & I).Select
    Select Case ActiveCell.Value
     
    Case "Standby"
    GoTo couleurStandby
     
    Case "InProgress"
    GoTo couleurInProgress
     
    Case "Finish"
    GoTo couleurFinish
     
    Case "Projected"
    GoTo couleur0
     
    End Select
     
    Exit Sub
     
    couleur0:
    Range("al" & I).Select
    With Selection.Interior
    .ColorIndex = 20
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    End With
    Exit Sub
     
    couleurStandby:
    Range("al" & I).Select
    With Selection.Interior
    .ColorIndex = 3
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    End With
    Exit Sub
     
    couleurInProgress:
    Range("al" & I).Select
    'Range("al8: al486").Select
    With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    End With
    Exit Sub
     
    couleurFinish:
    Range("al" & I).Select
    With Selection.Interior
    .ColorIndex = 4
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    End With
    Exit Sub
    End Sub
    Mon second problème vient de l'exécution automatique de cette macro.

    Voici la macro que j'ai mis dans ma feuille cette macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim I As Integer
    For I = 486 To 8
    Next I
    If Target.Address = "$AL" & I Then
    couleur1
    End If
    End Sub
    Je galère depuis un bout de temps donc si quelqu'un sait ou je me trompe ça m'aiderait vraiment beaucoup.


    Cordialement (et avec espoir)

  2. #2
    Membre confirmé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Points : 551
    Points
    551
    Par défaut
    Le plus simple pour appliquer une couleur à une cellule en fonction de son contenu est d'utiliser la /Mise en forme conditionnelle/ (sans passer par VBA).
    A lire :Les Règles

  3. #3
    Membre habitué Avatar de Brunodm13
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 129
    Points : 143
    Points
    143
    Par défaut
    Bonsoir

    Je te propose 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
    20
    21
    22
    Sub Couleur()
    Dim c As Range
    Dim MaCouleur As Long
     
     
    For Each c In Range("AL8:AL486")
    Select Case c.Value
        Case "standby"
        MaCouleur = 3
        Case "projected"
        MaCouleur = 20
        Case "finish"
        MaCouleur = 4
        Case "In Progress"
        MaCouleur = 6
        Case ""
        MaCouleur = xlNone
    End Select
    c.Interior.ColorIndex = MaCouleur
    Next c
     
    End Sub
    Tu peux appeler cette sub sur l'évènement Worksheet_Change de ta feuille.

    Bonne soirée

    Bruno

  4. #4
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Tu peux aussi l'appeler à chaque fois qu'une cellule dans ton Range change.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column = "AL" And Target.Row > 8 And Target.Row < 486 Then
            Call Couleur(Target)
        End If
    End Sub
    Sub Couleur(MaCellule As Range)
    Dim MaCouleur As Long
     
    Select Case MaCellule.Value
        Case "standby"
        MaCouleur = 3
        Case "projected"
        MaCouleur = 20
        Case "finish"
        MaCouleur = 4
        Case "In Progress"
        MaCouleur = 6
        Case ""
        MaCouleur = xlNone
    End Select
    MaCellule.Interior.ColorIndex = MaCouleur
     
    End Sub
    En changeant un peu la macro Couleur la couleur chagement automatiquement quand le contenu de la cellule changera.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut drakkar_agfa et le forum
    J'utiliserais plutot ta macro comme 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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cel As Range
    Dim Pl As Range
    Set Pl = Intersect(Target, Range("AL8:AL486"))
    'Pl=cellules modifiées appartenant à AL8:AL486
    If Pl Is Nothing Then Exit Sub
    'Si Pl est vide on sort
    For Each Cel In Pl
    'pour chaque cellule de Pl
        Select Case lcase(Cel)
            Case "standby"
                Cel.Interior.ColorIndex = 3
            Case "projected"
                Cel.Interior.ColorIndex = 20
            Case "finish"
                Cel.Interior.ColorIndex = 4
            Case "in progress"
                Cel.Interior.ColorIndex = 6
            Case Else
                Cel.Interior.ColorIndex = xlNone
        End Select
    Next Cel
    End Sub
    évite un renvoi à une autre macro
    Permet de traiter une copie sur multi-cellules
    s'affranchit des problèmes de majuscules/minuscule (pour "In Progress" notablement)
    A+

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  3. appliquer une macro a plusieurs cellules
    Par Snipy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/10/2010, 11h13
  4. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  5. appliquer une macro a une plage de cellule variable
    Par johndeuf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2006, 16h18

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