Suite de "Amélioration d'un code"
Bonjour,
Grâce à l'assistance de Theze, j'ai réussit à faire évoluer sérieusement mes codes.
En m'appuyant sur l'un de ses codes je vais chercher la valeur de la cellule voisine (à droite) pour coloriser un textbox. Mon code fonctionne, enfin presque, car il remplit tous les textbox avec la couleur attendue, mais il bug sur la première ligne "If Sheets SMEP" lorsqu'il finit de parcourir la plage concernée. Je pense que je n'ai pas donné l'instruction
" Stop si c'est la dernière case (Textbox)", sachant que cette dernière case peut évoluer selon les cas.
Pouvez vous m'indiquez l'amélioration nécessaire. Je joint le code afin que ce soit plus facile à comprendre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| Sub SMPCouleurs()
Dim Ctrl As Control
'parcour la collection des contrôles de la Form
For Each Ctrl In TMa2.MultiPage1.Pages("SMPNom").Controls
If TypeName(Ctrl) = "TextBox" Then
With Ctrl
'cas de la lettre F
If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "V" Then
Ctrl.BackColor = vbGreen
End If
If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "R" Then
Ctrl.BackColor = vbRed
End If
If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "M" Then
Ctrl.BackColor = vbMagenta
End If
If Sheets("SMP").Range(Right(.Name, Len(.Name) - InStrRev(.Name, "F") + 1)).Offset(0, 1).Value = "J" Then
Ctrl.BackColor = vbYellow
End If
End With
End If
Next
End Sub |
Merci de votre aide
Thierry
Suite de "aAmélioration d'un code"
Bonjour Bertrand,
C'est la ligne n°13 qui est surlignée.
Effectivement mes Textbox nommées SMP_1_F3 jusqu'à SMP_1_F62 pour le premier groupe et SMP_2_J3 jusqu'à SMP_2_J36 pour le second (en réalité il y à 4 groupes), sont renseignées par les cellules correspondantes (de F3 à F62, etc.).
J'ai une macro intermédiaire qui cache les textbox si la valeur de la cellule est ""
Sur mon nouveau code je vais chercher la valeur à droite de l'adresse indiquée par les textbox visibles pour coloriser ces dernières. Lorsque je fait tourner le code toutes les textbox se renseignent et se colorisent correctement.
Mais à priori le code continue à tourner après la dernière textbox est génère un bug, puisqu'il ne trouve plus d'objet correspondant. il faut également savoir que le nombre de textbox est variable.
Donc mon soucis est de créer l'instruction pour que la macro s'arrête sur la dernière case visible
J'espère que j'ai été assez clair
Merci
Thierry
Suite de "Amélioration d'un code"
Re-bonjour Bertrand
Désolé pour le retard de la réponse, mais je suis actuellement en vacances et mon inspectrice "personnel" du travail a émise d'autre priorité sur mes activitées
Toute simplification du code est la bienvenue.
Par rapport à celui que tu m'as proposé j'ai ajouté "If Ctrl.Visible = True Then", etc.
Le résultat est que le bug à disparu, ce qui serait plutôt bien, mais toutes les textbox de la dernière ligne ne se colorisent pas. Quelque soit le nombre de lignes
Merci pour ton aide
Thierry