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 :

Surligner et changer couleur police de lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Par défaut Surligner et changer couleur police de lignes
    Bonjour,

    J'ai un souci avec des codes qui permettent de modifier la couleur de la police et le surlignage de la ligne si il y a un changement de valeurs.
    Je m'explique : La macro permet de générer des lignes en fonction d'une valeur (exemple 6 --> 6 lignes générées quasi identique à la ligne mère)
    La ligne mère est initialement en noir et les lignes générées en rouge.
    Les valeurs qui sont modifiées sur la ligne mère sont colonne M ("blocage" devient "deblocage") et colonne P (valeur de cellule >0 devient =0 et cette valeur est liée à la colonne M car quand celulle de la ligne mère de la colonne P =0, cellule de la ligne mère colonne M devient "deblocage")
    Les lignes générées sont en rouge et je veux qu'elles deviennent noires une fois que la cellule de la ligne mère colonne P = 0 et que celule de la ligne mère colonen M passe de "Blocage" à "deblocage". Quand à la ligne mère, je voudrais qu'elle soit surligné une fois que colonne P = 0 et colonne M deblocage...

    J'avais déjà tenter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If cells(derlig , 13).value = "DEBLOCAGE" then
         range(cells(derlig , 1), cells(derlig , 16)).font.underline = X 
    '(je ne sais pas quoi mettre donc j'ai essayé quelques chiffres)
    End if
    et de même pour les lignes générées en rouge mais sa ne fonctionne pas.

    le code complet :

    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
    63
    64
    65
    66
    67
    Sub repet()
    On Error GoTo gestion
    derlig = [E8].End(xlDown).Row
    'oubli de remplir la case date
    If Cells(derlig, 1).Value = "" Then
        MsgBox "Entrez la date de fabrication"
        Cells(derlig, 1).Select
        End
    End If
    'oubli de remplir la case heure
    If Cells(derlig, 3).Value = "" Then
        MsgBox "Veuillez indiquer l'heure"
        Cells(derlig, 3).Select
        End
    End If
    'oubli de remplir la case ligne
    If Cells(derlig, 4).Value = "" Then
        MsgBox "veuillez indiquer la ligne de production"
        Cells(derlig, 4).Select
        End
    End If
    'oubli de remplir la case code
    If Cells(derlig, 5).Value = "" Then
        MsgBox "Veuillez indiquer le code article"
        Cells(derlig, 5).Select
        End
    End If
    'oubli de remplir la case nombre de palettes
    If Cells(derlig, 9).Value = "" Then
        MsgBox "Veuillez entrer le nombre de palettes"
        Cells(derlig, 9).Select
        End
    End If
    'eviter de remplir la case nombre de déchets sur la ligne globale
    If Cells(derlig, 10).Value <> "" Then
        MsgBox "Veuillez ne pas remplir le nombre de déchets sur cette ligne global, ne remplir que le nombre de déchets par palette"
        Cells(derlig, 10).Select
        End
    End If
    'oubli de remplir la case temps de triage par palette
    If Cells(derlig, 15).Value = "" Then
        MsgBox "Veuillez indiquer le temps de triage par palette"
        Cells(derlig, 15).Select
        End
    End If
    'si la ligne selectionnée a une police decoloration standard noire, elle est considérée comme la ligne mère
    'la ligne mère génère autant de lignes que de nombre de palettes
    'le temps de triage total et restant est calculé en fonction du temps de triage par palette et le nombre de palettes
    'le temps de triage restant est calculé automatiquement en fonction des palettes débloquées
    'si toutes les palettes sont débloquées, alors la ligne mère devient debloquée aussi
    If Cells(derlig, 1).Font.ColorIndex = xlAutomatic Then
        Application.EnableEvents = False
        derlig2 = Cells(derlig, 9).Value
        Range(Cells(derlig, 1), Cells(derlig, 15)).AutoFill Destination:=Range(Cells(derlig, 1), Cells(derlig + derlig2, 15)), Type:=xlFillCopy
        nb = Cells(derlig, 8).Value / derlig2
        Range(Cells(derlig + 1, 8), Cells(derlig + derlig2, 8)).Value = nb
        Range(Cells(derlig + 1, 9), Cells(derlig + derlig2, 9)).Value = 1
        Cells(derlig, 13).FormulaR1C1 = "=IF(RC[3]=0,""DEBLOCAGE"",""BLOCAGE"")"
        Range(Cells(derlig + 1, 13), Cells(derlig + derlig2, 13)).Value = "BLOCAGE"
        Range(Cells(derlig + 1, 12), Cells(derlig + derlig2, 12)).ClearContents
        Range(Cells(derlig + 1, 1), Cells(derlig + derlig2, 15)).Font.ColorIndex = 3
        Cells(derlig, 16).FormulaR1C1 = "=SUMPRODUCT((palette=""BLOCAGE"")*RC[-1])"
        Cells(derlig, 12) = "=I" & derlig & "*O" & derlig
    End If
    gestion:
    Application.EnableEvents = True
    End Sub
    Je suis débutant en VBA (1semaine de pratique youhou!) c'est pourquoi je ne maîtrise pas encore les subtilités qui permettent de ne plus galérer ^^

    Merci de votre aide!

    Yoann

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    J'ai pas vraiment compris ton problème.
    Mais je vais me lancer
    dans le module de la feuille corespondant
    essaye d'adapter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim derlig As Integer
     
    If Not Intersect(Target, Range(Cells(1, 13), Cells(derlig, 13))) Is Nothing Then 
    'si la zone modifié appartient bien a la zonne clignne 1 ) derlig colonne 13
        If Target.Value = "DEBLOCAGE" Then
    'si la cellule modifié contient bien DEBLOCAGE
            Range(Cells(derlig, 1), Cells(derlig, 16)).Font.ColorIndex= 4
        End If
    End If
    End Sub
    Pourquoi mettre surligné c'est pas plus jolie de changer le fond? En tout cas Underline souligne et ne surligne pas du coup on ne met pas de chiffre utilise la touche quand tu ne connais pas les commandes.

    Quelque suggestion:
    Enlève la gestion d'erreur (pour l'instant) elle t'empêche de savoir ou se situe ton problème.
    Met Option Explicite tout en haut de ton module (avant la première sub) et déclare tes variables (c'es une bonne habitude a prendre)

  3. #3
    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 chubak62 et le forum
    Pas envie de me faire des noeuds avec les boyaux de la tête en essayant de comprendre ton explication, alors je m'amuse avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If cells(derlig , "M") = "DEBLOCAGE" then
         range(cells(derlig , "A"), cells(derlig , "P")).font.underline = True
    else
         range(cells(derlig , "A"), cells(derlig , "P")).font.underline = false
    End if
    si la cellule M de la ligne derlig = "DEBLOCAGE", on souligne le contenu de cellule de A à P, sinon on retire le soulignement
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub repet()
    On Error GoTo gestion
    derlig = [E8].End(xlDown).Row
    'oubli de remplir la case date
    If Cells(derlig, 1).Value = "" Then
        MsgBox "Entrez la date de fabrication"
        Cells(derlig, 1).Select
        '-------------
        Exit Sub
        '-------------
    End If
    'oubli de remplir la case heure
    If Cells(derlig, 3).Value = "" Then
        MsgBox "Veuillez indiquer l'heure"
        Cells(derlig, 3).Select
        '-------------
        Exit Sub
        '-------------
    End If
    'oubli de remplir la case ligne
    If Cells(derlig, 4).Value = "" Then
        MsgBox "veuillez indiquer la ligne de production"
        Cells(derlig, 4).Select
        '-------------
        Exit Sub
        '-------------
    End If
    'oubli de remplir la case code
    If Cells(derlig, 5).Value = "" Then
        MsgBox "Veuillez indiquer le code article"
        Cells(derlig, 5).Select
        '-------------
        Exit Sub
        '-------------
    End If
    'oubli de remplir la case nombre de palettes
    If Cells(derlig, 9).Value = "" Then
        MsgBox "Veuillez entrer le nombre de palettes"
        Cells(derlig, 9).Select
        '-------------
        Exit Sub
        '-------------
    End If
    '---------------------------------------------------------
    'eviter de remplir la case nombre de déchets sur la ligne globale
    Cells(derlig, 10).ClearContents
    '---------------------------------------------------------
    'oubli de remplir la case temps de triage par palette
    If Cells(derlig, 15).Value = "" Then
        MsgBox "Veuillez indiquer le temps de triage par palette"
        Cells(derlig, 15).Select
        End Sub
    End If
    'si la ligne selectionnée a une police decoloration standard noire, elle est considérée comme la ligne mère
    'la ligne mère génère autant de lignes que de nombre de palettes
    'le temps de triage total et restant sont calculés en fonction du temps de triage par palette et nombre de palettes
    'le temps de triage restant est calculé automatiquement en fonction des palettes débloquées
    'si toutes les palettes sont débloquées, alors la ligne mère devient debloquée aussi
    If Cells(derlig, 1).Font.ColorIndex = xlAutomatic Then
        Application.EnableEvents = False
        derlig2 = Cells(derlig, 9).Value
        Range(Cells(derlig, 1), Cells(derlig, 15)).AutoFill Destination:=Range(Cells(derlig, 1), Cells(derlig + derlig2, 15)), Type:=xlFillCopy
        nb = Cells(derlig, 8).Value / derlig2
        Range(Cells(derlig + 1, 8), Cells(derlig + derlig2, 8)).Value = nb
        Range(Cells(derlig + 1, 9), Cells(derlig + derlig2, 9)).Value = 1
        Cells(derlig, 13).FormulaR1C1 = "=IF(RC[3]=0,""DEBLOCAGE"",""BLOCAGE"")"
        Range(Cells(derlig + 1, 13), Cells(derlig + derlig2, 13)).Value = "BLOCAGE"
        Range(Cells(derlig + 1, 12), Cells(derlig + derlig2, 12)).ClearContents
        Range(Cells(derlig + 1, 1), Cells(derlig + derlig2, 15)).Font.ColorIndex = 3
        Cells(derlig, 16).FormulaR1C1 = "=SUMPRODUCT((palette=""BLOCAGE"")*RC[-1])"
        Cells(derlig, 12) = "=I" & derlig & "*O" & derlig
    End If
    '-------------------------------------------------------------------------------
    Range(Cells(derlig + 1, "A"), Cells(derlig + derlig2, "P")).Font.ColorIndex = 3
    '-------------------------------------------------------------------------------
    gestion:
    '----------------------------------------------------------------------
    Application.EnableEvents = True
    If Err.Number <> 0 Then MsgBox Err.Description, , "erreur n°" & Err.Number
    '----------------------------------------------------------------------
    End Sub
    Je n'ai pas testé le code
    Quleques remarques :
    regarde le code encadré par --------------

    End Je n'aime pas l'utiliser, je préfère Exit sub (regarde dans l'aide les différences). Moins je laisse excel décider, moins il risque d'y avoir problème.

    If Cells(derlig, 10).Value <> "" Then pour demander d'effacer ? Pourquoi ne pas effacer directement ?

    Feuille de calcul :
    Faux : 0
    Vrai : tout ce qui n'est pas Faux (-10, -1 , 1, 1,1, etc....)
    VBA
    Faux :False ou 0
    Vrai : True ou -1
    En VBA, même si les autresnombre que 0 sont considérés comme Vrai, il arrive qu'excel se bloque (même avec -1 ou 0). je préfère utiliser True et false, ou une variable déclarée en booléenne.

    Déclaration ou pas : là et la question! Les supers pros s'en passent pour gagner du temps (et perdent des nuit à rechercher l'erreur de frappe). Comme Krovax, moi je préfère m'obliger à les déclarer (en VBA, Outils>>Options>>déclaration des variables obligatoire => ce qui met Option Explicit à chaque nouveau module). Et à les typer : ainsi si je rentre un texte dans une variable nombre, j'ai une chance d'être averti.

    Je ne suis pas tout à fait d'accord avec Krovax : supprimer la gestion d'erreur me semble une erreur, on a EnableEvents à remettre à True.
    Mais il faut la compléter, au moins pour savoir qu'on a une erreur.
    A+

Discussions similaires

  1. [VB.net] Changer couleur ligne DataGrid
    Par bguihal dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/07/2016, 06h54
  2. [WD16] Changer couleur d'une ligne dans une table
    Par jujurochedu42 dans le forum WinDev
    Réponses: 25
    Dernier message: 22/02/2012, 16h42
  3. Changer couleur d'une ligne de richTextBox
    Par diabli73 dans le forum C#
    Réponses: 3
    Dernier message: 28/07/2009, 17h47
  4. Changer Couleur Police Utilisateur
    Par Luisito31 dans le forum IHM
    Réponses: 17
    Dernier message: 10/06/2008, 15h32
  5. [VB6]Changer la couleur d'une ligne d'un ListView
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/03/2003, 17h02

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