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 :

Repérer une ligne colorée


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
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut Repérer une ligne colorée
    Salut,
    Je suis débutant en VBA excel.
    Est ce que quelqu'un peut me dire comment faire pour définir une ligne colorée???
    Je dois au fait détecter les lignes colorées que j'ai dans mon fichier pour que après si elles ont la même donnée dans la cellule de la colonne B, j'ajoute une ligne dans la quelle je copie les données des cellules des colonnes A et B et en C, je fais la somme des 2 montants que j'avais pour les lignes colorées dans les cellules de la colonne C.

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Agregate()
    Set CL1 = ThisWorkbook
    Set FL1 = CL1.ActiveSheet
    Worksheets("Feuil1").Copy before:=Worksheets("Feuil1")
        CL1.ActiveSheet.Name = "Copie_Feuil1"
     
        ligne = FL1.Range("A1").Interior.ColorIndex.Row
    Ci-joint un fichier exemple

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    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 doremifaso
    Je suis débutant en VBA excel.
    Est ce que quelqu'un peut me dire comment faire pour définir une ligne colorée???
    petite erreur : les lignes ne sont pas colorées. Seules les cellules le sont.
    Ton exemple ne correspond pas à ta demande.
    Pour ta demande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if FL1.rows(1).cells.interior.colorindex <> xlnone then
    Dans le début de code, il y a confusion : tu fixe FL1 comme étant le classeur contenant la macro. Ensuite, tu ne fixe plus le classeur dans tes instructions => donc, c'est le classeur actif que ce soit celui qui contient la macro ou un autre qui est concerné. Je conseillerais, soit de ne défibir aucune variable pour le classeur, toutes les instructions concernant le classeur actif, soit de fixer une variable pour chaque classeur et de les mentionner à chaque instruction.
    un bout de code suivant l'exemple donné :
    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
    Sub Agregate()
    Dim CL1 As Workbook
    Dim FL1 As Worksheet
    Dim Coul As Long
    Dim X As Long
    Set CL1 = ThisWorkbook 'classeur qui contient la macro
    Set FL1 = CL1.ActiveSheet 'feuille active du classeur qui contient la macro
    Worksheets("Feuil1").Copy before:=Worksheets("Feuil1")
    'créer une copie de Feuil1 du classeur actif
    CL1.ActiveSheet.Name = "Copie_Feuil1"
    'renommer la Feuil1 du classeur contenant la macro ?
    '***
    'CL1.Sheets("Feuil1").Copy before:=CL1.Sheets("Feuil1")
    'ActiveSheet.Name = "Copie_Feuil1"
    'copie dans CL1
    'ou
    'CL1.Sheets("Feuil1").Copy before:=Sheets("Feuil1")
    'ActiveSheet.Name = "Copie_Feuil1"
    'Copie de Cl1 dans le classeur actif
    For X = 1 To Range("A65536").End(xlUp).Row
    'Pour x=1 à dernière ligne non vide en A
        If Range(Range("A" & X), Cells(X, "C")).Interior.ColorIndex <> xlNone Then
        'si la plage Ax:Cx a une couleur
            Coul = Range("A" & X).Interior.ColorIndex
            'index couleur dans coul
            Exit For
            'sortir de la boucle
        End If
    Next X
    End Sub
    Comme tu te dis débutant, je ne suis pas allé plus loin, le but étant que tu te trouves une méthodologie de travail. On peut te donner la notre, mais la méthode de raisonnement est assez personnelle, bien que le nombre d'algorythmes rationnels soit assez limité pour un problème donné. Mais les instructions utilisées dépendent de tes habitudes, de tes connaissances, etc. Et il est important que tu utilises correctement ce que tu sais, les dépannages, modifications étant plus aisés, plutot que d'apprendre (ou de copier) des instructions toutes nouvelles, qui feront la même chose, sans être mieux.

    Jute un conseil : déclare tes variables, et dans le type où tu prévois de les utiliser. D'abord, ça économise de la RAM, ça peut déclecher des erreurs visibles, qui ne sont pas occultées pas l'adaptation de la variable, mais surtout ça évite les fautes de frappe (quand c'est obligatoire, Option Explicit visible en haut de la feuille macro), responsable de tant de vente de perruques et de valises sous les yeux
    A+

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    Merci Beaucoup Gorfael pour tes conseils et de ton aide.
    Mais est ce que vous m'aider à comparer la donnée des cellules de la colonne B pour les lignes colorées???

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bon

    si on admets que la liste est correctement triées et que sa plage démarre en "A1"

    ce qui suis te donne une approche que l'on pourrais appliquer

    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
     
    Sub AGGnFORM()
    Dim I, J, K, U
    Dim nTab()
    I = 2
    J = 3
    ro = Cells(2, 1).End(xlDown).Row
    U = 0
     
    ReDim nTab(3, 0)
    For I = 2 To ro
        If Cells(I, 1) = Cells(I + 1, 1) Then
            If Cells(I, 2) = Cells(I + 1, 2) Then
                K = nTab(2, U) + Cells(I, 3)
                nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = K
                nTab(3, U) = -1
            Else
            End If
        Else
            nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = nTab(2, U) + Cells(I, 3)
            U = UBound(nTab, 2) + 1
            ReDim Preserve nTab(3, U)
        End If
    Next I
     
    For I = 0 To UBound(nTab, 2) - 1
        For J = 0 To 2
            Cells(I + 2, 5).Offset(0, J) = nTab(J, I)
        Next J
        If nTab(J, I) = -1 Then Range(Cells(I + 2, 5), Cells(I + 2, 7)).Interior.Color = RGB(255, 255, 0)
    Next I
     
     
    End Sub

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 19
    Par défaut
    ça marche.
    Merci beaucoup.
    Mais est ce que tu peux juste m'expliquer un peu ce code?
    Merci encore.

  6. #6
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    pas de problemes
    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
     
    Sub AGGnFORM()
    Dim I, J, K, U
     
    Dim nTab()
    'ici, on initialise les valeurs
    I = 2 'on veux commencer sur la ligne deux
    J = 3 'sert à rien, tu peux l'enlever
    ro = Cells(2, 1).End(xlDown).Row 'connaitre la dernière ligne pour s'arreter
    'cette variable nous sert pour initialiser le tableau et rendre le code plus lisible
    U = 0
    'ici on redimensionne le tableau pour la première ligne 
    ReDim nTab(3, 0)
     
    'une boule pour toute les lignes du tableau
    For I = 2 To ro
         'cette condition regarde si us rla colonne A la ligne suivante est identique
        If Cells(I, 1) = Cells(I + 1, 1) Then
            'le même test pour la colonne B
            If Cells(I, 2) = Cells(I + 1, 2) Then
                'on effectue la somme
                K = nTab(2, U) + Cells(I, 3)
                 'on remplit le tableau
                nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = K
                nTab(3, U) = -1 'c'est un tag pour dire qu'il faudra formatter cette ligne
            Else
            End If
        Else
            'on rempli le tableau en ajoutant la valeur du montant
            ' la raison en est que la dernière ligne ne sera pas 
            ' prise en compte dans la condition
            ' ensuite, si la condition n'est pas remplie, c'est que
            ' c'est peut etre une nouvelle ligne et il faut donc l'ajouter égalemnt
            nTab(0, U) = Cells(I, 1): nTab(1, U) = Cells(I, 2): nTab(2, U) = nTab(2, U) + Cells(I, 3)
            'la boucle étant finie, nous ajoutons une ligne au tableau en prévision
            'on commence par établir la taille du tableau et on ajoute 1
            U = UBound(nTab, 2) + 1
            on redimensionne en préservant les données
            ReDim Preserve nTab(3, U)
        End If
    Next I
     
    ' ici, on décharge le tableau sur la feuille
    For I = 0 To UBound(nTab, 2) - 1
        For J = 0 To 2
            Cells(I + 2, 5).Offset(0, J) = nTab(J, I)
        Next J
        'on applique le format si besoin
        If nTab(J, I) = -1 Then Range(Cells(I + 2, 5), Cells(I + 2, 7)).Interior.Color = RGB(255, 255, 0)
    Next I
     
     
    End Sub

Discussions similaires

  1. case à cocher qui colore une ligne d'un tableau
    Par gastoncs dans le forum IHM
    Réponses: 2
    Dernier message: 14/02/2008, 06h40
  2. Comment colorer une ligne cochée dans un SMDBGrid ?
    Par éminfo dans le forum Composants VCL
    Réponses: 1
    Dernier message: 02/12/2007, 10h05
  3. Réponses: 3
    Dernier message: 30/08/2007, 09h56
  4. [Forms]Oracle 11i - Forms: colorer une ligne
    Par memed dans le forum Forms
    Réponses: 9
    Dernier message: 26/03/2007, 16h46
  5. Comment "colorer" une ligne dans formulaire en col
    Par pyxosledisciple dans le forum IHM
    Réponses: 5
    Dernier message: 09/02/2006, 13h29

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