Allèger un code
lanetmel
Messages postés
200
Date d'inscription
Statut
Membre
Dernière intervention
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
J'ai crée le code suivant mais je sais que c'est beaucoup trop long et je ne sais pas comment regrouper.. Suis-je obliger de déclarer mes variables de cette façon? Aussi quand j'arrive dans la partie avec le Combobox : J'ai les Combobox 3 à 7 dans lesquels les grades1 à 24 peuvent être selectionnés, vis à vis chaque combobox il y a deux textbox à emplir par l'utilisateur. un seul combobox peut-être empli comme les 5 peuvent l'être... Le but est que selon le grade sélectionné dans le combobox, les infos des textbox vont se placer dans une autre feuille.
(+3 colonnes à chaque changement de grade)
Option Explicit
Private Sub CmdOK_Click()
Dim Lign As Long
Dim grade1, grade2, grade3, grade4, grade5, grade6, grade7, grade8, grade9, grade10, grade11, grade12, grade13, grade14, grade15 As Variant
Dim grade16, grade17, grade18, grade19, grade20, grade21, grade22, grade23, grade24 As Variant
grade1 = "Fas"
grade2 = "Fas/1F"
grade3 = "Sel/Reg"
grade4 = "Sel/Sap"
grade5 = "Sel"
grade6 = "1com"
grade7 = "1com/1W"
grade8 = "1com2W"
grade9 = "1com"
grade10 = "1com Sap"
grade11 = "1com Reg"
grade12 = "2com"
grade13 = "2com Sap"
grade14 = "2com Reg"
grade15 = "3com"
grade16 = "3com Sap"
grade17 = "3com Reg"
grade18 = "3B"
grade19 = "palette"
grade20 = "inconnu1"
grade21 = "inconnu2"
grade22 = "inconnu3"
grade23 = "inconnu4"
grade24 = "inconnu5"
'--- en feuil Infos va chercher la ligne vide.....
With Sheets("Infos")
'......comprise entre la ligne 5 et la dernière ligne remplie
For Lign = 5 To .Range("a" & Rows.Count).End(xlUp).Row + 1
'.... s'il n'y a pas d'erreur (déclenchée par une formule)
If IsError(.Cells(Lign, 1)) Then
'si elle est vide alors...
ElseIf .Cells(Lign, 1) = "" Then
'on écrit dedans !!!
.Cells(Lign, 1) = (TextBox3.Value)
.Cells(Lign, 2) = (TextBox4.Value)
.Cells(Lign, 4) = (ComboBox2.Value)
.Cells(Lign, 3) = (TextBox5.Value)
.Cells(Lign, 5) = (ComboBox1.Value)
.Cells(Lign, 6) = (TextBox18.Value)
.Cells(Lign, 7) = (ComboBox8.Value)
.Cells(Lign, 8) = (ComboBox9.Value)
.Cells(Lign, 85) = (ComboBox10.Value)
.Cells(Lign, 86) = (TextBox16.Value)
.Cells(Lign, 191) = (TextBox19.Value)
If ComboBox3.Value = grade1 Then
.Cells(Lign, 10) = (TextBox7.Value)
.Cells(Lign, 11) = (TextBox12.Value)
If ComboBox3.Value = grade2 Then
.Cells(Lign, 13) = (TextBox7.Value)
.Cells(Lign, 14) = (TextBox12.Value)
Exit For
End If
End If
End If
Next Lign
End With
Unload Me
End Sub
Private Sub CmdAnnuler_Click()
Unload Me
End Sub
ça fonctionne de cette façon mais je me dis qu'il y a un moyen pour regrouper tout ça au lieu d'écrire les 72 possibilités...
merci à l'avance
J'ai crée le code suivant mais je sais que c'est beaucoup trop long et je ne sais pas comment regrouper.. Suis-je obliger de déclarer mes variables de cette façon? Aussi quand j'arrive dans la partie avec le Combobox : J'ai les Combobox 3 à 7 dans lesquels les grades1 à 24 peuvent être selectionnés, vis à vis chaque combobox il y a deux textbox à emplir par l'utilisateur. un seul combobox peut-être empli comme les 5 peuvent l'être... Le but est que selon le grade sélectionné dans le combobox, les infos des textbox vont se placer dans une autre feuille.
(+3 colonnes à chaque changement de grade)
Option Explicit
Private Sub CmdOK_Click()
Dim Lign As Long
Dim grade1, grade2, grade3, grade4, grade5, grade6, grade7, grade8, grade9, grade10, grade11, grade12, grade13, grade14, grade15 As Variant
Dim grade16, grade17, grade18, grade19, grade20, grade21, grade22, grade23, grade24 As Variant
grade1 = "Fas"
grade2 = "Fas/1F"
grade3 = "Sel/Reg"
grade4 = "Sel/Sap"
grade5 = "Sel"
grade6 = "1com"
grade7 = "1com/1W"
grade8 = "1com2W"
grade9 = "1com"
grade10 = "1com Sap"
grade11 = "1com Reg"
grade12 = "2com"
grade13 = "2com Sap"
grade14 = "2com Reg"
grade15 = "3com"
grade16 = "3com Sap"
grade17 = "3com Reg"
grade18 = "3B"
grade19 = "palette"
grade20 = "inconnu1"
grade21 = "inconnu2"
grade22 = "inconnu3"
grade23 = "inconnu4"
grade24 = "inconnu5"
'--- en feuil Infos va chercher la ligne vide.....
With Sheets("Infos")
'......comprise entre la ligne 5 et la dernière ligne remplie
For Lign = 5 To .Range("a" & Rows.Count).End(xlUp).Row + 1
'.... s'il n'y a pas d'erreur (déclenchée par une formule)
If IsError(.Cells(Lign, 1)) Then
'si elle est vide alors...
ElseIf .Cells(Lign, 1) = "" Then
'on écrit dedans !!!
.Cells(Lign, 1) = (TextBox3.Value)
.Cells(Lign, 2) = (TextBox4.Value)
.Cells(Lign, 4) = (ComboBox2.Value)
.Cells(Lign, 3) = (TextBox5.Value)
.Cells(Lign, 5) = (ComboBox1.Value)
.Cells(Lign, 6) = (TextBox18.Value)
.Cells(Lign, 7) = (ComboBox8.Value)
.Cells(Lign, 8) = (ComboBox9.Value)
.Cells(Lign, 85) = (ComboBox10.Value)
.Cells(Lign, 86) = (TextBox16.Value)
.Cells(Lign, 191) = (TextBox19.Value)
If ComboBox3.Value = grade1 Then
.Cells(Lign, 10) = (TextBox7.Value)
.Cells(Lign, 11) = (TextBox12.Value)
If ComboBox3.Value = grade2 Then
.Cells(Lign, 13) = (TextBox7.Value)
.Cells(Lign, 14) = (TextBox12.Value)
Exit For
End If
End If
End If
Next Lign
End With
Unload Me
End Sub
Private Sub CmdAnnuler_Click()
Unload Me
End Sub
ça fonctionne de cette façon mais je me dis qu'il y a un moyen pour regrouper tout ça au lieu d'écrire les 72 possibilités...
merci à l'avance
A voir également:
- Allèger un code
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Scanner qr code pc - Guide
2 réponses
On M'a aidé en message privé! Voici la réponse
Option Explicit
Private Sub cmdok_click()
Dim Lign As Long
Dim col1, col2, col3, col4, col5 As Integer
col1 = (ComboBox4.ListIndex * 2) + 11
col2 = (ComboBox5.ListIndex * 2) + 11
col3 = (ComboBox6.ListIndex * 2) + 11
col4 = (ComboBox7.ListIndex * 2) + 11
col5 = (ComboBox3.ListIndex * 2) + 11
'--- en feuil Infos va chercher la ligne vide.....
With Sheets("Infos")
'......comprise entre la ligne 5 et la dernière ligne remplie
For Lign = 5 To .Range("a" & Rows.Count).End(xlUp).Row + 1
'.... s'il n'y a pas d'erreur (déclenchée par une formule)
If IsError(.Cells(Lign, 1)) Then
'si elle est vide alors...
ElseIf .Cells(Lign, 1) = "" Then
'on écrit dedans !!!
.Cells(Lign, 1) = (TextBox3.Value)
.Cells(Lign, 2) = (TextBox4.Value)
.Cells(Lign, 3) = (TextBox5.Value)
.Cells(Lign, 61) = (TextBox20.Value)
.Cells(Lign, 66) = (TextBox21.Value)
.Cells(Lign, 4) = (ComboBox2.Value)
.Cells(Lign, 5) = (ComboBox12.Value)
.Cells(Lign, 6) = (ComboBox1.Value)
.Cells(Lign, 7) = (TextBox18.Value)
.Cells(Lign, 8) = (ComboBox8.Value)
.Cells(Lign, 9) = (ComboBox9.Value)
.Cells(Lign, 63) = (ComboBox10.Value)
.Cells(Lign, 64) = (TextBox16.Value)
.Cells(Lign, 65) = (ComboBox13.Value)
.Cells(Lign, 150) = (TextBox19.Value)
.Cells(Lign, col1) = (TextBox7.Value)
.Cells(Lign, col1 + 1) = (TextBox12.Value)
.Cells(Lign, col2) = (TextBox8.Value)
.Cells(Lign, col2 + 1) = (TextBox15.Value)
.Cells(Lign, col3) = (TextBox9.Value)
.Cells(Lign, col3 + 1) = (TextBox14.Value)
.Cells(Lign, col4) = (TextBox10.Value)
.Cells(Lign, col4 + 1) = (TextBox13.Value)
.Cells(Lign, col5) = (TextBox6.Value)
.Cells(Lign, col5 + 1) = (TextBox11.Value)
.Cells(Lign, 60) = (ComboBox11.Value)
.Cells(Lign, 163) = (TextBox23.Value)
.Cells(Lign, 164) = (TextBox24.Value * TextBox20.Value)
Exit For
End If
Next Lign
End With
Unload Me
End Sub
Private Sub CmdAnnuler_Click()
Unload Me
Si ça peut aider d'autres personnes!
Option Explicit
Private Sub cmdok_click()
Dim Lign As Long
Dim col1, col2, col3, col4, col5 As Integer
col1 = (ComboBox4.ListIndex * 2) + 11
col2 = (ComboBox5.ListIndex * 2) + 11
col3 = (ComboBox6.ListIndex * 2) + 11
col4 = (ComboBox7.ListIndex * 2) + 11
col5 = (ComboBox3.ListIndex * 2) + 11
'--- en feuil Infos va chercher la ligne vide.....
With Sheets("Infos")
'......comprise entre la ligne 5 et la dernière ligne remplie
For Lign = 5 To .Range("a" & Rows.Count).End(xlUp).Row + 1
'.... s'il n'y a pas d'erreur (déclenchée par une formule)
If IsError(.Cells(Lign, 1)) Then
'si elle est vide alors...
ElseIf .Cells(Lign, 1) = "" Then
'on écrit dedans !!!
.Cells(Lign, 1) = (TextBox3.Value)
.Cells(Lign, 2) = (TextBox4.Value)
.Cells(Lign, 3) = (TextBox5.Value)
.Cells(Lign, 61) = (TextBox20.Value)
.Cells(Lign, 66) = (TextBox21.Value)
.Cells(Lign, 4) = (ComboBox2.Value)
.Cells(Lign, 5) = (ComboBox12.Value)
.Cells(Lign, 6) = (ComboBox1.Value)
.Cells(Lign, 7) = (TextBox18.Value)
.Cells(Lign, 8) = (ComboBox8.Value)
.Cells(Lign, 9) = (ComboBox9.Value)
.Cells(Lign, 63) = (ComboBox10.Value)
.Cells(Lign, 64) = (TextBox16.Value)
.Cells(Lign, 65) = (ComboBox13.Value)
.Cells(Lign, 150) = (TextBox19.Value)
.Cells(Lign, col1) = (TextBox7.Value)
.Cells(Lign, col1 + 1) = (TextBox12.Value)
.Cells(Lign, col2) = (TextBox8.Value)
.Cells(Lign, col2 + 1) = (TextBox15.Value)
.Cells(Lign, col3) = (TextBox9.Value)
.Cells(Lign, col3 + 1) = (TextBox14.Value)
.Cells(Lign, col4) = (TextBox10.Value)
.Cells(Lign, col4 + 1) = (TextBox13.Value)
.Cells(Lign, col5) = (TextBox6.Value)
.Cells(Lign, col5 + 1) = (TextBox11.Value)
.Cells(Lign, 60) = (ComboBox11.Value)
.Cells(Lign, 163) = (TextBox23.Value)
.Cells(Lign, 164) = (TextBox24.Value * TextBox20.Value)
Exit For
End If
Next Lign
End With
Unload Me
End Sub
Private Sub CmdAnnuler_Click()
Unload Me
Si ça peut aider d'autres personnes!
Re,
Oui mais... Y a encore moyen d'optimiser
Dans tout les Tag des contrôles du UF tu met la colonnes de destination, par exemple
dans TextBox3.tag tu met 1
TextBox4.tag tu met 2
TextBox5.tag tu met 3
TextBox20.tag tu met 6
TextBox21.tag tu met 66
ComboBox2.tag tu met 4
ComboBox12.tag tu met 5
etc.. pour tous
Et la macro devient..
Tu voulais "alléger".. beh voila..
Reste encore la recherche de la ligne, tu à des lignes vides intercalées ?
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Oui mais... Y a encore moyen d'optimiser
Dans tout les Tag des contrôles du UF tu met la colonnes de destination, par exemple
dans TextBox3.tag tu met 1
TextBox4.tag tu met 2
TextBox5.tag tu met 3
TextBox20.tag tu met 6
TextBox21.tag tu met 66
ComboBox2.tag tu met 4
ComboBox12.tag tu met 5
etc.. pour tous
Et la macro devient..
Private Sub cmdok_click()
Dim Lign As Long, Ctl As Control
'--- en feuil Infos va chercher la ligne vide.....
With Sheets("Infos")
For Lign = 5 To .Range("a" & Rows.Count).End(xlUp).Row + 1
'.... s'il n'y a pas d'erreur (déclenchée par une formule)
If Not IsError(.Cells(Lign, 1)) And .Cells(Lign, 1) = "" Then
Exit For
End If
Next Lign
For Each Ctl In Me.Controls
If TypeOf Ctl Is MSForms.ComboBox Then
.Cells(Lign, Ctl.Tag) = (Ctl.ListIndex * 2) + 11
ElseIf TypeOf Ctl Is MSForms.TextBox Then
.Cells(Lign, Ctl.Tag) = Ctl.Value
End If
Next Ctl
End With
End Sub
Tu voulais "alléger".. beh voila..
Reste encore la recherche de la ligne, tu à des lignes vides intercalées ?
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.