Réduire mon code

Résolu
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005 - 6 juin 2005 à 10:35
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 - 6 juin 2005 à 14:10
Bonjour j'ai réalisé un control array pour réduire mon code quelqu'un peut m'aider concernant la formule a adapter??
Voici mon ancien code..

Dim Row
' Recherche la dernière ligne utilisée
Row = ActiveSheet.UsedRange.Row
'Row = Row + 1
With ActiveSheet
If TxtQuantité.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = TxtMachine.Text
monxl.Cells(Row, 2).Value = TxtQuantité.Text
monxl.Cells(Row, 3).Value = TxtPrix.Text
End If
End With

With ActiveSheet
If TxtQuantité1.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails1.Text
monxl.Cells(Row, 2).Value = TxtQuantité1.Text
monxl.Cells(Row, 3).Value = Txtprix1.Text

End If
End With

With ActiveSheet
If TxtQuantité2.Text <> "" Then
Row = Row + 1

monxl.Cells(Row, 1).Value = Txtdétails2.Text
monxl.Cells(Row, 2).Value = TxtQuantité2.Text
monxl.Cells(Row, 3).Value = Txtprix2.Text
End If
End With
With ActiveSheet
If TxtQuantité3.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails3.Text
monxl.Cells(Row, 2).Value = TxtQuantité3.Text
monxl.Cells(Row, 3).Value = Txtprix3.Text
End If
End With


With ActiveSheet
If TxtQuantité4.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails4.Text
monxl.Cells(Row, 2).Value = TxtQuantité4.Text
monxl.Cells(Row, 3).Value = Txtprix4.Text
End If
End With
With ActiveSheet
If TxtQuantité5.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails5.Text
monxl.Cells(Row, 2).Value = TxtQuantité5.Text
monxl.Cells(Row, 3).Value = Txtprix5.Text
End If
End With
With ActiveSheet
If TxtQuantité6.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails6.Text
monxl.Cells(Row, 2).Value = TxtQuantité6.Text
monxl.Cells(Row, 3).Value = Txtprix6.Text
End If
End With
With ActiveSheet
If TxtQuantité7.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails7.Text
monxl.Cells(Row, 2).Value = TxtQuantité7.Text
monxl.Cells(Row, 3).Value = Txtprix7.Text
End If
End With
With ActiveSheet
If TxtQuantité8.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails8.Text
monxl.Cells(Row, 2).Value = TxtQuantité8.Text
monxl.Cells(Row, 3).Value = Txtprix8.Text
End If
End With
With ActiveSheet
If TxtQuantité9.Text <> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = Txtdétails9.Text
monxl.Cells(Row, 2).Value = TxtQuantité9.Text
monxl.Cells(Row, 3).Value = Txtprix9.Text
End If
End With

TxtQuantité1(0)....jusque 33
Txtdétails1(0) ... jusque 33
Comment réduire tout ce code maintenant? merci

8 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
6 juin 2005 à 13:42
oui il y a une différence, en vba, les index n'existent pas,ce qui complique la tâche.

en vb6,

tu crees toutes ta série de ltextbox avec le meme nom pour chaque intitulé, seul les index feront la différence.

exemple :
TxtQuantité(0).Text Txtdétails(0).Text TxtQuantité(0).Text Txtprix(0).Text
TxtQuantité(1).Text Txtdétails(1).Text TxtQuantité(1).Text Txtprix(1).Text
etc jusqu'a 33

....En dehors du 1er code, ou le name de ta textbox differe et ou il devra y avoir une adaptation :

dim i as integer
for i = 0 to 33
With ActiveSheet
If TxtQuantité(i).Text <> "" Then
Row = Row + 1
select case i
case 0
monxl.Cells(Row, 1).Value = TxtMachine.Text
monxl.Cells(Row, 2).Value = TxtQuantité(i).Text
monxl.Cells(Row, 3).Value = TxtPrix(i).Text
case else
monxl.Cells(Row, 1).Value = Txtdétails(i).Text
monxl.Cells(Row, 2).Value = TxtQuantité(i).Text
monxl.Cells(Row, 3).Value = Txtprix(i).Text
end select
End If
End With
next i

Biensur je suppose qu'il doit falloir l'adapter, compte tenu que je ne connais pas tout a fait les détails de ton code, mais ca devrait ressembler à ca.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 juin 2005 à 11:24
Utilise des groupes de contrôles (contrôles ayant le même nom mais avec
des numéros d'index pour les différencier) ainsi qu'une boucle For, et
cela te permettra de réduire ton code à une dizaine de ligne environ !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
6 juin 2005 à 11:55
Sauf que ca a l'air d'etre du vba, pour les index ca va etre plus compliqué que ca.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005
6 juin 2005 à 12:15
oui comme For i = 0 To 33

Mais le probleme c'est que je sais pas comment faire quand on utilise des groupes de controles ainsi ...J'ai déjà fait un control array avec TxtQuantité1[0] TxtQuantité1[1]... etc mais je m'y retrouve pas en faisant le code qq un pourrait débuter le code après For i = 0 To 33

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
6 juin 2005 à 12:19
c'est du vb ou du vba ?

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005
6 juin 2005 à 13:25
c'est en vb6 pq , il y a une grosse différence??
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 juin 2005 à 13:44
Oui, assez !



Donc, c'est bien cà, utilise un groupe de contrôle (renomme tout tes
contrôles du même style avec le même nom tout simplement, au lieu de
laisser un numéro derrière le nom !), ca t'évitera ce genre de
gonflement dans le code.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
cs_franckydeluka Messages postés 228 Date d'inscription mardi 5 avril 2005 Statut Membre Dernière intervention 4 janvier 2008 1
6 juin 2005 à 14:10
sinon tu peux utiliser des listbox plutôt que des textbox
comme

For i = 0 To 33

With ActiveSheet
If ListQuantité.List(i)<> "" Then
Row = Row + 1
monxl.Cells(Row, 1).Value = ListMachine.List(i)
monxl.Cells(Row, 2).Value = ListQuantité.List(i)
monxl.Cells(Row, 3).Value = ListPrix.List(i)
End If
End With

Next i



Deluka.
0
Rejoignez-nous