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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Mise en forme
    Bonjour

    Voilà, j'aimerais mettre en forme(qu'elle change de couleur) certaine cellule d'une feuille en fonction de ce qu'il y a de noter dedans.
    avant cela fonctionné très bien si je tapais la valeur directement dans la cellule. Mais maintenant cesvaleur s'inscrive grace a des formule, et ma mise en forme ne ce fait plus, et je ne vois pas pourquoi, si quequ'un sait pourquoi cela m'arrangerais.

    Voilà ce que j'ai :

    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
    Sub MEF()
    Dim endofcolumn As Long
    endofcolumn = 500
    For i = 1 To endofcolumn
     Select Case Cells(i, 1).Value
        Case Is = ""
        Cells(i, 1).Interior.ColorIndex = 0
        Case Is = "JV"
        Cells(i, 1).Interior.ColorIndex = 35
        Case Is = "R"
        Cells(i, 1).Interior.ColorIndex = 3
        Cells(i, 1).Font.ColorIndex = 2
        Case Is = "B"
        Cells(i, 1).Interior.ColorIndex = 37
        Case Is = "N"
        Cells(i, 1).Interior.ColorIndex = 1
        Cells(i, 1).Font.ColorIndex = 2
        Case Is = "O"
        Cells(i, 1).Interior.ColorIndex = 46
        Case Is = "V"
        Cells(i, 1).Interior.ColorIndex = 7
        End Select
     Next i
    End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu n'as qu'une feuille dans ton classeur?
    Le procédure que tu donnes s'exécute-t-elle effectivement?

    PGZ

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Mise en forme
    Non j'ai plusieurs feuilles, mais j'ai besoin que cela ne s'applique que sur une seule, donc ce code ce trouve sur la feuille concernée,
    si je tape la valeur, cela change bien, mais si la valeur arrive grace a des formules le code ne fonctionne pas.

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    Je ne connais pas bien la fonction "CASE" mais elle prend peut-être en compte la formule, i faut peut-etre remplacer par "range("a1") <= suivant la cellule concernée.
    remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To endofcolumn
     Select Case Cells(i, 1).Value
        Case Is = ""
        Cells(i, 1).Interior.ColorIndex = 0
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to endofcolumn
    if range("a" & i) = "" then :range("a" & i)Interior.ColorIndex = 0
    '.........
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Mise en forme
    alors là j'ai changé un peu, cela fonctionne un peu mieux, quand je le tape cela fonctionne a chaque fois, mais toujour pas quand les valeurs sont calculée, voilà ou j'en suis rendu

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim c As Range
      For Each c In Target
        Select Case c.Value
           Case "JV"
             c.Interior.ColorIndex = 35
           Case "R"
             c.Interior.ColorIndex = 3
             c.Font.ColorIndex = 2
            Case "B"
             c.Interior.ColorIndex = 37
            Case "N"
             c.Interior.ColorIndex = 1
             c.Font.ColorIndex = 2
            Case "O"
             c.Interior.ColorIndex = 46
            Case "V"
             c.Interior.ColorIndex = 7
           Case Else
             c.Interior.ColorIndex = xlNone
        End Select
     
      Next
    End Sub

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Je ne sais toujours pas si le code s'exécute (et ne donne pas le résultat attendu) ou s'il ne s'exécute pas.
    Au hasard je te propose, dans le module associé à la feuille en question
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    Const endofcolumn As Long = 500
     
    For Each c In Me.Range("A1:A" & endofcolumn)
        Select Case c.Value
           Case "JV"
             c.Interior.ColorIndex = 35
           Case "R"
             c.Interior.ColorIndex = 3
             c.Font.ColorIndex = 2
            Case "B"
             c.Interior.ColorIndex = 37
            Case "N"
             c.Interior.ColorIndex = 1
             c.Font.ColorIndex = 2
            Case "O"
             c.Interior.ColorIndex = 46
            Case "V"
             c.Interior.ColorIndex = 7
           Case Else
             c.Interior.ColorIndex = xlNone
        End Select
    Next c
     
    End Sub
    Bon dimanche,

    PGZ

  7. #7
    Membre Expert
    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
    Par défaut
    Salut Didpa et le forum
    mais si la valeur arrive grace a des formules le code ne fonctionne pas
    Éternel problème de Worksheet_Change : ça n'agit que sur les cellules dont le contenu change, et pas l'affichage .
    - Soit tu retestes toutes les cellules dont la valeur peut évoluer (si elles ne constitues pas un range trop important). (t'as déjà essayé entretemps)

    - Soit tu ne testes que la/les cellule(s) modifiée(s), qui et/ou leur(s) dépendant(s) font partie des cellules à contrôler. Un exemple :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Err_Chgt
    'Déclarations =====================================
    Dim Plg As Range
    Dim Cel As Range
    Dim Plg_Ref As Range
    'MEI ==============================================
    Set Plg = Target
    Set Plg_Ref = Range("A1:A20")
    'Traitement =======================================
    'Recherche de toutes les cellules concernées par
    'modification directe ou induite ------------------
    For Each Cel In Target
        Set Plg = Union(Plg, Cel.Dependents)
    Next Cel
    'Définition des cellules à modifier --------------
    If Intersect(Plg, Plg_Ref) Is Nothing Then Sortie_Chgt
    Set Plg = Intersect(Plg, Plg_Ref)
    'Traitement des cellules mdifiées de la zone -----
    For Each Cel In Plg
        Select Case Cel
     
        End Select
    Next Cel
    'Sortie obligatoire ==============================
    Sortie_Chgt:
    Exit Sub
    'Traitement des erreurs ==========================
    Err_Chgt:
    If Err.Number = 1004 Then
        'Err.Clear
        Resume Next
    Else
        MsgBox Err.Description, vbCritical + vbOKOnly, "ERREUR EXCEL n°" & Err.Number
        Resume Sortie_Chgt
    End If
    End Sub
    Là, on contrôle les cellules de la plage A1:A20 qui ont eu leurs valeurs modifiées, ou un élément de la formule qu'elles contiennent.
    A+
    PS si des questions, ne pas hésiter

    EDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Const endofcolumn As Long = 500
      
    For Each c In Me.Range("A1:A" & endofcolumn)
    bien que ce soit "juste", je préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In Me.Range("A1:A" & range("A" & rows.count).end(xlup))

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Mise en forme
    merci a vous
    cela fonctionne avec cette formule
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    Const endofcolumn As Long = 500
     
    For Each c In Me.Range("A1:A" & endofcolumn)
        Select Case c.Value
           Case "JV"
             c.Interior.ColorIndex = 35
           Case "R"
             c.Interior.ColorIndex = 3
             c.Font.ColorIndex = 2
            Case "B"
             c.Interior.ColorIndex = 37
            Case "N"
             c.Interior.ColorIndex = 1
             c.Font.ColorIndex = 2
            Case "O"
             c.Interior.ColorIndex = 46
            Case "V"
             c.Interior.ColorIndex = 7
           Case Else
             c.Interior.ColorIndex = xlNone
        End Select
    Next c
     
    End Sub
    Mais, si je protège mes cellules (Protéger la feuille) cela ne fonctionne plus, une idée ??

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Ce qu'on ne sait pas c'est à quel moment il faut exécuter la procédure de mise en forme.
    - soit c'est sur une saisie manuelle et il faut trouver un évènement associé,
    - soit c'est après une modification par code et alors c'est à ce code d'appeler la procédure.

    COrdialement,

    PGZ

  10. #10
    Membre Expert
    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
    Par défaut
    Salut Didpa et le forum
    Mais, si je protège mes cellules (Protéger la feuille) cela ne fonctionne plus, une idée ??
    Tu déprotèges en début de macro et tu reprotèges juste avant de sortir : ta macro travaille sur une feuille sans protection, mais vu le temps de traitement, elle te semblera être toujours sous protection.
    A+

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

Discussions similaires

  1. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 11h57
  2. [CR 9] Mise en forme non affichée when null
    Par Yorglaa dans le forum Formules
    Réponses: 2
    Dernier message: 28/06/2004, 17h27
  3. mise en forme rapide d'applets
    Par appletj dans le forum Applets
    Réponses: 11
    Dernier message: 03/06/2004, 13h28
  4. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 11h55
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 15h16

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