XL 2013 Simplification boucles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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.
 
Oups ! Sorry. 😱
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
 
Oups ! Sorry. 😱
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
 
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 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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
703
Réponses
8
Affichages
270
Réponses
4
Affichages
580
Réponses
8
Affichages
647
Réponses
10
Affichages
530
Réponses
4
Affichages
671
Réponses
2
Affichages
185
Réponses
5
Affichages
477
Retour