Premier début avec les Arrays

  • Initiateur de la discussion Initiateur de la discussion pascal82
  • 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 !

pascal82

XLDnaute Occasionnel
Bonsoir à tous,

Je commence à programmer avec les Arrays pour accélérer mes macros, par contre je n'arrive pas a faire évoluer les variables et a copier mes résultats. J'ai trouvé beaucoup de documents sur le sujet mais je coince sur ce cas.

Petite explication sur la demande:
J'ai huit variables situées de J1 à Q1 et elles évoluent de 1 à 4
Il y a un petit tableau A2:G8 qui reprend les 8 variables avec une opération simple (tableau A)
Un tableau R1:X1 (Tableau B) qui est le résultat de la somme par colonne du tableau A.
Je veux que pour chaque évolution de variables, recalcule et affichage du tableau B

Une macro (TestMacro1) existe pour comparer les résultats obtenus

Un grand merci par avance

Nota: Je viens de me rendre compte que la macro ne fonctionne pas en version 97-2003 à cause du nombre de lignes disponibles insuffisantes.
Avec ce code modifié cela fonctionne pour la version 97-2003 même si les derniers résultats ne sont pas affichés.

Code:
Sub TestMacro1()

 Dim a As Byte, b As Byte, c As Byte, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte
 Dim strOps As String
 Dim tStart As Double, tEnd As Double
Application.ScreenUpdating = False
tStart = Time
Range("J2:X65530").ClearContents

        For a = 1 To 4
        Range("J1") = a
            For b = 1 To 4
            Range("K1") = b
                For c = 1 To 4
                Range("L1") = c
                    For d = 1 To 4
                    Range("M1") = d
                        For e = 1 To 4
                        Range("N1") = e
                            For f = 1 To 4
                            Range("O1") = f
                                For g = 1 To 4
                                Range("P1") = g
                                    For h = 1 To 4
                                    Range("Q1") = h
                
StsBar strOps & "  a=" & a & "  b=" & b & "  c=" & c & "  d=" & d & "  e=" & e & "  f=" & f & "  g=" & g & "  h=" & h
Range("J65530").End(xlUp)(2).Resize(1, 15).Value = Range("J1:X1").Value

                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next

tEnd = Time
Range("AA1") = Format(tEnd - tStart, "HH:MM:SS")
ActiveWorkbook.Save
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Dernière édition:
Re : Premier début avec les Arrays

Bonjour le Fil,

j'avoue que je ne saisie pas non plus le pourquoi du comment...
Un tableau de x milliers de lignes sur 8 colonnes...
monTab(x ???, 8)
dans le dernier for mettre un compteur de ligne tableau

OPTION BASE 1


i = i+1
montableau (i,1)=a
montableau (i,2)=b
montableau (i,3)=c
montableau (i,4)=d
montableau (i,5)=e
montableau (i,6)=f
montableau (i,7)=g
montableau (i,8)=h

Mais après je ne vois pas à quoi cela pourrait bien servir....
Tu as 8 variables ayant 4 phases possibles. ce qui fait 8 ^ 4 = 65536 Lignes de possibilités...

@plus
 
Dernière édition:
Re : Premier début avec les Arrays

Bonjour,

C'est sur que présenté comme cela la demande peut paraitre farfelue. Cependant je ne veux pas modifier ma demande initiale en vous disant que je comptais ajouter une petite condition pour l'affichage des lignes.
L'objectif étant d'obtenir toutes les combinaisons possibles de variables pouvant satisfaire aux critères

Cordialement

Macro avec condition (version 2007):
Code:
Sub TestMacro1()

 Dim a As Byte, b As Byte, c As Byte, d As Byte, e As Byte, f As Byte, g As Byte, h As Byte
 Dim strOps As String
 Dim tStart As Double, tEnd As Double
    Application.ScreenUpdating = False
    tStart = Time
    Range("J2:X500000").ClearContents

        For a = 1 To 4
        Range("J1") = a
            For b = 1 To 4
            Range("K1") = b
                For c = 1 To 4
                Range("L1") = c
                    For d = 1 To 4
                    Range("M1") = d
                        For e = 1 To 4
                        Range("N1") = e
                            For f = 1 To 4
                            Range("O1") = f
                                For g = 1 To 4
                                Range("P1") = g
                                    For h = 1 To 4
                                    Range("Q1") = h
                
StsBar strOps & "  a=" & a & "  b=" & b & "  c=" & c & "  d=" & d & "  e=" & e & "  f=" & f & "  g=" & g & "  h=" & h
If (Range("R1") > 40 And Range("R1") < 45) Or (Range("S1") > 40 And Range("S1") < 45) Then
Range("J500000").End(xlUp)(2).Resize(1, 15).Value = Range("J1:X1").Value
End If
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
ActiveWorkbook.Save
tEnd = Time
Range("AA1") = Format(tEnd - tStart, "HH:MM:SS")
Application.ScreenUpdating = True
End Sub
 
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

Discussions similaires

Réponses
4
Affichages
461
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
482
Réponses
40
Affichages
3 K
Retour