Peut on raccourcir mon code
bonjour j'ai cela dans mon code de mon userform
je ne suis pas programmateur et j'ai crée cela
peu ton le raccourcir
merci d'avance.
Private Sub Dorure1_Click()
If Dorure1.ListIndex <> -1 Then
prixd1 = Sheets("Données").Range("O" & Dorure1.ListIndex + 2).Value
End If
End Sub
Private Sub Dorure2_Click()
If Dorure2.ListIndex <> -1 Then
prixd2 = Sheets("Données").Range("O" & Dorure2.ListIndex + 2).Value
End If
End Sub
Private Sub Dorure3_Click()
If Dorure3.ListIndex <> -1 Then
prixd3 = Sheets("Données").Range("O" & Dorure3.ListIndex + 2).Value
End If
End Sub
Private Sub Papier1_Click()
If Papier1.ListIndex <> -1 Then
Prixpapier1 = Sheets("Données").Range("K" & Papier1.ListIndex + 2).Value
End If
End Sub
Private Sub Papier2_Click()
If Papier1.ListIndex <> -1 Then
Prixpapier2 = Sheets("Données").Range("K" & Papier2.ListIndex + 2).Value
End If
End Sub
Private Sub Papier3_Click()
If Papier1.ListIndex <> -1 Then
Prixpapier3 = Sheets("Données").Range("K" & Papier3.ListIndex + 2).Value
End If
End Sub
Private Sub Vernis1_Click()
If Vernis1.ListIndex <> -1 Then
PrixVernis1 = Sheets("Données").Range("Q" & Vernis1.ListIndex + 2).Value
End If
End Sub
Private Sub Vernis2_Click()
If Vernis1.ListIndex <> -1 Then
PrixVernis2 = Sheets("Données").Range("Q" & Vernis2.ListIndex + 2).Value
End If
End Sub
Private Sub Vernis3_Click()
If Vernis1.ListIndex <> -1 Then
PrixVernis3 = Sheets("Données").Range("Q" & Vernis3.ListIndex + 2).Value
End If
End Sub
Private Sub UserForm_Activate()
ComboBox1.RowSource = "Données!c2:c" & Sheets("Données").Range("c65536").End(xlUp).Row
With ActiveSheet
Date1 = Date
Suivie.List = Sheets("Données").Range("G2:G10").Value
Papier1.List = Sheets("Données").Range("J2:J210").Value
Produit1.List = Sheets("Données").Range("H2:H8").Value
Dorure1.List = Sheets("Données").Range("N2:N8").Value
Vernis1.List = Sheets("Données").Range("P2:P6").Value
Papier2.List = Sheets("Données").Range("J2:J210").Value
Produit2.List = Sheets("Données").Range("H2:H8").Value
Dorure2.List = Sheets("Données").Range("N2:N8").Value
Vernis2.List = Sheets("Données").Range("P2:P6").Value
Papier3.List = Sheets("Données").Range("J2:J210").Value
Produit3.List = Sheets("Données").Range("H2:H8").Value
Dorure3.List = Sheets("Données").Range("N2:N8").Value
Vernis3.List = Sheets("Données").Range("P2:P6").Value
End With
End Sub
Bonsoir,
une aide ? Faut voir...
Pour mettre un nom de contrôle en variable avec un compteur (1,2,3...) il suffit d'utiliser l'instruction :
Controls("nom_du_contrôle" & variable_compteur)
Donc dans votre cas un boucle qui va de 1 à 3 avec les différents contrôles :
Private Sub UserForm_Activate()
ComboBox1.RowSource = "Données!c2:c" & Sheets("Données").Range("c65536").End(xlUp).Row
With ActiveSheet
Date1 = Date
Suivie.List = Sheets("Données").Range("G2:G10").Value
For Cpt = 1 to 3
Controls("Papier" & Cpt).List = Sheets("Données").Range("J2:J210").Value
Controls("Produit" & Cpt).List = Sheets("Données").Range("H2:H8").Value
Controls("Dorure" & Cpt).List = Sheets("Données").Range("N2:N8").Value
Controls("Vernis" & Cpt).List = Sheets("Données").Range("P2:P6").Value
Next Cpt
'Papier2.List = Sheets("Données").Range("J2:J210").Value
'Produit2.List = Sheets("Données").Range("H2:H8").Value
'Dorure2.List = Sheets("Données").Range("N2:N8").Value
'Vernis2.List = Sheets("Données").Range("P2:P6").Value
'Papier3.List = Sheets("Données").Range("J2:J210").Value
'Produit3.List = Sheets("Données").Range("H2:H8").Value
'Dorure3.List = Sheets("Données").Range("N2:N8").Value
'Vernis3.List = Sheets("Données").Range("P2:P6").Value
End With
End SubEnsuite pour la série de clic sur les contrôles, s'ils sont tous de même type il faut alors se tourner vers les modules de class...
sujet récent qui a trouvé solution :
https://forum.excel-pratique.com/post492496.html?hilit=module de class#p492496
@ bientôt
LouReeD
bonjour LouReeD
merci de m'avoir répondu mais j'ai rien compris lol
je vois que tu a changer le nom de control "Papier" au lieu de papier1
que tu rajoute
For Cpt = 1 to 3
et clôture par
Next Cpt
le reste je comprend pas
Bonjour,
On peut améliorer ça, mais on ne peut faire du bon travail sans le fichier...
Cordialement.
Voila ce que j ai fais
rigoler pas svp
j ai fais comme j 'ai pu je ne suis pas programmateur
Ya pas mal à voir ! Je n'ai pas le temps tout de suite.
Juste quelques conseils par rapport à ce que j'ai vu :
- Très bien de renommer ses contrôles...
- Il est cependant souvent utile (pour bien s'y retrouver) d'utiliser un préfixe indiquant le type d'objet (de 2 ou 3 lettres en minuscules) [chacun a ses habitudes pour préfixer, mais cela indique tout de suite ce que l'on peut et doit faire avec...]
- Pour raccourcir le code, on utilise des boucles, et pour pouvoir utiliser des boucles on procède généralement en donnant un nom générique aux contrôles sur lesquels on entend boucler, suivi d'un numéro d'ordre (ordre judicieusement choisi si possible, qui permet par exemple de défiler les contrôles dans le même ordre que les colonnes auxquelles leur valeur va être affectée...)
- Les deux "règles" qui précèdent peuvent s'avérer en contradiction si on veut les appliquer systématiquement... on fait dans ce cas le meilleur compromis par rapport à l'objectif visé...
[Tu vois que pour réduire ton code, il faut plonger au coeur du dispositif que tu as mis en place, et vu le nombre de contrôles, ça prendra du temps...]
Autre conseil (qui m'est plutôt personnel, il y a diverses doctrines) : laisser VBA placer les procédures d'évènement des contrôles (il les place en ordre alphabétique [NB-un préfixe de type permet de regrouper les contrôles de même type, ainsi]), et placer les autres procédures si on en ajoute dans la zone (Général), soit en tête du module après les déclarations niveau module (s'il y en a).
NB- Ajouter une procédure pour y faire pointer les évènements de plusieurs contrôles, évitant de répéter le même code pour chacun, est aussi un moyen de raccourcir le code.
Cordialement.
Voilà qui est bien expliquer !
@ bientôt
LouReeD
Ben oui
Mes pas évident pour un novice lol