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 Sub

Ensuite 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

15test-copie.zip (52.53 Ko)

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...)
Dans ce cas les contrôles sont identifiés dans la boucle par : Controls("NomCommun" & numordre) numordre étant également le compteur de boucle. C'est une méthode que t'indiquait LouReed.

- 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

Rechercher des sujets similaires à "raccourcir mon code"