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 :

Aide pour stocker resultats d'une boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Par défaut Aide pour stocker resultats d'une boucle
    BOnjour,

    Je débute avec vba et j'ai un problème d'algorithmique.

    Voila, j'ai un tableau contenant n lignes et m colonnes, la premiere colonne me donne juste la valeur de la variable i. Je cherche à faire la somme par colonne pour les differentes valeurs de i
    Donc je fais une boucle sur i et fais le calcul mais....

    Mon resultat doit etre un tableau de dimension (i, m-1).

    Comment obtenir ce tableau? pour l'instant j'obtiens (1, m-1).

    Merci de tte suggestion,
    J.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Je n'ai rien compris... Tu as tableaux de n lignes et m colonnes... plein ?

    La première colonne te donne la valeur de la variable i... qui s'incrémente avec des données externes ? qui change ?

    Tu veux faire la somme sur les colonnes, c'est donc normal que tu aies un tableau (1, m-1), non ?

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Donne nous un fichier exemple en pièce jointe s'il te plait. Ca serait plus facile pour t'aider, je pense. Le code avec tes explications ne suffisent pas à eux seuls (enfin, pour moi en tout cas...).

  4. #4
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Par défaut
    Voila un petit fichier exemple.

    Merci beaucoup
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Par défaut
    Bonjour,

    Je joins un exemple, c'est vrai que mon explication n'est pas très claire.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Sub avg()
    '
    ' avg Macro
    '
    Dim i As Variant
    Dim ColMax As Long
    Dim ColCrnt As Long
    Dim RowCrntMax As Long
    Dim RowCrnt As Long
    Dim TotalPerc As Double
    Dim Myoutput As String
    Dim LL As Long
    Dim count As Double
    Dim avg As Double
    Dim RowSum As Long
    Dim Row As Long
    Dim Col As Long
    Dim Status(8) As String
    Dim Status_code(7) As String
    Dim Dat(10) As String
     
    Status(1) = "00_"
    Status(2) = "01_"
    Status(3) = "02_"
    Status(4) = "02B"
    Status(5) = "03"
    Status(6) = "04"
    Status(7) = "05"
    Status(8) = "06"
     
    ' RENAME the new sheet
    Sheets.Add
    ActiveSheet.Name = "Average"
    Myoutput = ActiveSheet.Name
     
        'Fill array Status
     
        For lLoop = 0 To 7
     
            If lLoop = 0 Then
     
              Status_code(lLoop) = "Var2"
     
            Else
     
                Status_code(lLoop) = Choose(lLoop, "01_", "02_", "02B", "03_", "04_", "05_", "06_")
     
            End If
     
        Next lLoop
     
       'Output unsorted array
     
        Range("A1:A" & UBound(Status_code) + 1) = _
        WorksheetFunction.Transpose(Status_code)
     
        'Fill array Date
     
        For lLoop2 = 0 To 10
     
           If lLoop2 = 0 Then
     
              Dat(lLoop2) = "Year"
     
            Else
     
                Dat(lLoop2) = Choose(lLoop2, "1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008")
     
            End If
     
        Next lLoop2
     
    Range(Cells(1, 2), Cells(1, UBound(Dat))) = Dat
     
    With Sheets("Output")
     
    For Each i In Status
     
    ' Find last used column
    ColMax = .Cells.SpecialCells(xlCellTypeLastCell).Column
     
        ' Examine every used column
        For ColCrnt = 4 To ColMax
     
            ' Find last used row in this column
            RowCrntMax = .Cells(Rows.count, ColCrnt).End(xlUp).Row
     
    count = 0
    TotalPerc = 0
     
                ' Examine each row for this column
     
                    For RowCrnt = 3 To RowCrntMax
     
                        'Calculate average %
                        TotalPerc = TotalPerc + Val(.Cells(RowCrnt, ColCrnt).Value)
                        count = count + 1
                        avg = TotalPerc / count
     
                            For Row = 2 To 8
                                For Col = 3 To 12
     
                                     With Sheets("Average")
     
                                        RowSum = .Cells(Row, Col)
     
                                            With .Cells(Row, Col)
                                                .Value = avg
                                            End With
     
     
                                    End With
     
                            Next
                        Next
     
                    Next
     
        Next
     
      Next
     
    End With
     
    End Sub
    Je devrais recuperer sur la feuille "average" une moyenne pour chaque valeur de i donc un tableau e dimension (i, année) mais je ne sais pas intégrer cette instruction dans le code. J'ai aussi un probleme avec les années, je construis un array Dat(10) avec 10 valeurs mais seulement 8 s'affichent?

    Merci d'avance

    J'ai oublié en ligne 110 la condition sur la variable i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   If .Cells(RowCrnt, 2).Value = i Then
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    Sub avg()
    '
    ' avg Macro
    '
    Dim i As Variant
    Dim ColMax As Long
    Dim ColCrnt As Long
    Dim RowCrntMax As Long
    Dim RowCrnt As Long
    Dim TotalPerc As Double
    Dim Myoutput As String
    Dim LL As Long
    Dim count As Double
    Dim avg As Double
    Dim RowSum As Long
    Dim Row As Long
    Dim Col As Long
    Dim Status(8) As String
    Dim Status_code(7) As String
    Dim Dat(10) As String
     
    Status(1) = "00_"
    Status(2) = "01_"
    Status(3) = "02_"
    Status(4) = "02B"
    Status(5) = "03"
    Status(6) = "04"
    Status(7) = "05"
    Status(8) = "06"
     
    ' RENAME the new sheet
    Sheets.Add
    ActiveSheet.Name = "Average"
    Myoutput = ActiveSheet.Name
     
        'Fill array Status
     
        For lLoop = 0 To 7
     
            If lLoop = 0 Then
     
              Status_code(lLoop) = "Var2"
     
            Else
     
                Status_code(lLoop) = Choose(lLoop, "01_", "02_", "02B", "03_", "04_", "05_", "06_")
     
            End If
     
        Next lLoop
     
       'Output unsorted array
     
        Range("A1:A" & UBound(Status_code) + 1) = _
        WorksheetFunction.Transpose(Status_code)
     
        'Fill array Date
     
        For lLoop2 = 0 To 10
     
           If lLoop2 = 0 Then
     
              Dat(lLoop2) = "Year"
     
            Else
     
                Dat(lLoop2) = Choose(lLoop2, "1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008")
     
            End If
     
        Next lLoop2
     
     
    Range(Cells(1, 2), Cells(1, UBound(Dat))) = Dat
     
     
    With Sheets("Output")
     
    For Each i In Status
     
    ' Find last used column
    ColMax = .Cells.SpecialCells(xlCellTypeLastCell).Column
     
        ' Examine every used column
        For ColCrnt = 4 To ColMax
     
            ' Find last used row in this column
            RowCrntMax = .Cells(Rows.count, ColCrnt).End(xlUp).Row
     
    count = 0
    TotalPerc = 0
     
                ' Examine each row for this column
     
                    For RowCrnt = 3 To RowCrntMax
     
                         If .Cells(RowCrnt, 3).Value = i Then
     
                        'Calculate average %
                        TotalPerc = TotalPerc + Val(.Cells(RowCrnt, ColCrnt).Value)
                        count = count + 1
                        avg = TotalPerc / count
     
                            For Row = 2 To 8
                                For Col = 3 To 12
     
                                     With Sheets("Average")
     
                                        RowSum = .Cells(Row, Col)
     
                                            With .Cells(Row, Col)
                                                .Value = avg
                                            End With
     
                                    End With
     
                            Next
                        Next
     
                    Next
     
        Next
     
    Next
     
    End With
     
    End Sub
    Merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/09/2010, 13h09
  2. Réponses: 2
    Dernier message: 10/03/2006, 13h55
  3. [SYBASE] Aide pour l'écriture d'une requête
    Par karine77 dans le forum Sybase
    Réponses: 2
    Dernier message: 26/04/2005, 10h57

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