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 :

condition avec des couleurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut condition avec des couleurs
    Bonjour,

    Je voudrai créer une macro qui réalise certaines opération selon la couleur de plusieurs case, par exemple :
    -si la case E est bleu (41) et la case H est verte (42) supprime la ligne
    -si la case E est bleu et la case H n'est pas colorié : "pblm de montant"
    -si la case E n'est pas colorié et la case H est verte : "pblm de facture"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Cell In Range("A:M")
    If Cell.Interior.ColorIndex = 41 Then
    Merci

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour,
    code à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim derli As Long
    Dim i As Long
    derli = Columns(5).Find("*", , , , , xlPrevious).Row
    For i = derli To 1 Step -1
    If Cells(i, 5).Interior.ColorIndex = 41 Then
        Select Case Cells(i, 8).Interior.ColorIndex
        Case 42: Rows(i).Delete
        Case -4142: MsgBox "pb de montant ligne " & i
        End Select
    ElseIf Cells(i, 5).Interior.ColorIndex = -4142 Then
        MsgBox "pb de facture ligne " & i
    End If
    Cordialement

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut précision
    Merci pour votre aide, je souhaiterais faire apparaître s'il y a un pblm "pblm facture" par exemple dans la colonne K, et non pas dans un messagebox.

    Merci

  4. #4
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re
    modifie le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim derli As Long
    Dim i As Long
    derli = Columns(5).Find("*", , , , , xlPrevious).Row
    For i = derli To 1 Step -1
    If Cells(i, 5).Interior.ColorIndex = 41 Then
        Select Case Cells(i, 8).Interior.ColorIndex
        Case 42: Rows(i).Delete
        Case -4142: Cells(i, "K") = "pb de montant" 
        End Select
    ElseIf Cells(i, 5).Interior.ColorIndex = -4142 Then
        Cells(i, "K") = "pb de facture"
    End If
    @+

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut
    La macro que tu me propose met des "pblm de facture" dans toutes les autres cases, alor que je voudrai que :
    -si la case E n'est pas colorié et la case H est verte : "pblm de facture"

    Et ne rien mettre dans les autres cas.

    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
    Sub test()
    Dim derli As Long
    Dim i As Long
    derli = Columns(5).Find("*", , , , , xlPrevious).Row
    For i = derli To 1 Step -1
    If Cells(i, 5).Interior.ColorIndex = 41 Then
        Select Case Cells(i, 8).Interior.ColorIndex
        Case 42: Rows(i).Delete
        Case -4142: Cells(i, "K") = "pb de montant"
        Case -4241: Cells(i, "K") = "pb de facture"  ' est ce que c possible?
        End Select
    ElseIf Cells(i, 5).Interior.ColorIndex = -4142 Then
        Cells(i, "K") = ""
     
    End If
    Next
    Merci

  6. #6
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    teste ça
    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
    Sub test()
    Dim derli As Long
    Dim i As Long
    derli = Columns(5).Find("*", , , , , xlPrevious).Row
    For i = derli To 1 Step -1
    'si fond cellule E en bleu
    If Cells(i, "E").Interior.ColorIndex = 41 Then
        'on verifie fond cellule H
        Select Case Cells(i, "H").Interior.ColorIndex
        'si vert, on supprime la ligne
        Case 42: Rows(i).Delete
        'si pas de formatage de la couleur de fond pb de montant en K
         Case -4142: Cells(i, "K") = "pb de montant"
        End Select
    'Si fond cellule E non formaté et fond cellule H en vert,
    'pb de facture en K
    ElseIf Cells(i, 5).Interior.ColorIndex = -4142 And _
        Cells(i, "H").Interior.ColorIndex = 42 Then
            Cells(i, "K") = "pb de facture"
    End If
    @+

  7. #7
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut
    Re

    Merci pour votre aide, mais je ne sais pas pourquoi cela ne fonctionne pas,
    des fois il me met "pblm de ...." quand il faut et des fois il ne le met pas.

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Par défaut AUTRE CODE
    C'est uniquemnt le traitement des cellules selon ta méthode(E & H avec la plage A à M et une boucle for each)
    Elle ne travaille donc que sur une ligne
    Est cela ?
    Attention au numéro de couleur ici 41 & 43
    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
    Sub Bleu()
     
    Dim maPlage As Range 'déclaration de la variable plage
    Range("A1:M1").Select ' Etendue de la plage a traiter
    Set maPlage = Selection 'la variable prend comme dimension la plage à traiter
    For Each c In maPlage 'boucle for travaillaint sur la plage à traiter
        If c.Interior.ColorIndex = 41 Then 'premier test sur la couleur bleu
        c.Offset(0, 3).Select ' deplacement de 3 cellules vers la droite en prinicpe H1
            If Selection.Interior.ColorIndex = 43 Then ' Est ce que cette cellule est verte
            c.EntireRow.Select 'les 2 couleurs existent
            Selection.Delete 'la ligne est supprimée
            End 'sortie de la procédure
            ElseIf Selection.Interior.ColorIndex = xlNone Then 'absence de couleur
            c.Value = "pblm de montant" 'texte inscrit dans c en principe E1
            End If
        End If
        If c.Interior.ColorIndex = 43 Then 'condition sur la couleur verte
        c.Offset(0, -3).Select 'deplacement de 3 cellules vers la gauche en prinicpe E1
            If Selection.Interior.ColorIndex = xlNone Then 'si il y a absence de couleur
            Selection.Value = "pblm de facture" 'texte inscrit dans c
            End If
        End If
    Next 'fin de la boucle
    Range("A1").Select
    End Sub

  9. #9
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Par défaut RE
    Merci pour votre aide, le code ne marche pas, celui la fonctionne :

    Citation Envoyé par fred65200 Voir le message
    re

    teste ça
    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
    Sub test()
    Dim derli As Long
    Dim i As Long
    derli = Columns(5).Find("*", , , , , xlPrevious).Row
    For i = derli To 1 Step -1
    'si fond cellule E en bleu
    If Cells(i, "E").Interior.ColorIndex = 41 Then
        'on verifie fond cellule H
        Select Case Cells(i, "H").Interior.ColorIndex
        'si vert, on supprime la ligne
        Case 42: Rows(i).Delete
        'si pas de formatage de la couleur de fond pb de montant en K
         Case -4142: Cells(i, "K") = "pb de montant"
        End Select
    'Si fond cellule E non formaté et fond cellule H en vert,
    'pb de facture en K
    ElseIf Cells(i, 5).Interior.ColorIndex = -4142 And _
        Cells(i, "H").Interior.ColorIndex = 42 Then
            Cells(i, "K") = "pb de facture"
    End If
    @+
    ce code fonctionne, c'est à dire les ligne avec les 2 couleurs s'efface, mais après il met une fois sur deux s'il y a un problème "pblm facture" "pblm montant", et je cherche à changer ce code pour qu'il fontionne complétement.

    Merci

Discussions similaires

  1. Simuler une listbox avec des couleurs
    Par Invité dans le forum Contribuez
    Réponses: 9
    Dernier message: 19/03/2020, 20h49
  2. CSS avec des couleur très web2.0
    Par le-baron dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 12/01/2008, 06h30
  3. Réponses: 8
    Dernier message: 02/11/2007, 07h24
  4. Réponses: 2
    Dernier message: 07/06/2007, 16h07
  5. Saisir un texte avec des couleurs
    Par l_seringa dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2007, 20h21

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