IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

combinaisons et boucles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut combinaisons et boucles
    Bonjour,

    Je cherche à faire des combinaisons exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    For i1 = 1 to 6
    	For i2= 1 to 6
                     For i3= 1 to 6
                       For i4= 1 to 6
                         For i5= 1 to 6
                           For i6= 1 to 6
     
    ‘différents calculs, exemple
    Q=a(i1)+a(i2)+a(i3)+ a(i4)+a(i5)+a(i6)
    ‘différents calculs, exemple
    a(i1)=10
    a(i3)=5
                      Next i6
                  Next i5
                 Next i4
              Next i3
         Next i2
    Next i1
    et dans ma boucle j'effectue diffrérents calculs....

    Le souci est que là j'ai 6 boucles et qu'il m'en faudrait 100....

    Donc : y a t il un moyen d'éviter de me "taper" les 100 lignes de commande "for i...(jusqu'à i100), next" ?

    (non, ce n'est pas pour craker un code secret...)

    Merci
    A+

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour

    je n'ai pas tout compris mais une table à 2 dimensions doit faire l'affaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim A(1 to 100, 1 to 6) as double
    dim i as byte, j as byte
    For i = 1 to 100
         for j = 1 to 6
             A(i,j) = (i*100)+j
         next j
    next i
    de plus je ne connais pas la limite des "piles" mais 100 boucles imbriquées me parait beaucoup et risque de provoquer une erreur
    cela revient dans ton cas à 6^100 au lieu de 6*100

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci wilfried_42,

    Je sais que je ne suis pas toujours clair...surtout le samedi matin ...

    J'ai essayé les tables à 2 dimensions, mais ça ne répond pas à mon problème....c'est effectivement les boucles imbriquées que je dois obtenir.

    Je pense qu'effectivement je risque d'avoir un message d'erreur suite aux nombreuses imbrications....ce que je cherche comme solution c'est de trouver un code qui m'évite de taper des lignes de code "for i1; for i2;for i3; et ce jusqu'à i100...". et idem pour "next i100; next i99;....next i1"

    Merci
    A+

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Bon ton problème est donc de créer un moteur de code pour :
    Eviter une saisie fastidieuse forcément source d’erreur à répétition etc….
    Sans juger de l’opportunité de la chose par rapport à ton contexte, voici une pirouette que j’utilise dans certains cas pour construire du code genre pour assigner à une grande série de textbox des cellules par leur nom etc….

    Dans une feuille vierge tu mets en :

    A1 : For I
    B1 : 2
    C1 : « = « (sans les quotes, mais avec les espaces et en texte ! »
    D1 : 1
    E1 : « to « (sans les quotes, mais avec les espaces et en texte ! »
    F1 : 6
    H1 : =CONCATENER(A10;B10;C10;D10;E10;F10)
    I1 : next I
    J2 : =CONCATENER(I10;B10)

    Tu tires tout ça (comme il faut) en recopie vers le bas et tu fait des copier coller dans ton code pour obtenir du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub moteurdecode()
    For I1 = 1 To 6
    For I2 = 1 To 6
    For I3 = 1 To 6
    For I4 = 1 To 6
    For I5 = 1 To 6
    For I6 = 1 To 6
    For I7 = 1 To 6
    For I8 = 1 To 6
    For I9 = 1 To 6
    For I10 = 1 To 6
     
     
    next I1
    next I2
    next I3
    next I4
    next I5
    next I6
    next I7
    next I8
    next I9
    next I10
     
     
    End Sub
    Sur des grandes séries, tu gagnes ton temps et c’est sans erreur, tu adaptes ensuite en fonction de ce qui est le plus rapide et le moins casse pieds à faire etc...


    Bonne Année,

    Didier

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonsoir,

    une autre proposition.
    Change la valeur de LeMax en fonction de tes besoins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub EcrireBoucle()
    Dim i As Long
    Dim LeMax As Long
    LeMax = 10
        For i = 1 To LeMax
            Debug.Print Application.Rept(vbTab, i - 1) & "For i" & i & " = 1 to " & LeMax
        Next
     
        Debug.Print vbLf & Application.Rept(vbTab, LeMax) & "'Bla bla bla" & vbLf & _
            Application.Rept(vbTab, LeMax) & "'Tes calculs ici" & vbLf
     
        For i = LeMax To 1 Step -1
            Debug.Print Application.Rept(vbTab, i - 1) & "Next i" & i
        Next
     
    End Sub
    Il reste à copier depuis la fenêtre exécution.
    Le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    For i1 = 1 to 10
        For i2 = 1 to 10
            For i3 = 1 to 10
                For i4 = 1 to 10
                    For i5 = 1 to 10
                        For i6 = 1 to 10
                            For i7 = 1 to 10
                                For i8 = 1 to 10
                                    For i9 = 1 to 10
                                        For i10 = 1 to 10
     
                                            'Bla bla bla
                                            'Tes calculs ici
     
                                        Next i10
                                    Next i9
                                Next i8
                            Next i7
                        Next i6
                    Next i5
                Next i4
            Next i3
        Next i2
    Next i1
    Cordialement

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Merci Ormonth,
    Merci fred65200,

    Une fois de plus, c'est simple et efficace....!!!!

    J'ai cherché le compliqué alors qu'un simple copié-collé suffit......

    Merci

    A+ pour de prochaines aventures.....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Combinaisons : comment remplacer des if par une boucle
    Par maccormick dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/10/2011, 14h40
  2. Réponses: 1
    Dernier message: 08/12/2009, 08h55
  3. Boucle Combinaison VBA
    Par Surfeur dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 23/05/2008, 16h08
  4. Réponses: 2
    Dernier message: 29/05/2002, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo