XL 2019 VBA - Colorer selection copie

Saumon80

XLDnaute Occasionnel
Bonjour,

J'ai un fichier avec plusieurs colonnes.

Je souhaite simplement colorer la selection que je copie en couleur et je souhaiterait que chaque selection ai une couleur differente.

Je souhaiterais egalement que la selection copie reste coloree .

Merci pour votre aide car je suis vraiment novice avec VBA.

Cordialement
 

Pièces jointes

  • Book2.xlsx
    9 KB · Affichages: 20

fanch55

XLDnaute Barbatruc
Bonjour,
Un code qui pourrait faire ce que vous demandez à placer dans le code de la feuille concernée:
VB:
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastCmd As String, SelCol As Long

    LastCmd = Application.CommandBars("Standard").Controls("&Refaire").List(1)
   
    If LastCmd Like "Coller*" Then          ' Dernière action = "coller"
        SelCol = Selection.Interior.Color   ' Couleur de fond de la sélection collée
        'Appel au dialog box ColorPicker avec le selcol
        If Application.Dialogs(xlDialogEditColor).Show _
            (1, SelCol Mod 256, (SelCol \ 256) Mod 256, SelCol \ 65536) Then
            ' On applique la couleur choisie à la sélection
            Selection.Interior.Color = ActiveWorkbook.Colors(1)
        End If
    End If

End Sub
 

Saumon80

XLDnaute Occasionnel
Bonjour et merci beaucoup!

Cela ne marche pas quand je colle le code , peut etre car j'utilise une version anglaise et certaines lignes sont en francais?
Egalement est il possible de lier cela a la fonction copier au lieu de coller?

Merci!
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Saumon80
Puisque tu débutes une solution possible avec MFC par VBA
Sur une feuille vide, mets des valeurs dans les cellules A1 à A18
puis lances la macro test
VB:
Sub test()
copie Range("A1:A18"), Range("C1")
End Sub
Sub copie(source As Range, desti As Range)
Dim r As Range
source.Copy desti
Set r = Selection
r.FormatConditions.AddColorScale ColorScaleType:=3
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
r.FormatConditions(1).ColorScaleCriteria(1).Type = xlConditionValueLowestValue
r.FormatConditions(1).ColorScaleCriteria(1).FormatColor.Color = 7039480
r.FormatConditions(1).ColorScaleCriteria(2).Type = xlConditionValuePercentile
r.FormatConditions(1).ColorScaleCriteria(2).Value = 50
r.FormatConditions(1).ColorScaleCriteria(2).FormatColor.Color = 16776444
r.FormatConditions(1).ColorScaleCriteria(3).Type = xlConditionValueHighestValue
r.FormatConditions(1).ColorScaleCriteria(3).FormatColor.Color = 13011546
End Sub
 

fanch55

XLDnaute Barbatruc
Cela ne marche pas quand je colle le code , peut etre car j'utilise une version anglaise et certaines lignes sont en francais?
VB:
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastCmd As String, SelCol As Long

    LastCmd = Application.CommandBars("Standard").Controls("&Undo").List(1)
 
    If LastCmd Like "Paste*" Then          ' Last action = "paste"
        SelCol = Selection.Interior.Color   ' selection Backcolor
        'Call dialog box ColorPicker with selcol rgb
        If Application.Dialogs(xlDialogEditColor).Show _
            (1, SelCol Mod 256, (SelCol \ 256) Mod 256, SelCol \ 65536) Then
            ' Set picked color to selection
            Selection.Interior.Color = ActiveWorkbook.Colors(1)
        End If
    End If

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour fanch55

Apparemment, je suis pas le seul à penser MFC

Par contre, Saumon80 est le seul à ne pas signaler qu'il multi-poste sa question :rolleyes:
(Pourtant la charte explique bien les tenants et les aboutissants)
 

Saumon80

XLDnaute Occasionnel
Merci beaucoup pour vos reponses.
Autant pour moi , je dois avouer ne pas avoir pris connaissance de la charte et ne savais pas qu'il ne fallait pas multi-poster!

En fait le code de fanch est nickel mais je souhaite juste apporter 2 modifications :

1- Ne pas appeler le color picker mais appliquer automatiquement une couleur aleatoire a chaque copie.
2- L'appliquer a la copie et non au collage car je souhaite coller en dehors d'excel , je souhaite quand je copie une plage la colorer d'une couleur aleatoire pour savoir que je l'ai coller.

Merci encore
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Un changement de teinte devrait suffire alors. Mais pourquoi aléatoire ? Un roulement sur 12 couleurs par exemple ne serait-il pas mieux ?
Comme ça par exemple :
VB:
Option Explicit
Private NuCoul As Integer
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim Clr As New Couleur
   Clr.EAF 500, (NuCoul + 0.5) / 2
   Target.Interior.Color = Clr.C: Target.Font.Color = Clr.CP
   NuCoul = NuCoul Mod 12 + 1
   End Sub
 

fanch55

XLDnaute Barbatruc
2- L'appliquer a la copie et non au collage car je souhaite coller en dehors d'excel , je souhaite quand je copie une plage la colorer d'une couleur aleatoire pour savoir que je l'ai coller.
Il n'y a pas de solution miracle pour trapper une copy .
Copier ne veut pas dire forcément Coller . 😩
Peut-être en faisant une usine à gaz pour surveiller le Presse-Papier , je vais y réfléchir ...
 

Discussions similaires

Statistiques des forums

Discussions
312 230
Messages
2 086 427
Membres
103 207
dernier inscrit
Michel67