Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA EXCEL] Remplissage de cellule et RGB

Sujet résolu
    9 janvier 2020 à 16:17:01

    Bonjour à tous 
    Ce sujet à déjà été évoqué par le passé mais le dernier traité datant de 2015 je me permet d'en créer un nouveau.
    J'ai besoin de colorer automatiquement le fond d'une cellule en fonction de valeurs RGB contenues dans d'autres cellules.
    Peu m'importe la forme, hexa ou décimale..
    Par exemple les cellules A B et C contiennent les valeurs R G et B et D est à colorer
    ou bien la cellule A contient la valeur "R,G,B" (en décimal) et D est à colorer
    ou encore la cellule A contient la valeur RGB en hexadécimal et D est à colorer
    J'ai déjà trouvé des macros qui remplissent bien cette fonction mais...  elles ne fonctionnent qu'à un changement de valeur de cellule. Par exemple je remplis manuellement A1, B1 et C1, alors  D1 se colore.
     Mon soucis est que j'ai plusieurs centaines de lignes contenant chacune 3 valeurs RGB différentes et je veux pouvoir faire apparaître pour chaque ligne la couleur correspondante.
    J'ai essayé de copier et coller mes colonnes mai ça ne fonctionne pas non plus.
    Donc il y a-t-il une solution pour par exemple lancer une macro une fois les colonnes remplies ou tout autre solution?
    ci-après un exemple de l'attendu https://www.cjoint.com/c/JAjoIprwmJX
    En vous remerciant beaucoup par avance!
    • Partager sur Facebook
    • Partager sur Twitter
      9 janvier 2020 à 19:27:54

      Salut,

      Il faut adapter le code que tu as trouvé pour qu'il s'exécute sur les lignes que tu veux, a priori juste une boucle de la premère à la dernière ligne remplie.

      • Partager sur Facebook
      • Partager sur Twitter
        9 janvier 2020 à 20:33:55

        Malheureusement ma non- maîtrise VBA  ne le permet pas de le faire... 🤪

        Voici le code que j'ai trouvé .. si jamais 😁

        PrivateSub Worksheet_Change(ByVal Target As Range)With Target If.Count =1ThenIf.Column <4Then Cells(.Row,4).Interior.Color = RGB(Cells(.Row,1), Cells(.Row,2), Cells(.Row,3))EndIfEndIfEndWithEndSub
        • Partager sur Facebook
        • Partager sur Twitter
          10 janvier 2020 à 7:55:00

          Quelques directions pour modifier.

          Crée un module où mettre la macro, insère la et renomme la, par exemple "ColorieCellules".

          Pour parcourir toutes les lignes tu peux utiliser une boucle For et en supposant que toutes les cellules de la colonne A soient remplies jusqu'à la dernière ligne utile alors le code suivant te donnera le numéro de la dernière ligne :

          Dim lastRow as Long
          lastRow = Cells(1,1).End(xlDown).Row

          Ensuite dans la boucle il suffit de reprendre la ligne qui change la couleur de fond de la cellule et ça devrait être bon.

          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2020 à 14:29:54

            Je te remercie d'avoir pris le temps de me répondre 

            J'ai trouvé une ligne simple qui répond à ma demande :

             Range("D1").Interior.Color = RGB(Range("A1"), Range("B1"), Range("C1"))


            Comme déjà évoqué mes connaissances sont très limitées en VBA. j'ai essayé de mettre en place une boule avec For mais  sans succès il doit me manquer quelque chose.. car ma formule initiale fait référence à des cellules précises et je ne vois pas comment faire évoluer ces valeurs dans la boucle (comme passer de A1 à A2 etc)

            A quoi ressemblerait le code si je devais par exemple réexecuter la ligne de code sur 100 lignes par exemple?

            merci bcp par avance 

            Cdt

            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2020 à 16:03:30

              Quand je dois faire "bouger" la cellule que je regarde (par exemple quand je parcours des lignes) je préfère utiliser Cells plutôt que Range, c'est un peu plus direct.

              Par exemple Cells(10,3) correspond à la ligne 10 colonne 3 c'est l'équivalent de Range("C10").

              Si je fais varier la ligne je peux Cells(numero_ligne,3).

              Un exemple de boucle qui parcourt les lignes 1 à 100 et écrit le calcul du numéro de ligne au carré en colonne B :

              Sub test()
                  Dim i_row As Long
                  For i_row = 1 To 100
                      ' Ecrit dans la feuille active, attenton à ne pas écraser des données en exécutant ce code au mauvais endroit
                      Cells(i_row, 2).Value = i_row * i_row
                  Next i_row
              End Sub



              • Partager sur Facebook
              • Partager sur Twitter
                10 janvier 2020 à 16:49:42

                ok merci pour cet exemple ! je vais y arriver  :)
                • Partager sur Facebook
                • Partager sur Twitter
                  15 janvier 2020 à 8:04:13

                  Un immense merci c'est parfait!!!

                  Sub test()
                      Dim i_row As Long
                      For i_row = 1 To 100
                          Cells(i_row, 4).Interior.Color = RGB(Cells(i_row, 1), Cells(i_row, 2), Cells(i_row, 3))
                      Next i_row
                  End Sub
                  

                  Excellente journée

                  • Partager sur Facebook
                  • Partager sur Twitter

                  [VBA EXCEL] Remplissage de cellule et RGB

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown