Procédure trop longue
Bonjour à tous,
J'ai un gros soucis qui me bloque, je sais que lors de la compilation on ne peut excéder les 64 ko cependant là j'ai pas d'idée pour alleger mon problème.
J'ai 273 Label dans un Userform qui changent de couleurs en fonctions de données (0,1 ou 2) contenues dans des cellules de tableau Excel. Chacun de ces Labels on trois couleurs possibles.
Voici mon code pour un seul Label :
""""
Dim lignetaxosec As Integer
lignetaxosec = 92 * ComboBox100.ListIndex
If Worksheets("saisie Acquisitions").Cells(lignetaxosec + 10, 26).Value = "0" Then
Label99.BackColor = RGB(255, 0, 0)
ElseIf Worksheets("saisie Acquisitions").Cells(lignetaxosec + 10, 26).Value = "1" Then
Label99.BackColor = RGB(255, 206, 0)
ElseIf Worksheets("saisie Acquisitions").Cells(lignetaxosec + 10, 26).Value = "2" Then
Label99.BackColor = RGB(0, 255, 0)
End If
""""""""
Voilà, et je dois répéter ça pour 273 Label ! Chacun des ces labels ne prenants pas les donnée dans la même cellule évidement....
Forcément je dépasse !
Voilà pour le deuxième Label :
If Worksheets("saisie Acquisitions").Cells(lignetaxosec + 11, 26).Value = "0" Then
Label100.BackColor = RGB(255, 0, 0)
ElseIf Worksheets("saisie Acquisitions").Cells(lignetaxosec + 11, 26).Value = "1" Then
Label100.BackColor = RGB(255, 206, 0)
ElseIf Worksheets("saisie Acquisitions").Cells(lignetaxosec + 11, 26).Value = "2" Then
Label100.BackColor = RGB(0, 255, 0)
End If
J'incrémente de 1 le numéro du label et de 1 l'indexage de ligne pour trouver la bonne cellule... et ça 273 fois
Je ne sais pas si quelqu'un peut m'aider mais ça serait vraiment cool
Merci beaucoup à tous !
Bonjour,
D'abord il serait bien que tu utilises la balise code lorsque tu mets du code dans un post.
Ensuite, je n'aime pas voir des nombres entre guillemets, cela peut souvent provoquer des erreurs...
Enfin ta procédure élémentaire n'est pas très performante...
Mise en tableau de tes couleurs : TabloCouleurs = Array(couleur0, couleur1, couleur2)
Et : Label.BackColor = TabloCouleurs(valeurCellule) permet alors d'écrire en une ligne ce qui t'en prend 7... et que tu t'apprêtes à répéter 272 fois !
L'utilisation d'une boucle (c'est fait pour ça) te permet de ne pas répéter cette ligne du tout !
Cordialement.
Bonjour Lord Krowan, bonjour le forum,
Peut-être comme ça (certainement à adapter) :
Dim O As Worksheet
Dim lignetaxosec As Integer
Set O = Sheets("saisie Acquisitions")
lignetaxosec = 92 * ComboBox100.ListIndex
For I = 10 To 283 'à adapter (comme tu parles de 273 labels...)
If .Cells(lignetaxosec + I, 26).Value = "0" Then Userform1.Controls("Label" & 89 + I).BackColor = RGB(255, 0, 0) 'pourquoi "0" et pas 0 ?
If .Cells(lignetaxosec + I, 26).Value = "1" Then Userform1.Controls("Label" & 89 + I).BackColor = RGB(255, 206, 0) 'pourquoi "1" et pas 1 ?
If .Cells(lignetaxosec + I, 26).Value = "2" Then Userform1.Controls("Label" & 89 + I).BackColor = RGB(0, 255, 0) 'pourquoi "2" et pas 2 ?
End If[Édition]
Bonjour MFerrand, nos posts se sont croisés...
Bonjour,
Désolé, je ne suis pas habitué aux règles d'écriture du forum, je ferais attention la prochaine fois.
Désolé aussi pour la réponse tardive, Je vis à l'autre bout du monde et c'est le petit matin ici !
J'essaie ça ce soir et je reviens vers vous !
Merci beaucoup pour votre aide, je cherchais effectivement à créer une boucle mais je débute et je suis pas encore bien doué (ça se voit je sais
Rebonjour,
Alors j'ai essayé la deuxième méthode dont je comprenais le sens,voici mon code (j'ai limité à 91 label/cellules):
Private Sub ComboBox100_Change()
Dim O As Worksheet
Dim lignetaxosec As Integer
Set O = Worksheets("saisie Acquisitions")
lignetaxosec = 92 * ComboBox100.ListIndex
For i = 10 To 100
If .Cells("lignetaxosec + i, 26").Value = 0 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(255, 0, 0)
If .Cells("lignetaxosec + i, 26").Value = 1 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(255, 206, 0)
If .Cells("lignetaxosec + i, 26").Value = 2 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(0, 255, 0)
End If
End SubCependant lorsque je lance lance ce code en changeant de nom dans ma combobox100 j'ai un message d'erreur qui apparaît :
"Erreur de compilation
Référence incorrecte ou non qualifié"
Et le premier terme .cells est surligné.. J'ai beau chercher je ne comprend pas pourquoi !
Une idée ?
Merci
Re,
Alors j'ai réussi, ça fonctionne avec ce code :
Private Sub ComboBox100_Change()
Dim lignetaxosec As Integer
lignetaxosec = 92 * ComboBox100.ListIndex
For i = 10 To 100 'à adapter (comme tu parles de 273 labels...)
If Worksheets("saisie Acquisitions").Cells(lignetaxosec + i, 26).Value = 0 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(255, 0, 0)
If Worksheets("saisie Acquisitions").Cells(lignetaxosec + i, 26).Value = 1 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(255, 206, 0)
If Worksheets("saisie Acquisitions").Cells(lignetaxosec + i, 26).Value = 2 Then UserForm4.Controls("Label" & 89 + i).BackColor = RGB(0, 255, 0)
Next
End SubÇa vous parait bien ???
Bonsoir,
Ta manie des guillemets qui te joue des tours une fois de plus... !
La boucle, c'est un premier pas. Je t'engage à regarder de plus près mes propos précédents pour optimiser une peu plus et réduire encore ton code !
Cordialement
Bonjour le Fil, bonjour le forum,
Excellente proposition de MFerrand que je te commente ci-dessous au cas où tu n'aurais pas compris comment l'adapter à ton code :
Private Sub ComboBox100_Change()
Dim lignetaxosec As Integer
Dim CS As Variant 'déclare la variable CS (CouleurS)
Dim I As Byte 'déclare la variable I (Incrément) à déclarer de Type "Integer" si valeur max > 255
lignetaxosec = 92 * ComboBox100.ListIndex
CS = Array(RGB(255, 0, 0), RGB(255, 206, 0), RGB(0, 255, 0)) 'définit le tableau des couleurs CS
For I = 10 To 100 'boucle de 10 à 100
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante, donc au label suivant)
'définit la couleur du Label(89+I) en fonction de la valeur de la cellule ligne : lignetaxosec, colonne 26 de l'onglet "saisie Acquisitions"
UserForm4.Controls("Label" & 89 + I).BackColor = CS(Sheets("saisie Acquisitions").Cells(lignetaxosec + I, 26).Value) 'une valeur différente de {0, 1 ou 2} génèrerait une erreur
Next I 'prochaine valeur de la boucle
End SubBonjour.
Ca y est j'ai saisis ! Mes colonnes de tableau sont les valeurs 0,1 et .2 et pour chaque colonne est attribué une couleur. C'est super malin !
Mais la chance c'est que mes valeurs soient 0 1 et 2 on aurait fait comment sinon ? Car je crois savoir que par defaut la première colone est nommée 0 ce qui tombe bien !
En tout cas merci pour l'aide et un grand bonjour de Nouvelle Caledonie !
Re,
Ben, on aurait fait comme tu avais fait toi avant, ou, on aurait demandé à un MFerrand super malin (pléonasme) de trouver une autre idée lumineuse...
Bonjour de Sète...
Salut Lord... salut Totem !
Il est rare qu'on ne trouve pas une combinaison d'opération pour passer d'une série de nombre à une autre...
Si tu fais tout, il n'a plus besoin de réfléchir ! C'est en réfléchissant qu'on progresse.
Bonne journée.
En tout cas merci,
J'avance bien plus vite sur plein d'autre chose en connaissant tout ça !
Bonne continuation