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 :

Multiples régressions avec plages variables


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Economiste
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Economiste
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut Multiples régressions avec plages variables
    Bonjour à tous,

    J'ai un code qui effectue plusieurs régressions linéaires avec des séries dont la longueur est non fixe.
    J'ai 18 variables à expliquer (colonne C à U) que je régresse avec 1 variable explicative (colonne B)
    [code]Option Explicit
    Sub Calcul_régression()
    '
    ' Calcul_régression Macro
    'Suprime les données et les bordures des précédentes regressions
    'Sélectionne l'ensemble des données non vides d'une colonne
    'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
    'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs

    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
    Dim dest As Worksheet
    Dim source As Worksheet
    Dim dernlig As Long
     
    Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
    Set source = ThisWorkbook.Sheets("Données")
    dernlig = source.Range("C" & Rows.Count).End(xlUp).Row
    dest.Cells.ClearContents
    dest.Cells.Borders(xlDiagonalDown).LineStyle = xlNone
    dest.Cells.Borders(xlDiagonalUp).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeLeft).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeTop).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeBottom).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeRight).LineStyle = xlNone
    dest.Cells.Borders(xlInsideVertical).LineStyle = xlNone
    dest.Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
     
         Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$C$5:$C$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$1:$I$18"), False, False, False, False, , False
            dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$D$5:$D$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$20:$I$38"), False, False, False, False, , False
            dest.Range("B20").FormulaR1C1 = "=Données!R[-16]C[2]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$E$5:$E$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$40:$I$58"), False, False, False, False, , False
            dest.Range("B40").FormulaR1C1 = "=Données!R[-36]C[3]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$F$5:$F$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$60:$I$78"), False, False, False, False, , False
            dest.Range("B60").FormulaR1C1 = "=Données!R[-56]C[4]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$G$5:$G$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$80:$I$98"), False, False, False, False, , False
            dest.Range("B80").FormulaR1C1 = "=Données!R[-76]C[5]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$H$5:$H$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$100:$I$118"), False, False, False, False, , False
            dest.Range("B100").FormulaR1C1 = "=Données!R[-96]C[6]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$I$5:$I$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$120:$I$138"), False, False, False, False, , False
            dest.Range("B120").FormulaR1C1 = "=Données!R[-116]C[7]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$J$5:$J$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$140:$I$158"), False, False, False, False, , False
            dest.Range("B140").Select
        ActiveCell.FormulaR1C1 = "=Données!R[-136]C[8]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$K$5:$K$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$160:$I$178"), False, False, False, False, , False
            dest.Range("B160").FormulaR1C1 = "=Données!R[-156]C[9]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$L$5:$L$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$180:$I$198"), False, False, False, False, , False
            dest.Range("B180").FormulaR1C1 = "=Données!R[-176]C[10]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$M$5:$M$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$200:$I$218"), False, False, False, False, , False
            dest.Range("B200").FormulaR1C1 = "=Données!R[-196]C[11]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$N$65:$N$" & dernlig), _
            source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$220:$I$238"), False, False, False, False, , False
            dest.Range("B220").FormulaR1C1 = "=Données!R[-216]C[12]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$O$65:$O$" & dernlig), _
            source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$240:$I$258"), False, False, False, False, , False
            dest.Range("B240").FormulaR1C1 = "=Données!R[-236]C[13]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$P$173:$P$" & dernlig), _
            source.Range("$B$173:$B$" & dernlig), False, False, , dest.Range("$A$260:$I$278"), False, False, False, False, , False
            dest.Range("B260").FormulaR1C1 = "=Données!R[-256]C[14]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$Q$65:$Q$" & dernlig), _
            source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$280:$I$298"), False, False, False, False, , False
            dest.Range("B280").FormulaR1C1 = "=Données!R[-276]C[15]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$R$5:$R$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$300:$I$318"), False, False, False, False, , False
            dest.Range("B300").FormulaR1C1 = "=Données!R[-296]C[16]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$S$5:$S$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$320:$I$338"), False, False, False, False, , False
            dest.Range("B320").FormulaR1C1 = "=Données!R[-316]C[17]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$T$65:$T$" & dernlig), _
            source.Range("$B$65:$B$" & dernlig), False, False, , dest.Range("$A$340:$I$358"), False, False, False, False, , False
            dest.Range("B340").FormulaR1C1 = "=Données!R[-336]C[18]"
     
        Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$U$5:$U$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$360:$I$378"), False, False, False, False, , False
            dest.Range("B360").FormulaR1C1 = "=Données!R[-356]C[19]"
    End Sub
    Ce code marche, mais je souhaiterais l'optimiser car je répète 18 fois la même action ...

    Je pense avoir trouvé comment passer d'une colonne à l'autre automatiquement.

    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
    Option Explicit
    Sub Calcul_régression()
    '
    ' Calcul_régression Macro
    'Suprime les données et les bordures des précédentes regressions
    'Sélectionne l'ensemble des données non vides d'une colonne
    'Calcule l'ensemble des régressions des différents secteurs et enregistre les données dans la feuille "regression taux longs"
    'Copie le nom du secteur correspondant à la regession dans la feuille "données" et le colle en face de la cellule "Rapport détaillé" de la feuille Reg_taux_longs
     
    Dim dest As Worksheet
    Dim source As Worksheet
    Dim dernlig As Long
    Dim derncol As String
    Dim T
    Dim a$
    a$ = Range("C1").SpecialCells(xlCellTypeLastCell).Address
    T = Split(a$, "$", -1)
    derncol = T(1)
     
    Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
    Set source = ThisWorkbook.Sheets("Données")
    dernlig = source.Range("C" & Rows.Count).End(xlUp).Row
    derncol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    dest.Cells.ClearContents
    dest.Cells.Borders(xlDiagonalDown).LineStyle = xlNone
    dest.Cells.Borders(xlDiagonalUp).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeLeft).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeTop).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeBottom).LineStyle = xlNone
    dest.Cells.Borders(xlEdgeRight).LineStyle = xlNone
    dest.Cells.Borders(xlInsideVertical).LineStyle = xlNone
    dest.Cells.Borders(xlInsideHorizontal).LineStyle = xlNone
     
    For i = C To derncol
         Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$i$5:$i$" & dernlig), _
            source.Range("$B$5:$B$" & dernlig), False, False, , dest.Range("$A$1:$G$18"), False, False, False, False, , False
            dest.Range("B1").FormulaR1C1 = "=Données!R[3]C[1]"
     
    Next
            End Sub
    Seulement, j'ai trois problématiques:
    - La variable à expliquer i (pour rappel il y en a 18) commence soit à la ligne 5 et soit à la ligne 65 ou 173, comment faire commencer la régression à partir de la première cellule non vide de i. Par exemple, lorsqu'une variable à expliquer i commence à la ligne 65, la variable à expliquer sera source.Range("$B$65:$B$" & dernlig)

    - Si le résultat de la première régression doit bien être stocké dans ("$A$1:$G$18"), je souhaiterais stocker les autres résultats dans des plages de 18 lignes et 7 colonnes automatiquement et espacer ces plages avec 1 ligne vide

    - Ensuite, je copie colle le nom de la régression (qui est l'entête de la colonne i) à la 1ere ligne et deuxième colonne de la dite plage

    Quelqu'un saurait-il comment faire une ou plusieurs de ces opération?

    Merci d'avance!
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. gestionnaire de nom avec plage variable
    Par LaMite dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/05/2014, 15h08
  2. VBA - Graphique avec plage variable
    Par virstyle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2010, 11h48
  3. comparaison de 2 feuille avec plage variable
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/04/2009, 21h49
  4. Création de validation de donnée avec plage variable
    Par Krovax dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/02/2009, 13h14
  5. Fonction "SOMME.SI" avec plage variable
    Par marc56 dans le forum Excel
    Réponses: 3
    Dernier message: 26/11/2008, 15h52

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