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 :

Boucle sur plusieurs tableaux [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut Boucle sur plusieurs tableaux
    Bonjour à tous,

    Dans mon activité professionnelle je suis amené à utiliser le VBA depuis environ 3 mois. Je n'avais jamais utilisé ce langage avant, mais je suis arrivé, grâce aux enregistrement de macro, à l'aide et à google, à trouver réponse à toutes mes questions.

    Toutes ?
    Non !
    Car un code peuplé d'irréductibles erreurs résiste encore et toujours à mon imagination !

    Voici la bête :

    J'utilise des tableaux répertoriant les targets à atteindre chaque année pour un certain nombre d'usines :

    Voici un tableau pour comprendre :

     -------  2013 -  2014 -  2015 -  2016
    Usine1  -- 0.5 --- 0.5 --- 0.4 --- 0.4
    Usine2  --   1 ---   1 ---   1 --- 0.8
    Usine3  --   5 ---   4 ---   3 ---   2
    Et voici comment je les ai défini dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tableau_usines = VBA.Array("usine1", "usine2", "usine3")
    tableau2013 = VBA.Array("0.5", "1", "5")
    tableau2014 = VBA.Array("0.5", "1", "4")
    tableau2015 = VBA.Array(...)
    tableau2016 = VBA.Array(...)
    Pas de souci là-dessus, tout marche bien.

    Dans mon code je crée un onglet pour chaque usine, et je veux créer dans chaque onglet un tableau avec les targets pour chaque année.

    Sauf que le nombre d'années affiché va changer selon l'usine !
    J'utilise pour ça une variable T qui vaut 0 en 2013, 1 en 2014, 2 en 2015 etc...

    Je veux donc faire :
    - une boucle sur les usines
    --- une boucle qui écrit la target de l'année, mais seulement jusqu'à l'année définie par T
    --- fin boucle target
    -fin boucle usines

    J'ai essayé quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for u= 0 to ubound(Tableau_Usines)
            'blablabla, code pour créer l'onglet
            'On donne la valeur de T
    
            For a = 2013 To 2013 + T 
    
                    Cells(2, a - 2008).Value = Tableau & a & (u)
    
            Next a
    
    next u
    Je voudrais que Tableau & a & (u) aille chercher la target de l'usine u dans le tableau de l'année définie avec T.
    Mais cela ne marche pas, et je n'arrive pas à trouver la bonne syntaxe.

    (J'ai réfléchi à passer par un tableau ayant deux dimensions, mais j'ai toujours le même problème pour le remplir (les tableaux des targets sont remplis pour l'utilisateur directement dans le code de la macro).)

    Connaîtriez vous la syntaxe pour résoudre ce problème ?

    Merci d'avance,
    Syldb

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    un peu de lecture et cela ira mieux !

    Utiliser les variables tableaux en VBA Excel

    Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour, regarde ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Test()
    Dim Annee As New Collection
    Annee.Add Array("0.5", "1", "5"), "2013"
    Annee.Add Array("0.5", "1", "5"), "2014"
    Annee.Add Array("0.5", "1", "5"), "2015"
    T = 3
    For a = 2013 To 2013 + T - 1
           Cells(2, a - 2012).Value = Annee(CStr(a))
    Next
    End Sub

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Bonjour Marc,

    J'étais déjà tombé sur ces explications, mais même en les ayant reparcourus rapidement je n'ai pas trouvé ce que je cherche.

    Mon problème n'est pas dans la manipulation des tableaux, mais dans l'appel de ceux-ci à l'intérieur d'une boucle.

    Je voudrais l'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to n
          Cells(2, i).Value = var & i
    next i
    Fusionné avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to n
          Cells(2, i).Value = tableau(i)
    next i
    Mais appliqué à plusieurs tableaux, qui donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to n
          Cells(2, i).Value = tabl & i & (u)
    next i
    Je ne sais pas si ce que j'écris est bien compréhensible, peut être que je me prends la tête pour rien ?

    Edit : @rdurupt : je ne connaissais pas les collections mais ça à l'air de pouvoir marcher, je regarde ça de suite !

    J'ai essayé d'adapter la collection dans mon code, mais en fait le problème est encore d'atteindre une usine et une année précises.

    Dans ton code, on regarde bien les années jusqu'à celle définie par T, mais peut-on prendre la valeur u de l'array a ?

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for u = 0 to ubound(tableau_usines)
          For a = 2013 To 2013 + T - 1
                Cells(2, a - 2012).Value = Annee(CStr(a))(u)
          Next
    next u
    Mais sans succès...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Syldb Voir le message
    J'ai essayé d'adapter la collection dans mon code, mais en fait le problème est encore d'atteindre une usine et une année précises.

    Dans ton code, on regarde bien les années jusqu'à celle définie par T, mais peut-on prendre la valeur u de l'array a ?

    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for u = 0 to ubound(tableau_usines)
          For a = 2013 To 2013 + T - 1
                Cells(2, a - 2012).Value = Annee(CStr(a))(u)
          Next
    next u
    Mais sans succès...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    T = 3
    Dim a As Integer
    Dim U As Integer
    Dim Tableau()
    For a = 2013 To 2013 + T - 1
    Tableau = Annee(CStr(a))
        For U = 0 To UBound(Tableau)
           Cells(2, a - 2012).Value = Cells(2, a - 2012).Value + Val(Tableau(U))
           Next
    Next

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Par défaut
    Super, ça marche !!

    (BTW en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for u = 0 to ubound(tableau_usines)
          For a = 2013 To 2013 + T - 1
                Cells(2, a - 2012).Value = Annee(CStr(a))(u)
          Next
    next u
    marchait aussi, je m'étais trompé dans mes indices, les Array d'une collection commencent bien à 0, je ne sais pas pourquoi j'avais 1 en tête...)

    Merci beaucoup pour ces réponses extrêmement rapides !!

  7. #7
    Invité
    Invité(e)
    Par défaut
    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
    27
    28
    29
    30
    Private Sub test()
    Dim Usine As New Collection
    Dim Annee As Collection
    Set Annee = New Collection
    Annee.Add Array("0.5", "1", "5"), "2013"
    Annee.Add Array("0.5", "1", "5"), "2014"
    Annee.Add Array("0.5", "1", "5"), "2015"
    Usine.Add Annee, "Poissy" 'nom des onglets
    Set Annee = Nothing
    Set Annee = New Collection
    Annee.Add Array("22", "15", "6"), "2013"
    Annee.Add Array("1", "7", "8"), "2014"
    Annee.Add Array("0.5", "4", "13"), "2015"
    Usine.Add Annee, "Paris" 'nom des onglets
    Set Annee = Nothing
     
     T = 3
    Dim a As Integer
    Dim U As Integer
    Dim x As Integer
    Dim Tableau()
    For U = 2 To ActiveWorkbook.Sheets.Count
        For a = 2013 To 2013 + T - 1
            Tableau = Usine(ActiveWorkbook.Sheets(U).Name).Item(CStr(a))
            For Z = 0 To UBound(Tableau)
           Cells(2, a - 2012).Value = Cells(2, a - 2012).Value + Val(Tableau(Z))
           Next
        Next
    Next
    End Sub

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

Discussions similaires

  1. Boucle sur plusieurs colonnes définies à l'avance
    Par fuyo2004 dans le forum Excel
    Réponses: 5
    Dernier message: 28/04/2010, 11h26
  2. [XL-2007] INDEX EQUIV sur plusieurs tableaux
    Par guilermo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2010, 08h03
  3. Boucles sur plusieurs tables
    Par thiblight dans le forum SAS Base
    Réponses: 6
    Dernier message: 07/07/2009, 14h54
  4. [VxiR2] Problème déphasage alignement sur plusieurs tableaux
    Par scalpa63 dans le forum Deski
    Réponses: 5
    Dernier message: 27/03/2009, 11h17
  5. [phpBB][2] Faire une boucle sur plusieurs colonnes
    Par Vinuto dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 28/09/2007, 10h45

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