4 boucles FOR en Une seule

  • Initiateur de la discussion Initiateur de la discussion cocacola
  • Date de début Date de début

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 !

C

cocacola

Guest
Bonsoir,

j'aimerai savoir s'il est possible de contracter ces 4 boucles en une seule, de façon à diminuer la taille de mon programme.

Merci


la seule chose qui différencie ces 4 boucles est la condition :

If A = B pour la première
If A = C pour la seconde
If Z = B pour la troisième
If Z = C pour la dèrnière

Code:
                For w = 0 To UBound(A)
                      For n = 0 To UBound(B)



                                If A(w) = B(n)  Then
                                ' le code...
                                        
                                End If
                                
                       Next n

                       
                 
    
                Next w
                
                 For w = 0 To UBound(A)
                      For n = 0 To UBound(C)
                       
                                If A(w) = C(n) Then
                                ' le code...
                                        
                                End If
                                
                       Next n

                
                Next w



                
                    For w = 0 To UBound(Z)
                      For n = 0 To UBound(B)

                                If Z(w) = B(n)  Then
                                ' le code...
                                        
                                End If
                                
                       Next n
                       
                Next w



                    For w = 0 To UBound(Z)
                      For n = 0 To UBound(C)


                                If Z(w) = C(n)  Then
                                ' le code...
                                        
                                End If
                                
                       Next n
    
                Next w
                
                
         End If
 
Dernière modification par un modérateur:
Re : 4 boucles FOR en Une seule

bonsoir,

Une petite contraction qui permet une légère amélioration.

Sub Macro1()
For w = 0 To UBound(A)
For n = 0 To UBound(B)
If A(w) = B(n) Then
' le code...
End If
Next n


For n = 0 To UBound(C)
If A(w) = C(n) Then
' le code...
End If
Next n
Next w


For w = 0 To UBound(Z)
For n = 0 To UBound(B)
If Z(w) = B(n) Then
' le code...
End If
Next n

For n = 0 To UBound(C)
If Z(w) = C(n) Then
' le code...
End If
Next n
Next w
End Sub
 
Re : 4 boucles FOR en Une seule

Bonjour cocacola, CBernardT,

Un essai en utilisant un tableau de tableaux. Voir le fichier joint.

Joindre un fichier est indispensable si vous voulez qu'on répondre correctement à votre cas spécifique et ne pas obliger les répondants à créer le fichier eux-même avec leurs petits doigts.😡

Voir l'exemple tout à fait bidon dans le fichier joint. Le but: si une cellule des colonnes B à E est égale en valeur absolue à la valeur absolue d'une des cellules de la colonne A, alors on change sa valeur par la valeur opposée. (cliquer sur le gros bouton)

On va traiter les cellules colonne par colonne. Chaque colonne est transformée en tableau qui est placé dans un tableau de tableaux Cols. Le premier élément de Cols(0) correspond à la colonne de référence (valeurs de la colonne A).

On effectue 3 boucles imbriquées:
  1. une boucle sur Cols(1) à Cols(4) pour traiter successivement les valeurs de chaque colonne (B à E) - boucle i
  2. une boucle sur chaque valeur de la colonne de référence - boucle w - Cols(0)
  3. une boucle sur chaque valeur de la colonne qu'on est en train de traiter - boucle n - Cols(i)

le code dans module 1:
VB:
Sub test()
Dim i&, w&, n&, Cols(0 To 4)

Sheets("Feuil1").Activate
Application.ScreenUpdating = False
Range(Range("A1"), Range("a1").End(xlDown)).Resize(, 5).Sort _
      key1:=Range("A1"), Header:=xlYes

'stockage des tableaux dans le tableau Cols()
Cols(0) = Range("a:a").Resize(Range("a1").End(xlDown).Row).Value
Cols(1) = Range("b:b").Resize(Range("b1").End(xlDown).Row).Value
Cols(2) = Range("c:c").Resize(Range("c1").End(xlDown).Row).Value
Cols(3) = Range("d:d").Resize(Range("d1").End(xlDown).Row).Value
Cols(4) = Range("e:e").Resize(Range("e1").End(xlDown).Row).Value

'les 3 boucles imbriquées
For i = 1 To 4
'boucle sur chaque tableau de colonne = cols(1) à Cols(4)
  For w = 2 To UBound(Cols(0))
    'boucle sur chaque valeur de la colonne A
      For n = 2 To UBound(Cols(i))
        'boucle sur chaque valeur de la colonne qu'on traite Cols(i)
        If Abs(Cols(0)(w, 1)) = Abs(Cols(i)(n, 1)) And _
                Cols(0)(w, 1) <> Cols(0)(w - 1, 1) Then
          Cols(i)(n, 1) = -Cols(i)(n, 1)
        End If
      Next n
  Next w
'transfert du résultat du tabeau cols(i) vers la feuille
Range("A1").Offset(, i).Resize(UBound(Cols(i))).Value = Cols(i)
Next i

Application.ScreenUpdating = True
End Sub

Dans votre cas, il faudrait deux tableaux de tableaux:
tablo1(1 to 2) ( qui contient les tableaux A et Z)
tablo2(1 to 2) ( qui contient les tableaux B et C)

Le code deviendrait:

Code:
for i = 1 to 2
   for j = 1 to 2
       For w = 0 To UBound(tablo1(i))
           For n = 0 To UBound(tablo1(j))
              If tablo1(i)(w) = tablo2(j)(n)  Then
                 le code...
             End If 
          Next n
       Next w
   next j
next i
 

Pièces jointes

Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
912
Réponses
15
Affichages
786
Réponses
4
Affichages
281
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
293
Réponses
8
Affichages
390
Retour