XL 2013 Simplification boucles

youguybass

XLDnaute Junior
Je cherche à simplifier ces boucles en 1 seule
Merci pour votre aide

'Remplissage des références
E = 37
For C = 10 To 164 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next

'Remplissage des désignations Op
E = 39
For C = 12 To 166 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next

'Remplissage des Clients
E = 40
For C = 14 To 168 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next

'Remplissage des désignations Pièces
E = 41
For C = 13 To 167 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next

'Remplissage des Ref clients
E = 42
For C = 15 To 169 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Youguybass,
Essayez en passant par un tableau ( E, Cdébut, Cfin ) :
VB:
Sub Essai()
    Tablo = Array(37, 10, 164, 39, 12, 166, 40, 14, 168, 41, 13, 167, 42, 15, 169)
    'Remplissage des références
    E = Tablo(i)
    For i = LBound(Tablo) To UBound(Tablo) Step 3
        For C = Tablo(i + 1) To Tablo(i + 2) Step 11
            If Me.Controls("TextBox" & C).Value <> "" Then
                Cells(L, E).Value = Me.Controls("TextBox" & C).Value
                E = E + 6
            End If
        Next C
    Next i
End Sub
Pas pu essayer car Me n'est pas connu, ainsi que L certainement défini autre part.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Votre première boucle est :
VB:
'Remplissage des références
E = 37
For C = 10 To 164 Step 11
If Me.Controls("TextBox" & C).Value <> "" Then
Cells(L, E).Value = Me.Controls("TextBox" & C).Value
E = E + 6
End If
Next
L'init de ma première bouche est :
Code:
Sub Essai()
    Tablo = Array(37, 10, 164, 39, 12, 166, 40, 14, 168, 41, 13, 167, 42, 15, 169)
    'Remplissage des références
    E = Tablo(i)
    For i = LBound(Tablo) To UBound(Tablo) Step 3
               For C = Tablo(i + 1) To Tablo(i + 2) Step 11
Première boucle : i=0
E=Tablo(i) donc E=37
Début= Tablo(i + 1) donc Début=10
Fin= Tablo(i + 2) donc Fin=164
Donc ça fait la même chose.
Je ne comprends pas pourquoi le fonctionnement serait différent.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oups ! Sorry. :eek:
Sans fichier pour tester j'ai pas vu le bug.
E, Début et Fin boucle doivent être initialisés dans le For Next de parcours de l'array.
Or E était initialisé avant cette boucle, donc E était initialisé à Tablo(i) donc tablo(0) et ne bougeait plus.
Testez ceci, j'ai remis le E dans la boucle :
VB:
Sub Essai()
    Tablo = Array(37, 10, 164, 39, 12, 166, 40, 14, 168, 41, 13, 167, 42, 15, 169)
    'Remplissage des références
    For i = LBound(Tablo) To UBound(Tablo) Step 3
        E = Tablo(i)
        For C = Tablo(i + 1) To Tablo(i + 2) Step 11
            If Me.Controls("TextBox" & C).Value <> "" Then
                Cells(L, E).Value = Me.Controls("TextBox" & C).Value
                E = E + 6
            End If
        Next C
    Next i
End Sub
 

youguybass

XLDnaute Junior
Oups ! Sorry. :eek:
Sans fichier pour tester j'ai pas vu le bug.
E, Début et Fin boucle doivent être initialisés dans le For Next de parcours de l'array.
Or E était initialisé avant cette boucle, donc E était initialisé à Tablo(i) donc tablo(0) et ne bougeait plus.
Testez ceci, j'ai remis le E dans la boucle :
VB:
Sub Essai()
    Tablo = Array(37, 10, 164, 39, 12, 166, 40, 14, 168, 41, 13, 167, 42, 15, 169)
    'Remplissage des références
    For i = LBound(Tablo) To UBound(Tablo) Step 3
        E = Tablo(i)
        For C = Tablo(i + 1) To Tablo(i + 2) Step 11
            If Me.Controls("TextBox" & C).Value <> "" Then
                Cells(L, E).Value = Me.Controls("TextBox" & C).Value
                E = E + 6
            End If
        Next C
    Next i
End Sub

Parfait ça marche correctement maintenant merci
Et de plus sans fichiers bravo

Encore merci
 

soan

XLDnaute Barbatruc
Inactif
Bonjour youguybass, sylvanu,

je propose cette autre solution (sans fichier et sans tableau) :

VB:
Option Explicit

'Remplissage
'i   Champ
'10  Référence
'12  Désignation Op
'13  Désignation Pièce
'14  Nom Client
'15  Réf Client

Private Sub CommandButton1_Click()
  Dim V$, E As Byte, C As Byte, L As Byte, i As Byte
  For i = 10 To 15
    If i <> 11 Then
      E = 27 + i - (i = 13) + (i = 14)
      For C = i To 154 + i Step 11
        V = Controls("TextBox" & C)
        If V <> "" Then Cells(L, E) = V: E = E + 6
      Next C
    End If
  Next i
End Sub

attention : pour E, je me demande si tu n'as pas inversé 40 et 41 ! je veux dire : c'est peut être E = 40 pour une Désignation Pièce et E = 41 pour un Nom Client ? si oui, mets E = 27 + i au lieu de :

E = 27 + i - (i = 13) + (i = 14)

soan
 

youguybass

XLDnaute Junior
Bonjour youguybass, sylvanu,

je propose cette autre solution (sans fichier et sans tableau) :

VB:
Option Explicit

'Remplissage
'i   Champ
'10  Référence
'12  Désignation Op
'13  Désignation Pièce
'14  Nom Client
'15  Réf Client

Private Sub CommandButton1_Click()
  Dim V$, E As Byte, C As Byte, L As Byte, i As Byte
  For i = 10 To 15
    If i <> 11 Then
      E = 27 + i - (i = 13) + (i = 14)
      For C = i To 154 + i Step 11
        V = Controls("TextBox" & C)
        If V <> "" Then Cells(L, E) = V: E = E + 6
      Next C
    End If
  Next i
End Sub

attention : pour E, je me demande si tu n'as pas inversé 40 et 41 ! je veux dire : c'est peut être E = 40 pour une Désignation Pièce et E = 41 pour un Nom Client ? si oui, mets E = 27 + i au lieu de :

E = 27 + i - (i = 13) + (i = 14)

soan
Bonjour et merci pour votre retour
le 40 et le 41 sont bien inversés, c'est normal

J'ai déja intégré le 1° code envoyé et vérifié a mon fichier, Celui-ci m'a l'air correct également
Merci la démarche
 

Discussions similaires

Réponses
6
Affichages
202
Réponses
4
Affichages
151