Regréssion dans VBA avec des séries dont la longueur augmente tous les mois

Bonjour,

Je débute dans les macro vba et viens de passer un certain temps à essayer de debugger mon code. J'espère que quelqu'un sur le forum pourra m'aider.

J'ai un fichier avec 19 variables (18 expliquées et 1 explicative). Je dois donc réaliser 18 régressions linéaires sur la base de ces données. Sachant que mes 19 séries "accueillent" une nouvelle donnée tous les mois ce qui fait que la longueur de ma série n'est pas fixe.

J'ai dans un premier temps, écris à l'aide de l'enregistreur de macro le code ci-dessous qui effectue les 18 régressions dont j'ai besoin (code non optimal je sais bien). Et celui-ci marche bien:

ActiveWorkbook.Sheets("Reg_taux_longs").Cells.Select

Selection.ClearContents

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

Selection.Borders(xlEdgeBottom).LineStyle = xlNone

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

'

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$C$5:$C$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$1:$I$18"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B1").Select

ActiveCell.FormulaR1C1 = "=Données!R[3]C[1]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$D$5:$D$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$20:$I$38"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B20").Select

ActiveCell.FormulaR1C1 = "=Données!R[-16]C[2]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$E$5:$E$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$40:$I$58"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B40").Select

ActiveCell.FormulaR1C1 = "=Données!R[-36]C[3]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$F$5:$F$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$60:$I$78"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B60").Select

ActiveCell.FormulaR1C1 = "=Données!R[-56]C[4]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$G$5:$G$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$80:$I$98"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B80").Select

ActiveCell.FormulaR1C1 = "=Données!R[-76]C[5]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$H$5:$H$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$100:$I$118"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B100").Select

ActiveCell.FormulaR1C1 = "=Données!R[-96]C[6]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$I$5:$I$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$120:$I$138"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B120").Select

ActiveCell.FormulaR1C1 = "=Données!R[-116]C[7]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$J$5:$J$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$140:$I$158"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B140").Select

ActiveCell.FormulaR1C1 = "=Données!R[-136]C[8]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$K$5:$K$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$160:$I$178"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B160").Select

ActiveCell.FormulaR1C1 = "=Données!R[-156]C[9]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$L$5:$L$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$180:$I$198"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B180").Select

ActiveCell.FormulaR1C1 = "=Données!R[-176]C[10]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$M$5:$M$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$200:$I$218"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B200").Select

ActiveCell.FormulaR1C1 = "=Données!R[-196]C[11]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$N$65:$N$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$220:$I$238"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B220").Select

ActiveCell.FormulaR1C1 = "=Données!R[-216]C[12]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$O$65:$O$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$240:$I$258"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B240").Select

ActiveCell.FormulaR1C1 = "=Données!R[-236]C[13]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$P$173:$P$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$173:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$260:$I$278"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B260").Select

ActiveCell.FormulaR1C1 = "=Données!R[-256]C[14]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$Q$65:$Q$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$280:$I$298"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B280").Select

ActiveCell.FormulaR1C1 = "=Données!R[-276]C[15]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$R$5:$R$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$300:$I$318"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B300").Select

ActiveCell.FormulaR1C1 = "=Données!R[-296]C[16]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$S$5:$S$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$320:$I$338"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B320").Select

ActiveCell.FormulaR1C1 = "=Données!R[-316]C[17]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$T$65:$T$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$340:$I$358"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B340").Select

ActiveCell.FormulaR1C1 = "=Données!R[-336]C[18]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$U$5:$U$382"), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$382"), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$360:$I$378"), False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B360").Select

ActiveCell.FormulaR1C1 = "=Données!R[-356]C[19]"

End Sub

Ensuite j'ai essayé de prendre en compte le fait que mes séries sont évolutives avec le code ci-dessous et là je reçois 2 sortes de messages d'erreur :

"La plage d'entrée ne peut contenir des données non numériques"

" Les plages d'entrées pour les variables X et pour la variable Y doivent avoir le même nombre de ligne, sans y compter l'intitulé"

A noter que quand je lance les blocs de code un à un, ils fonctionnent tous. C'est ensemble qu'ils dysfonctionnent.

ActiveWorkbook.Sheets("Reg_taux_longs").Cells.Select

Selection.ClearContents

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

Selection.Borders(xlEdgeLeft).LineStyle = xlNone

Selection.Borders(xlEdgeTop).LineStyle = xlNone

Selection.Borders(xlEdgeBottom).LineStyle = xlNone

Selection.Borders(xlEdgeRight).LineStyle = xlNone

Selection.Borders(xlInsideVertical).LineStyle = xlNone

Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$C$5:$C$" & Range("C" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$1:$I$18"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B1").Select

ActiveCell.FormulaR1C1 = "=Données!R[3]C[1]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$D$5:$D$" & Range("D" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$20:$I$38"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B20").Select

ActiveCell.FormulaR1C1 = "=Données!R[-16]C[2]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$E$5:$E$" & Range("E" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$40:$I$58"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B40").Select

ActiveCell.FormulaR1C1 = "=Données!R[-36]C[3]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$F$5:$F$" & Range("F" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$60:$I$78"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B60").Select

ActiveCell.FormulaR1C1 = "=Données!R[-56]C[4]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$G$5:$G$" & Range("G" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$80:$I$98"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B80").Select

ActiveCell.FormulaR1C1 = "=Données!R[-76]C[5]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$H$5:$H$" & Range("H" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$100:$I$118"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B100").Select

ActiveCell.FormulaR1C1 = "=Données!R[-96]C[6]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$I$5:$I$" & Range("I" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$120:$I$138"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B120").Select

ActiveCell.FormulaR1C1 = "=Données!R[-116]C[7]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$J$5:$J$" & Range("J" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$140:$I$158"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B140").Select

ActiveCell.FormulaR1C1 = "=Données!R[-136]C[8]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$K$5:$K$" & Range("K" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$160:$I$178"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B160").Select

ActiveCell.FormulaR1C1 = "=Données!R[-156]C[9]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$L$5:$L$" & Range("L" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$180:$I$198"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B180").Select

ActiveCell.FormulaR1C1 = "=Données!R[-176]C[10]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$M$5:$M$" & Range("M" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$200:$I$218"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B200").Select

ActiveCell.FormulaR1C1 = "=Données!R[-196]C[11]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$N$65:$N$" & Range("N" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$220:$I$238"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B220").Select

ActiveCell.FormulaR1C1 = "=Données!R[-216]C[12]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$O$65:$O$" & Range("O" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$240:$I$258"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B240").Select

ActiveCell.FormulaR1C1 = "=Données!R[-236]C[13]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$P$173:$P$" & Range("P" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$173:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$260:$I$278"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B260").Select

ActiveCell.FormulaR1C1 = "=Données!R[-256]C[14]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$Q$65:$Q$" & Range("Q" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$280:$I$298"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B280").Select

ActiveCell.FormulaR1C1 = "=Données!R[-276]C[15]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$R$5:$R$" & Range("R" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$300:$I$318"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B300").Select

ActiveCell.FormulaR1C1 = "=Données!R[-296]C[16]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$S$5:$S$" & Range("S" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$320:$I$338"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B320").Select

ActiveCell.FormulaR1C1 = "=Données!R[-316]C[17]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$T$65:$T$" & Range("T" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$65:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$340:$I$358"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B340").Select

ActiveCell.FormulaR1C1 = "=Données!R[-336]C[18]"

Application.Run "ATPVBAEN.XLAM!Regress", ActiveWorkbook.Sheets("Données").Range("$U$5:$U$" & Range("U" & Rows.Count).End(xlUp).Row), _

ActiveWorkbook.Sheets("Données").Range("$B$5:$B$" & Range("B" & Rows.Count).End(xlUp).Row), False, False, , ActiveWorkbook.Sheets("Reg_taux_longs").Range("$A$360:$I$378"), _

False, False, False, False, , False

Sheets("Reg_taux_longs").Range("B360").Select

ActiveCell.FormulaR1C1 = "=Données!R[-356]C[19]"

End Sub

Quelqu'un saurait-il pourquoi et ce que je peux y faire?

Les propositions d'optimisation de mon code sont également les bienvenues!

Merci d'avance!

Bonjour et bienvenue,

Pour quelle raison utilises-tu cette macro complémentaire ?

As-tu un réel besoin de tous ces détails ?

Dans la négative, quels sont les éléments nécessaires ?

Cdlt.

Bonjour Jean-Eric,

Merci de ta réponse. Je dois réaliser 18 régressions différentes et chaque bloc correspond à une régression.

La deuxième macro, je l'ai écrite pour tenir en compte le fait que la longueur de mes séries n'est pas fixe.

Cdlmt

Bonjour et bienvenue,

Pour quelle raison utilises-tu cette macro complémentaire ?

As-tu un réel besoin de tous ces détails ?

Dans la négative, quels sont les éléments nécessaires ?

Cdlt.

Bonjour Jean-Eric,

Merci de ta réponse. Je dois réaliser 18 régressions différentes et chaque bloc correspond à une régression.

La deuxième macro, je l'ai écrite pour tenir en compte le fait que la longueur de mes séries n'est pas fixe.

Cdlmt

Rechercher des sujets similaires à "regression vba series longueur augmente tous mois"