Insérer un icone faisant parti d'un set d'icone depuis VBA
Je souhaiterais savoir si depuis VBA il est possible d'insérer dans une cellule, un icone faisant parti d'un set d'icone, ceux de la mise en forme conditionnelle qui sont en set de 3 ou plus. (parce qu'ils sont joli ^^)
Et plus particulièrement l'icône de validation et de croix.
par exemple en faisant l'action insert.object.icone.Id266 (c'est du grand n'importe quoi hein mais c'est parce que je suis débutant)
En fait je voudrais créer une macro évènement double clique.
Quand la case est vide le double clique = icone Validation Vert
Quand la case contient déjà l'icone validation vert alors croix rouge
et aussi l'inverse quand croix rouge alors validation vert.
J'ai réussi à faire ce que je voulais en faisant une macro qui attribut le chiffre 1 ou 2 en suivant la règle du dessus. et en ajoutant par dessus
la mise en forme conditionnelle de jeux d'icone, du coup mes 1 se transforment en croix rouge et les 2 en validation vert (comme je veux finalement)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Value = "" Then 'si la cellule est vide alors
Target.Value = 1 'valeur = 1
Else 'Sinon
If Target.Value = 1 Then 'si la cellule =1 alors
Target.Value = 2 'valeur = 2
Else 'Sinon
If Target.Value = 2 Then 'si la cellule =2 alors
Target.Value = 1 'valeur = 1
End If
End If
End If
End Sub
alors désolé le code est très simpliste et pas du tout optimisé mais c'est avec mon niveau de compétence.
Donc finalement vous allez me demander pourquoi je viens demander de l'aide si ça marche
bah du coup je souhaiterais directement dans ce code remplacer les valeur 1 et 2 par les icones validation et croix,
car dans ma mise en forme actuelle, quand on clique on voit le 1 se mettre dans la case puis ensuite se transformer en icone, ça fait bidouillage
J'ai regardé en enregistrant une macro et en mettant la mise en forme, pour espérer récupérer l'ID des icones, mais je n'y comprends pas grand chose.
Selection.FormatConditions.AddIconSetCondition
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.ReverseOrder = False
.ShowIconOnly = False
.IconSet = ActiveWorkbook.IconSets(xl3Symbols2)
End With
With Selection.FormatConditions(1).IconCriteria(2)
.Type = xlConditionValuePercent
.Value = 33
.Operator = 7
End With
With Selection.FormatConditions(1).IconCriteria(3)
.Type = xlConditionValuePercent
.Value = 67
.Operator = 7
End With
ceci est le code de l'action effectué dans la toute première image (mise en forme/jeux d'icones/set)
De ce que je comprend de ce code c'est qu'il appelle un set
IconSets(xl3Symbols2)
puis selon les valeurs appelle l'icone du set
Selection.FormatConditions(1).IconCriteria(2)
j'ai essayé de coller bêtement à mon code
Target.FormatConditions(1).Iconcriteria(2)
Mais bien évidemment ça ne marche pas
Je vous met mon fichier en pièce jointe, dans toute la feuille l'évènement double clique met un 1 si vide ou 2 si déjà 1 puis de nouveau 1 si déjà 2. et dans la colonne B il y a la mise en forme qui transforme les 1 et 2 en icone.
Merci d'avance pour votre aide
Bonjour,
Pas certain qu'on puisse avoir les ID des icônes ..
En tout cas je vous invite à aller regarder ce sujet que j'ai résolu hier : https://forum.excel-pratique.com/excel/trie-par-date-tableau-croise-dynamique-157797#p976830
J'étais également confronté à cet aspect peu esthétique de la rentrée dans une cellule que j'ai contourné via l'utilisation du Cancel = True.
La partie du code qui va vous intéresser est :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, ActiveSheet.ListObjects("BDD").ListColumns(6).DataBodyRange.Resize(, 5)) Is Nothing Then
If Target < 2 Then
Target = Target + 1
Else
Target = 0
End If
End If
Cancel = True
End Sub
Si vous double cliquez sur une des cellules comprenant les icônes, vous verrez que vous ne voyez rien en arrière plan, hormis dans la barre de formule.
Cdlt,
Edit : Un exemple en ajoutant l'instruction Cancel = True dans votre fichier.
ha oui et aussi, car finalement comme c'est juste le fait que le 1 et le 2 soit visible avant que les icones s'affichent qui m'ennuies.
j'ai essayé bêtement de mettre avant mon code application.screenupdating= False puis remettre True à la fin mais on voit toujours le chiffre se mettre.
après ça marche peut-être seulement sur des macros à cliquer(pour gagner du temps d'exécution) mais pas pour des évènements (en temps réel)?
Ha encore merci Ergotamine !!!
effectivement en ajoutant Cancel = true, je n'ai plus les chiffres qui s'affichent avant !! excellent ! ça me permet de garder mon code (dont je suis fier
en fait c'est aussi un peu la fonction que je cherchais, mais je connaissais seulement screenupdating ...
je vais me renseigner sur cette fonction pour la comprendre
et grâce aux informations que vous m'avez données hier je vais aussi pouvoir réaliser cet évènement seulement sur une plage précise
Bonjour,
Un indice pour vous aider sur ce lien : https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.beforedoubleclick
Cancel : False lorsque l'événement se produit. Si la procédure événementielle définit cet argument avec la valeur True, l’action de double-clic par défaut n’est pas effectuée à la fin de cette procédure.
Le cancel annule donc l'opération de doubleclic mais pas l'action associée à la procédure qui se déroule AVANT le double clic (before_doubleclick).
Cdlt,