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 :

Code couleurs pour valeurs d'un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut Code couleurs pour valeurs d'un tableau
    Salut,

    Je suis débutant en VBA.

    J'ai un fichier Excel avec deux sheets, sur la sheet 3 je récupère les données se trouvant sur la colonne R de la sheet 1.

    Pour ce qui est de la structure des 2 sheets:

    Dans la sheet 3 de la cell(1,4) jusqu'à la cell(1,97) j'ai un ensemble de clés, ces dernières sont les mêmes que les clés que je pourrais avoir avec les noms des cells (k,6) à (k,17) sur la sheet 1.

    Pour le tableau de la sheet 3 j'ai 356 lignes pour 97 colonnes.

    Pour la sheet 1 j'ai 24 colonnes et 3402 lignes. Le nombre des lignes pouvant changé sur cette sheet j’ai une boucle qui s'arrête à la dernière ligne renseignée avec un find qui s'appuie sur la comparaison entre la colonne Y de la sheet 1 et de la colonne C de la sheet 3.

    Dans les cellules de ma sheet 3 je récupère les données de la colonne R de la sheet 1.

    J’arrive à remplir mon tableau comme il faut, mais le problème c’est que je souhaiterais avoir les valeurs prises de la colonne R de la sheet 1 avec des couleurs différentes selon leurs types ( types 1,2 ou 3 présents sur la colonne C de la sheet 1).

    Je ne sais pas comment je pourrais introduire ça dans ma boucle ??

    En effet, si vous regarder de plus près un bout de mon tableau ci-joint vous verrez que pour une seule cellule dans la sheet 3 je peux avoir plusieurs valeurs (prises de la colonne R de la sheet 1) de types différents (types définis dans la colonne C de la sheet 1). C’est pour cette raison que je souhaite prendre en compte le type en instaurant un code couleur pour les valeurs. Comme ça je pourrais avoir dans une même cellule 3 les valeurs avec des couleurs différentes correspondant à des types différents.

    N’hésitez pas à exposer vos idées.

    Merci d’avance.

    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
    Sub test()
    Dim i As Integer, j As Integer, k As Integer
    Dim cle As String, CurrString As String
    Dim FL1 As Worksheet 'Feuille "Sheet3"
    Dim FL2 As Worksheet 'Feuille "Sheet1"
    Dim c As Range, LigDeb As String
       Application.ScreenUpdating = False
    'Instanciation des feuilles de calculs concernées (pour simplifier le code à venir)
         Set FL1 = Worksheets("Sheet3")
         Set FL2 = Worksheets("Sheet1")
        CurrString = ""
        j = 4
        Application.ScreenUpdating = False
        While FL1.Cells(1, j).Value <> ""
     
            For i = 2 To 360
    'La clé est constituée de la colonne 3 d'une même ligne & de la colonne J de la ligne 1
                cle = FL1.Cells(i, 3).Value & FL1.Cells(1, j).Value
     
    'Recherche de la valeur de FL1.Cells(i,3) dans la colonne F de FL2
                With FL2.Range("Y2:Y" & Split(FL2.UsedRange.Address, "$")(4))
                    Set c = .Find(FL1.Cells(i, 3).Value)
                    If Not c Is Nothing Then
                        LigDeb = c.Address
                        Do
                            k = c.Row
                            CurrString = FL2.Cells(k, 5).Value & FL2.Cells(k, 6).Value & FL2.Cells(k, 7).Value & FL2.Cells(k, 8).Value & FL2.Cells(k, 9).Value & FL2.Cells(k, 10).Value & FL2.Cells(k, 11).Value & FL2.Cells(k, 12).Value & FL2.Cells(k, 13).Value & FL2.Cells(k, 14).Value & FL2.Cells(k, 15).Value & FL2.Cells(k, 16).Value & FL2.Cells(k, 17).Value
                            If CurrString = cle Then FL1.Cells(i, j) = FL2.Cells(k, 18)
    'Cette recherche ne se poursuit que si FL1.Cells(i, 1) a été trouvé
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> LigDeb
                    End If
                End With
            Next i
    'Ajoute une ligne à FL1
            j = j + 1
        Wend
       Application.ScreenUpdating = True
    End Sub
    NB: code couleurs : type1 noir en gras, type2 rouge, type3 en bleu

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,
    voilà un splendide code pour un débutant en VBA.

    Pour ton formattage conditionnel, je te suggère de traiter le type de ta donnée à rapatrier et de formatter la colonne de ta valeur en conséquence.

    Si tu trouves la valeur en feuille 1, le type est sur la même ligne dans la colonne C.

    Ensuite c'est juste un code du type select case pour choisir la couleur en fonction du type et tu peux utiliser .Interior.ColorIndex sur ta cellule pour colorier.

    Cà devrait le faire.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    Merci Godzestla pour le compliment, mais des membres du forum m'ont beaucoup aidé dans la réalisation du code que j'ai dû juste adapter à mon grand tableau ( désolé de te décevoir mais je suis vraiment un novice en VBA )

    Je ne vois pas trop comment il faut faire pour faire correspondre à chaque type une couleur? où faut-il insérer tout cela dans le code?

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,

    voilà le code modifié.

    j'ai supposé que ton type était en string et valait "1" ou "2" ou "3".

    Si c'est numérique, tu remplace la definition de dType de string en integer et dans le select case, tu testes avec 1 2 ou 3 sans les quotes.

    je n'ai pas testé !!!!!!!! ni compilé......


    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
    Sub test()
    Dim i As Integer, j As Integer, k As Integer
    Dim cle As String, CurrString As String
    Dim FL1 As Worksheet 'Feuille "Sheet3"
    Dim FL2 As Worksheet 'Feuille "Sheet1"
    Dim c As Range, LigDeb As String
    Dim Dtype as string
       Application.ScreenUpdating = False
    'Instanciation des feuilles de calculs concernées (pour simplifier le code à venir)
         Set FL1 = Worksheets("Sheet3")
         Set FL2 = Worksheets("Sheet1")
        CurrString = ""
        j = 4
        Application.ScreenUpdating = False
        While FL1.Cells(1, j).Value <> ""
           
            For i = 2 To 360
    'La clé est constituée de la colonne 3 d'une même ligne & de la colonne J de la ligne 1
                cle = FL1.Cells(i, 3).Value & FL1.Cells(1, j).Value
                
    'Recherche de la valeur de FL1.Cells(i,3) dans la colonne F de FL2
                With FL2.Range("Y2:Y" & Split(FL2.UsedRange.Address, "$")(4))
                    Set c = .Find(FL1.Cells(i, 3).Value)
                    If Not c Is Nothing Then
                        LigDeb = c.Address
                        Do
                            k = c.Row
                            CurrString = FL2.Cells(k, 5).Value & FL2.Cells(k, 6).Value & FL2.Cells(k, 7).Value & FL2.Cells(k, 8).Value & FL2.Cells(k, 9).Value & FL2.Cells(k, 10).Value & FL2.Cells(k, 11).Value & FL2.Cells(k, 12).Value & FL2.Cells(k, 13).Value & FL2.Cells(k, 14).Value & FL2.Cells(k, 15).Value & FL2.Cells(k, 16).Value & FL2.Cells(k, 17).Value
                            If CurrString = cle Then 
                               FL1.Cells(i, j) = FL2.Cells(k, 18)
                              'récupère le type qui est en colonne c'
                               dtype = FL2.Cells(k,3)
                               with FL1.Cells(i,j).Font
                              select case dtype
                               case "1" 
                                   .Bold = True
                                   .ColorIndex = xlAutomatic
                               case "2"
                                   .Bold = False
                                   .Colorindex = 3
                               case "3"
                                   .Bold = False
                                   .Colorindex = 5
                               case else
                                   .Bold = False
                                   .colorindex = xlautomatic
                            end select
                           end with
                        end if
    'Cette recherche ne se poursuit que si FL1.Cells(i, 1) a été trouvé
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> LigDeb
                    End If
                End With
            Next i
    'Ajoute une ligne à FL1
            j = j + 1
        Wend
       Application.ScreenUpdating = True
    End Sub
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    Merci Godzestla ton code marche bien, sauf que je n'arrive pas à afficher deux types de valeurs dans une même case...

    Dans mon tableau j'ai des valeurs de types différents qui correspondent à la même cellule, le problème avec ton code c'est qu'il ne m'affiche qu'une seule valeur par cellule.

    Comment je pourrais faire ?

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Ce n'est pas mon code qui affiche les valeurs.
    C'est celui que tu as proposé.

    Je crois que tu formules mal ta demande.

    Veux-tu plutot dire que tu veux que les attributs de la cellule combinent les differents types qui y correspondent ?

    Si oui, 3 remarques :
    1) ce n'est pas ce que tu avais demandé.
    2) une cellule du type rouge et bleu, ça n'existe pas.
    3) il faut changer la logique pour traiter les attributs déjà affecté à la cellule.

    Ah la la. On a beau écrire que la qualité de la réponse est directement proportionnelle à celle de la question, parfois...... on rame.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    Oui ta raison Godzestla je me suis mal exprimé, mais je pensais qu'en changeant les couleurs des valeurs selon le type, la cellule allait accueillir plusieurs valeurs.

    en effet, une cellule peut accueillir plusieurs valeurs, j'ai testé ça avec l'enregistreur des macros mais ca m'avance pas trop, mais je pense que c'est possible.

    je n'ai aucune idée concernant comment je pourrais améliorer le code.
    Est ce que tu as des pistes?

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par mouncefdi Voir le message
    en effet, une cellule peut accueillir plusieurs valeurs, j'ai testé ça avec l'enregistreur des macros mais ca m'avance pas trop, mais je pense que c'est possible.
    Alors là, c'est the scoop.
    Et tu as testé cela comment avec ton enregistreur de macro.

    C'est clair qu'une cellule peut acceuillir plusieurs valeurs, même toutes les valeurs, mais 1 à la fois ou alors une combinaison.
    Donc dans ton cas, factorielle de 3 combinaisons.
    Il t'appartient de définir ce que tu veux car pour l'instant, tu me parles en chinois.

    Tu mélange valeurs, propriétés, types....
    Peux-tu parler concret en ayant bien réfléchi à ce que tu demandes ?
    Là on pourrait avancer.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  9. #9
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    saluut Godzestla,

    Si tu vas voir mes ligne 2, 5 et 6 de la sheet 1 (voir piece jointe avant) tu comprendras que la seule différence entre ces deux lignes est leurs cellules de la colonne C (elles sont de types différents).

    Mon code ne va pas me mettre les 3 valeurs (prises de la colonne R sheet 1) dans la cellule correspondante de ma sheet 3 (il va m’affecter juste une seule valeur dans la cellule et c’est ça mon grand problème).

    J’ai activé l’enregistreur des macros, puis je me suis placé sur une cellule, en utilisant Alt+Entrée, j’ai introduit 3 valeurs 23, 24 et 58 et voila ce que ça donne comme code.

    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
    Sub Macro1()
     
     
        ActiveCell.FormulaR1C1 = "23" & Chr(10) & "24" & Chr(10) & "58"
        With ActiveCell.Characters(Start:=1, Length:=8).Font
            .Name = "Arial"
            .FontStyle = "Regular"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 3
        End With
        Range("G14").Select
    End Sub


    Ma question est comment je peux introduire ça dans mon code?

    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
    Sub test()
    Dim i As Integer, j As Integer, k As Integer
    Dim cle As String, CurrString As String
    Dim FL1 As Worksheet 'Feuille "Sheet3"
    Dim FL2 As Worksheet 'Feuille "Sheet1"
    Dim c As Range, LigDeb As String
    Dim Dtype as string
       Application.ScreenUpdating = False
    'Instanciation des feuilles de calculs concernées (pour simplifier le code à venir)
         Set FL1 = Worksheets("Sheet3")
         Set FL2 = Worksheets("Sheet1")
        CurrString = ""
        j = 4
        Application.ScreenUpdating = False
        While FL1.Cells(1, j).Value <> ""
     
            For i = 2 To 360
    'La clé est constituée de la colonne 3 d'une même ligne & de la colonne J de la ligne 1
                cle = FL1.Cells(i, 3).Value & FL1.Cells(1, j).Value
     
    'Recherche de la valeur de FL1.Cells(i,3) dans la colonne F de FL2
                With FL2.Range("Y2:Y" & Split(FL2.UsedRange.Address, "$")(4))
                    Set c = .Find(FL1.Cells(i, 3).Value)
                    If Not c Is Nothing Then
                        LigDeb = c.Address
                        Do
                            k = c.Row
                            CurrString = FL2.Cells(k, 5).Value & FL2.Cells(k, 6).Value & FL2.Cells(k, 7).Value & FL2.Cells(k, 8).Value & FL2.Cells(k, 9).Value & FL2.Cells(k, 10).Value & FL2.Cells(k, 11).Value & FL2.Cells(k, 12).Value & FL2.Cells(k, 13).Value & FL2.Cells(k, 14).Value & FL2.Cells(k, 15).Value & FL2.Cells(k, 16).Value & FL2.Cells(k, 17).Value
                            If CurrString = cle Then 
                               FL1.Cells(i, j) = FL2.Cells(k, 18)
                              'récupère le type qui est en colonne c'
                               dtype = FL2.Cells(k,3)
                               with FL1.Cells(i,j).Font
                              select case dtype
                               case "1" 
                                   .Bold = True
                                   .ColorIndex = xlAutomatic
                               case "2"
                                   .Bold = False
                                   .Colorindex = 3
                               case "3"
                                   .Bold = False
                                   .Colorindex = 5
                               case else
                                   .Bold = False
                                   .colorindex = xlautomatic
                            end select
                           end with
                        end if
    'Cette recherche ne se poursuit que si FL1.Cells(i, 1) a été trouvé
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> LigDeb
                    End If
                End With
            Next i
    'Ajoute une ligne à FL1
            j = j + 1
        Wend
       Application.ScreenUpdating = True
    End Sub
    En gros, je pense qu'il faut traiter le cas où on a plusieurs cas où le CurrString = cle (cf. code)

    J'espère que c'est clair, si ce n'est pas le cas n'hésite pas à me le dire
    Merci d'avance.

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,
    c'est en fait ce que j'avais déjà compris, mais tu ne te poses pas la bonne question.

    Tu dis que tu veux introduire les 3 valeurs dans une cellule. Ok, mais que veux tu avoir comme valeur combinée. Moi je n'en sais rien.
    A toi donc de dire si tu veux un résultat de calcul (bonne chance pour le pondre sans doublon), un string combiné (même remarque), ou encore autrechose.

    Donc, si tu commençais par dire ce que tu veux effectivement obtenir avec cette technique, on pourrait réfléchir à la manière d'y arriver, et pas le contraire.

    NB : je ne sais pas quelles sont les valeurs que tu veux combiner.

    NB2: mon petit doigt me dis que tu veux juste totaliser les valeurs en R, mais c'est expliqué où cela ?
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  11. #11
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    concrètement dans le tableau de la sheet 3 je souhaite avoir dans la cellule D3 les valeurs : 200, 300 et 57. (et non pas juste 200 comme c'est le cas dans mon code).
    le code ne prend pas en compte les autres valeurs qui correspondent à la cellule D3, sheet3.( il ne me met que la première valeur qu'il trouve dans la sheet 1)

  12. #12
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Je ne suis pas complètement lourd, je comprends.

    mais tu veux 200, 300 et 57. comment ?

    557
    200,300 et 57
    200,300,57

    Coucou 200, hello 300, salut 57

    ....

    Et tu n'as toujours pas dit comment tu veux combiner le rouge et le bleu
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  13. #13
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    dsl
    200,300,57
    qu'est ce que tu veux dire par combiner le rouge et le bleu? ( les couleurs sont deja affectéespar type...)

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut Code pour insérer plusieurs valeurs dans une cellule
    Salut,

    Je suis débutant en VBA.

    J'ai un fichier Excel avec deux sheets, sur la sheet 3 je récupère les données se trouvant sur la colonne R de la sheet 1.

    Pour ce qui est de la structure des 2 sheets:

    Dans la sheet 3 de la cell(1,4) jusqu'à la cell(1,97) j'ai un ensemble de clés, ces dernières sont les mêmes que les clés que je pourrais avoir avec les noms des cells (k,6) à (k,17) sur la sheet 1.

    Pour le tableau de la sheet 3 j'ai 356 lignes pour 97 colonnes.

    Pour la sheet 1 j'ai 24 colonnes et 3402 lignes. Le nombre des lignes pouvant changé sur cette sheet j’ai une boucle qui s'arrête à la dernière ligne renseignée avec un find qui s'appuie sur la comparaison entre la colonne Y de la sheet 1 et de la colonne C de la sheet 3.

    Dans les cellules de ma sheet 3 je récupère les données de la colonne R de la sheet 1.

    Dans le code pour chaque types (types1,2 ou 3, sur la colonne C sheet1) de valeurs prises de la colonne R de la sheet 1 on a une couleurs précise.

    En effet, si vous regarder de plus près un bout de mon tableau ci-joint vous verrez que pour une seule cellule dans la sheet 3 je peux avoir plusieurs valeurs (prises de la colonne R de la sheet 1) de types différents (types définis dans la colonne C de la sheet 1). Voir ligne 2,5 et 6 de la sheet 1 où il y a que le type qui change.

    Le problème avec mon code est qu’il ne m’affiche que 200 dans la cellule D3 sheet3 au lieu de m’afficher les 3 valeurs : 200,300,57.

    J’ai utiliser l’enregistreur des macros ça me donne 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
    Sub Macro1()
     
     
        ActiveCell.FormulaR1C1 = "23" & Chr(10) & "24" & Chr(10) & "58"
        With ActiveCell.Characters(Start:=1, Length:=8).Font
            .Name = "Arial"
            .FontStyle = "Regular"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 3
        End With
        Range("G14").Select
    End Sub
    Comment je peux incorporer ça dans mon code ???

    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
    Sub test()
    Dim i As Integer, j As Integer, k As Integer
    Dim cle As String, CurrString As String
    Dim FL1 As Worksheet 'Feuille "Sheet3"
    Dim FL2 As Worksheet 'Feuille "Sheet1"
    Dim c As Range, LigDeb As String
    Dim Dtype as string
       Application.ScreenUpdating = False
    'Instanciation des feuilles de calculs concernées (pour simplifier le code à venir)
         Set FL1 = Worksheets("Sheet3")
         Set FL2 = Worksheets("Sheet1")
        CurrString = ""
        j = 4
        Application.ScreenUpdating = False
        While FL1.Cells(1, j).Value <> ""
     
            For i = 2 To 360
    'La clé est constituée de la colonne 3 d'une même ligne & de la colonne J de la ligne 1
                cle = FL1.Cells(i, 3).Value & FL1.Cells(1, j).Value
     
    'Recherche de la valeur de FL1.Cells(i,3) dans la colonne F de FL2
                With FL2.Range("Y2:Y" & Split(FL2.UsedRange.Address, "$")(4))
                    Set c = .Find(FL1.Cells(i, 3).Value)
                    If Not c Is Nothing Then
                        LigDeb = c.Address
                        Do
                            k = c.Row
                            CurrString = FL2.Cells(k, 5).Value & FL2.Cells(k, 6).Value & FL2.Cells(k, 7).Value & FL2.Cells(k, 8).Value & FL2.Cells(k, 9).Value & FL2.Cells(k, 10).Value & FL2.Cells(k, 11).Value & FL2.Cells(k, 12).Value & FL2.Cells(k, 13).Value & FL2.Cells(k, 14).Value & FL2.Cells(k, 15).Value & FL2.Cells(k, 16).Value & FL2.Cells(k, 17).Value
                            If CurrString = cle Then 
                               FL1.Cells(i, j) = FL2.Cells(k, 18)
                              'récupère le type qui est en colonne c'
                               dtype = FL2.Cells(k,3)
                               with FL1.Cells(i,j).Font
                              select case dtype
                               case "1" 
                                   .Bold = True
                                   .ColorIndex = xlAutomatic
                               case "2"
                                   .Bold = False
                                   .Colorindex = 3
                               case "3"
                                   .Bold = False
                                   .Colorindex = 5
                               case else
                                   .Bold = False
                                   .colorindex = xlautomatic
                            end select
                           end with
                        end if
    'Cette recherche ne se poursuit que si FL1.Cells(i, 1) a été trouvé
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> LigDeb
                    End If
                End With
            Next i
    'Ajoute une ligne à FL1
            j = j + 1
        Wend
       Application.ScreenUpdating = True
    End Sub
    NB: je suis vraiment débutant, ce code a été fait par une autre personne et je souhaitrais l'améliorer
    Fichiers attachés Fichiers attachés

  15. #15
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    re Godzestla,

    on est deux personnes à travailler sur ce code.Mon collègue à décider de créer une autre discussion pour rendre le sujet plus explicite pour ceux et celle qui voudront nous aider.

    est ce que tu as une solution pour les valeurs?

    Il ne s'agit pas d'un exercice scolaire, mais de l'amélioration d'une notifications financière.

    NB: on a jamais fait de VBA en ecole et ceci est très vrai.

  16. #16
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 330
    Points
    34 330
    Par défaut
    Bonjour azerty1956 et mouncefdi,
    à problématique identique = une seule discussion, merci pour les autres membres qui souhaitent vous apporter leur aide.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  17. #17
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    Okay c'est noté...dsl on pensait pas créer un désagrément pour les utilisateurs.
    Merci d'avance pour ceux qui voudront nous aider.

  18. #18
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Sorry,
    comme indiqué je jette l'éponge. je ne le sens pas et comme j'ai dit cela ne mène nulle-part.

    Essayer "Pivot Table" (Tableau croisé dynamique) dans excel et ce sera mieux que ce que vous voulez pondre.

    Bonne chance et Adios.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  19. #19
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Points : 41
    Points
    41
    Par défaut
    okay je vais continuer à chercher de mon coté, je pense que c'est tout à fait possible de faire celà.

    Pour les experts qui veulent intervenir à ce sujet, vos remarques quant à la faisabilité de l'insertion de plusieurs valeurs dans une cellule sont les bienvenue.

  20. #20
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 330
    Points
    34 330
    Par défaut
    de mon côté, comme j'ai aussi bcp de mal à suivre votre problématique, voici juste un exemple de manipulation de la couleur dans une chaine de caractères d'une cellule :
    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
    Range("A1").Select
        ActiveCell.FormulaR1C1 = "a b c"
        With ActiveCell.Characters(Start:=1, Length:=1).Font
            .Name = "Arial"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 47
        End With
        With ActiveCell.Characters(Start:=2, Length:=1).Font
            .Name = "Arial"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        With ActiveCell.Characters(Start:=3, Length:=1).Font
            .Name = "Arial"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 47
        End With
    de deux choses l'une, soit votre problématique est mal posée, soit vous l'avez mal interprétée, car il me semble bien compliqué de devoir réaliser tout cela en partant de 0
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] mise en forme conditionnelle avec code couleur (3 valeurs)
    Par StayTrippy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/05/2014, 18h23
  2. [XL-2007] Progamme VBA pour remplissage de cellule en couleur pour valeur famille de 1000 a 9000
    Par gabigabou dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/05/2014, 14h26
  3. code java pour récupérer la valeur d'un neoud XML
    Par MASSAKA dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 14/10/2005, 15h17
  4. Calcul simple pour code couleur
    Par Boumeur dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/04/2005, 10h51

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