Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
😱 300 labels, et sur une feuille en plus !?! 😳j'ai 300 labels sur une feuille
Public WithEvents LB As MSForms.Label
Private Sub LB_Click()
UserForm1.Caption = "Couleur " & LB.Name
UserForm1.Show
End Sub
Private Sub Label1_Click()
Feuil1.OLEObjects(Mid(Me.Caption, 9)).Object.BackColor = Label1.BackColor
End Sub
Private Sub Label2_Click()
Feuil1.OLEObjects(Mid(Me.Caption, 9)).Object.BackColor = Label2.BackColor
End Sub
Private Sub Label3_Click()
Feuil1.OLEObjects(Mid(Me.Caption, 9)).Object.BackColor = Label3.BackColor
End Sub
Private Sub Label4_Click()
Feuil1.OLEObjects(Mid(Me.Caption, 9)).Object.BackColor = Label4.BackColor
End Sub
Option Explicit
Const largeur As Long = 50
Const hauteur As Long = 15
Const spaceX As Long = 10
Const NbColonne As Long = 20
Sub add300label()
Dim L&, Tp&, i&, Feuille As Worksheet, lab As Shape
delete300label
Application.ScreenUpdating = False
L = 20: Tp = 50 'L pour le left et tp pour le top
Set Feuille = ActiveSheet
With Feuille
For i = 1 To 300
Set lab = Feuille.Shapes.AddShape(1, L, Tp, largeur, hauteur)
With lab
.Fill.ForeColor.RGB = ThisWorkbook.Colors(Round(1 + (Rnd * 55)))
.Name = "carre" & i
.TextFrame.Characters.Text = .Name
.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
.TextFrame2.VerticalAnchor = msoAnchorMiddle
.OnAction = "'label_click " & """carre" & i & """'"
End With
L = L + largeur + spaceX
If i Mod NbColonne = 0 Then Tp = Tp + 20: L = 20
Next
End With
Application.ScreenUpdating = False
End Sub
Sub delete300label()
Dim obj
For Each obj In ActiveSheet.Shapes
If Left(obj.Name, 5) = "carre" Then obj.Delete
Next
End Sub
Sub label_click(nom As String)
MsgBox nom
End Sub
Alors voilà,Bonjour et déjà, merci beaucoup à vous
Je vais essayer de voir ce que j'arrive à faire avec votre exemple et je vous tiens au courant 🙂
En fait, je m'amuse avec Excel à essayer de trouver des fonctionnements pour certaines choses. ca n'a absolument rien de pro, je n'ai jamais appris à coder mais j'aime faire des petits utilitaires... a ma sauce . Je n''ai jamais pris un cours de VBA. Donc j'arrive à me familiariser avec petit à petit mais beaucoup de choses restent obscures
Je suis certaine que c'est très bancal, mais je me pose un challenge et j'essaie de trouver des solutions. Il y a surement plus simple, moins tordu, mais je ne vous demanderai jamais de coder à ma place ! Je me pose un challenge, je trouve un chemin et j'essaie de le suivre jusqu'au bout.
si ca vous intéresse, le pourquoi de mes 300 labels : là j'ai un tableau à 2 entrées et je veux que lorsque je clique sur la case correspondante, j'ai la possibilité de lui donner une couleur au choix entre 4.
la solution (surement tordue) que j'ai trouvé :
j'ai lié un label dans chaque case (sans caption)
je récupère son adresse dans une case de ma feuille pour pouvoir agir dessus
quand je clique sur mon label, j'ouvre un useform avec 4 boutons de couleur
quand je choisi une couleur, une valeur est entrée dans la case et mon label prend bien la couleur choisie
Je suis assez contente d'avoir réussi déjà à faire ça et oui, j'ai 32 lignes et 20 colonne : ca fait même 640 labels
et je suis cap de passer le temps qu'il faut à tous les écrire 1 par 1 si je n'ai pas de solution XP
profitez bien de ce jour férié 😉
Merci !!!bonjour à tous(juste en passant)
si je compare le temps de (construction ou suppression) de 300 shapes ou label activx
alors j'imagine le poids du fichier a l'ouverture et fermeture
- il n'y a pas photo les shapes sont moins lourdes
- avec les shapes il suffit de leur affecter une macro (.onaction en vba)
dans cette exemple je crée 300 shapes en couleur carrée avec leur nom en tant que texte elles sont cliquables immédiatement âpres la construction
elle sont alignées en fonction de la constante Nbcolonne
VB:Option Explicit Const largeur As Long = 50 Const hauteur As Long = 15 Const spaceX As Long = 10 Const NbColonne As Long = 20 Sub add300label() Dim L&, Tp&, i&, Feuille As Worksheet, lab As Shape delete300label Application.ScreenUpdating = False L = 20: Tp = 50 'L pour le left et tp pour le top Set Feuille = ActiveSheet With Feuille For i = 1 To 300 Set lab = Feuille.Shapes.AddShape(1, L, Tp, largeur, hauteur) With lab .Fill.ForeColor.RGB = ThisWorkbook.Colors(Round(1 + (Rnd * 55))) .Name = "carre" & i .TextFrame.Characters.Text = .Name .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter .TextFrame2.VerticalAnchor = msoAnchorMiddle .OnAction = "'label_click " & """carre" & i & """'" End With L = L + largeur + spaceX If i Mod NbColonne = 0 Then Tp = Tp + 20: L = 20 Next End With Application.ScreenUpdating = False End Sub Sub delete300label() Dim obj For Each obj In ActiveSheet.Shapes If Left(obj.Name, 5) = "carre" Then obj.Delete Next End Sub Sub label_click(nom As String) MsgBox nom End Sub
Option Explicit
Const largeur As Long = 50
Const hauteur As Long = 15
Const spaceX As Long = 10
Const NbColonne As Long = 20
Sub add300label()
Dim L&, Tp&, i&, Feuille As Worksheet, lab As Shape, backcouleur&, fontcolor&, LineColor&
Randomize
delete300label
Application.ScreenUpdating = False
L = 20: Tp = 50 'L pour le left et tp pour le top
Set Feuille = ActiveSheet
With Feuille
For i = 1 To 640
backcouleur = ThisWorkbook.Colors(Round(1 + (Rnd * 55)))
fontcolor = ThisWorkbook.Colors(Round(1 + (Rnd * 55)))
LineColor = ThisWorkbook.Colors(Round(1 + (Rnd * 55)))
Set lab = Feuille.Shapes.AddShape(1, L, Tp, largeur, hauteur)
With lab
.Fill.ForeColor.RGB = backcouleur
.Name = "carre " & i
.TextFrame.Characters.Text = .Name
.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
.TextFrame2.VerticalAnchor = msoAnchorMiddle
.Line.Visible = True
.Line.ForeColor.RGB = LineColor
.Line.Weight = 3
.Parent.DrawingObjects(.Name).Font.Size = 8
.Parent.DrawingObjects(.Name).Font.Color = fontcolor
.OnAction = "'label_click " & """carre" & i & """'"
'le .onaction argumenté
.OnAction = "'label_click " & Chr(34) & .Name & """,""" & _
L & """,""" & Tp & """,""" & backcouleur & """,""" & fontcolor & """,""" & LineColor & "'"
End With
L = L + largeur + spaceX
If i Mod NbColonne = 0 Then Tp = Tp + hauteur + spaceX: L = 20
Next
End With
Application.ScreenUpdating = False
End Sub
Sub delete300label()
Dim obj
For Each obj In ActiveSheet.Shapes
If Left(obj.Name, 5) = "carre" Then obj.Delete
Next
End Sub
Sub label_click(ByVal nom As String, ByVal Lleft As Long, ByVal Itop As Long, _
ByVal backcouleur As Long, ByVal fontcolor As Long, ByVal LineColor As Long)
Dim texte$
texte = "Nom: " & nom & vbCrLf
texte = texte & "left: " & Lleft & vbCrLf
texte = texte & "top: " & Itop & vbCrLf
texte = texte & "back color: " & backcouleur & vbCrLf
texte = texte & "font color: " & fontcolor & vbCrLf
texte = texte & "couleur du contour: " & LineColor
MsgBox texte
End Sub
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?