XL 2016 VBA condition couleur dessin

Fenris

XLDnaute Nouveau
Bonjour !

Je fais face à un problème épineux pour mes -très- maigres connaissances.

Je pose vite fait le décors.

Sur ma feuille 1, j'ai une centaine de lignes pour 3 colonnes. La première colonne donne le nom. La deuxième donne un nombre (1, 2, 3 ...). La troisième colonne dépend de la 2nd feuille.

Sur ma feuille 2, j'ai une centaine de dessins/forme. Chaque dessin dispose nombre identique à une ligne de la première feuille (celui de la 2eme colonne), afin de pouvoir les liés.

C'est là qu'on rentre dans le vif du sujet. Chaque dessin peut se voir attribuer une couleur (une trentaine de couleurs différentes). En fonction de la couleur du dessin, sa ligne associée dans la feuille 1 verra sa colonne 3 être changée. Exemple : la couleur 192 (rouge foncée) sera associé au chiffre 1, la couleur suivante (rouge) au 2 et ainsi de suite.

Ainsi, mon objectif est de n'avoir qu'à "colorier" (le coloriage, c'est tellement plus facile pour mon âme de fainéant :D) les dessins pour mettre à jour la liste de la feuille 1. Ce qui sous entends le fait de pouvoir changer régulièrement la couleur des dessins.
Et sans que cela puisse bloquer le triage de mon tableau, si je souhaite trier via les chiffres de la colonne 2, 3, ou alphabétiquement

Petite précision, au vu du nombre de couleur nécessaire, je compte aussi utiliser les couleurs disponibles dans les thèmes, et donc leurs versions claires & foncées, ce qui doit probablement complexifier le tout.

Mais étant une quiche en VBA, et ne trouvant pas le moindre tuto pouvant m'aiguiller, je suis complètement bloqué. Je ne sais pas comment faire en sorte qu'un dessin soit associé à une ligne, ni comment faire en sorte qu'un changement de couleur du dessin se rapporte à la dite ligne.

Des pistes ?
 

Fenris

XLDnaute Nouveau
Pour ma culture G, comment remplacer le code ascii 160 par du code ascii 32 ??

Sinon, effectivement, ça marche au top et je vois effectivement que le bouton ne sert à rien, ce qui est encore mieux que ce que j'imaginais.

Seul soucis que je craignais, si je met des couleurs "plus claires" ou "plus sombres", elles ne sont pas toujours prises en compte. Parfois oui, parfois non o_O
Exemple, l'accentuation4, plus clair à 80% (Or chez moi), est prise en compte, mais pas l'accentuation5, plus clair à 80% (Bleu chez mois).

Est -il aussi possible de faire en sorte que la macro lie la "Zone nom", avec la colonne N° donc, et non pas le nom inscrit au sein de l'image ? Par nécessité, les noms des dessins sont régulièrement abrégé ou sous forme de code. Si ce n'est pas possible, je m'adapterais, c'est déjà d'une très grande aide.
 

Dranreb

XLDnaute Barbatruc
Rien compris à quoi il faut lier quoi.
Les Shape ont une position dans la collection Shapes, un nom, et éventuellement un texte, c'est tout.
Edit: Mais je viens de comprendre: les Shape ont reçu comme noms des textes composés de chiffres formant la représentation d'un numéro. D'accord, mais ne serait-il pas alors judicieux de corriger les textes colonne A selon le texte dans le Shape ?
On devrait pouvoir s'économiser un Dictionary, alors.

Tiens, rigolo, un truc que j'ignorais: les espaces insécables sont admis dans les noms de variables. Mais je m'abstiendrai de les utiliser. Je continuerai de commencer toujours mes noms de variables par une majuscule, et si c'est un mot composé, de les coller en mettant une majuscule au début de chaque mot le composant. Comme dans la plupart des fournitures sérieuses d'ailleurs. Mais dans le code que je rédige je tape tout en minuscules pour avoir avant de tenter une compilation, grâce à la casse non corrigée, la primeur de l'information comme quoi ma variable n'est pas déclarée. Et aujourd’hui je n'en tiens généralement même pas compte: j'ajoute mes déclaration de variables manquantes par ordre d'apparition dans le code, en compilant le projet.
 
Dernière édition:

Fenris

XLDnaute Nouveau
Merci Staple1600



C'est effectivement possible de modifier la colonne A en fonction du texte dans le Shape. Ce serait juste moche dans certains cas, dû à de grosses abréviations que je peux mettre dans les textes de Shape (Pour exemple, Ep au lieu de Epsilon, ou Eps-ilon au lieu de Epsilon ... mais c'est du à la taille de mes Shapes qui sont parfois minuscules ou très étroites).

Donc la "Zone nom", qui est à gauche de la "Barre de formule" ne sert strictement à rien ?
D'ailleurs, pour la bonne compréhension de tout le monde, je n'aurais peut être pas du utiliser des chiffres ET pour les couleurs, ET pour la Zone nom/colonne B, excusez moi.


A moins que vous ne parliez justement de remplacer directement le texte de la colonne A par ce que j'ai mis dans la "Zone nom" de chaque Shape ? Si oui, ce cas là n'est malheureusement pas possible.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Comme ça, peut être :
VB:
Private Sub Worksheet_Activate()
Dim Cel As Range, DicCoul As New Dictionary, TNoms(), L As Long, TRés(), _
   Shp As Shape, Texte As String, Coul As Long, Numéro As Long
For Each Cel In Me.Range(Me.[H3], Me.Cells(&H100000, "H").End(xlUp))
   DicCoul(Cel.Interior.Color) = Cel.Offset(, 1).Value: Next Cel
TRés = [A2:C201].Value
For Each Shp In Feuil2.Shapes
   Texte = Shp.TextFrame.Characters.Text
   Numéro = Val(Shp.Name)
   Coul = Shp.Fill.ForeColor
   If Numéro >= 1 And Numéro <= 200 And DicCoul.Exists(Coul) Then
      If Left$(TRés(Numéro, 1), Len(Texte)) <> Texte Then TRés(Numéro, 1) = Texte
      TRés(Numéro, 2) = Numéro
      TRés(Numéro, 3) = DicCoul(Coul): End If
   Next Shp
Me.[A2:C201].Value = TRés
End Sub
Je me demande s'il ne faudrait pas en fait, dans la Légende, faire l'inventaire des couleurs trouvées dans les Shape…
 

Discussions similaires

Réponses
17
Affichages
699
Réponses
0
Affichages
155

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 502
dernier inscrit
talebafia