Plusieurs Régressions avec des plages variables
Fermé
vbondoma
Messages postés
4
Date d'inscription
vendredi 13 juillet 2018
Statut
Membre
Dernière intervention
16 juillet 2018
-
13 juil. 2018 à 14:45
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 - 16 juil. 2018 à 13:18
yg_be Messages postés 23399 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 décembre 2024 - 16 juil. 2018 à 13:18
A voir également:
- Plusieurs Régressions avec des plages variables
- Nuage de points excel 4 variables - Forum Excel
- Les plages contenant des cellules fusionnées ne sont triées que si elles n'ont pas de formatage ✓ - Forum Excel
- Je t'emmenerai faire l'amour sur les plages que tu ne connais pas - Forum Musique / Radio / Clip
- Excel concaténer plage cellules avec séparateur ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
3 réponses
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
Modifié le 14 juil. 2018 à 21:02
Modifié le 14 juil. 2018 à 21:02
Bonjour
1. ici, tu peux faire plus simple
2.
i=2
Première ligne non vide de la colonne i
Dernière ligne non vide de la colonne i
adresse de la plage colonne i depuis lideb jusqu'à lifin
RQ. Si ton code fonctionne comme tu le souhaites, pourquoi vouloir le changer, le fait de faire replacer les 18 bouts de code par une boucle entraine des calculs supplémentaires donc du temps de traitement en plus.
Cdlmnt
1. ici, tu peux faire plus simple
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à remplacer par
dest.Cells.ClearFormat
2.
i=2
Première ligne non vide de la colonne i
lideb = Columns(i).Find("*", , , , xlByRows, xlNext).Row
Dernière ligne non vide de la colonne i
lifin = Columns(i).Find("*", , , , xlByRows, xlPrevious).Row
adresse de la plage colonne i depuis lideb jusqu'à lifin
adr= Range(Cells(lideb, i), Cells(lifin, i)).Address
RQ. Si ton code fonctionne comme tu le souhaites, pourquoi vouloir le changer, le fait de faire replacer les 18 bouts de code par une boucle entraine des calculs supplémentaires donc du temps de traitement en plus.
Cdlmnt
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
Ambassadeur
1 556
Modifié le 15 juil. 2018 à 17:19
Modifié le 15 juil. 2018 à 17:19
bonjour,
mieux de déclarer
as-tu déclaré i?
aussi, au lieu de
et
mieux de déclarer
Dim derncol As long
as-tu déclaré i?
aussi, au lieu de
"$i$5:$i$", je suggère:
cstr(i) & "5:" & cstr(i)
et
For i = 3 To derncol
vbondoma
Messages postés
4
Date d'inscription
vendredi 13 juillet 2018
Statut
Membre
Dernière intervention
16 juillet 2018
16 juil. 2018 à 10:44
16 juil. 2018 à 10:44
Bonjour et merci pour ta réponse,
Je ne suis pas sûre de ce que fait cstr(i), j'ai essayer Chr(64 + i) pour avoir la lettre d'une cellule.
Sur vos conseils et après des recherches internet le code est désormais sous cette forme :
il ne me reste plus qu'à stocker les résultats dans une nouvelle plage de 18 lignes et 7 colonnes à chaque fois et à copier le nom de chaque régression... Si vous avez des idées...
Je ne suis pas sûre de ce que fait cstr(i), j'ai essayer Chr(64 + i) pour avoir la lettre d'une cellule.
Sur vos conseils et après des recherches internet le code est désormais sous cette forme :
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
Application.ScreenUpdating = False 'Désactive l'affichage le temps d'exécuter la macro
Application.Calculation = xlCalculationManual 'Désactive le recalcul automatique des formules Excel à chaque modification
Dim dest As Worksheet
Dim source As Worksheet
Dim premlig As Long, dernlig As Long, derncol As Long
'bloc qui efface les précédents résultats et mises en forme
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row 'la longueur des séries est variables
derncol = source.Cells(1, Cells.Columns.Count).End(xlToLeft).Column 'le nombre de variables explicatives et à expliquer peut varier
With dest.Cells
.ClearContents
.ClearFormats
End With
' boucles qui effectue autant de régressions qu'il y a de variables à expliquer
For i = 3 To derncol
premlig = Columns(i).Find("*", , , , xlByRows, xlNext).Row 'Donne le numéro de la première ligne non vide de la colonne i
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$premlig:$" & Chr(64 + i) & "$" & dernlig), _
source.Range("$B$" & premlig & ":$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]"
Next
Fin:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
il ne me reste plus qu'à stocker les résultats dans une nouvelle plage de 18 lignes et 7 colonnes à chaque fois et à copier le nom de chaque régression... Si vous avez des idées...
vbondoma
Messages postés
4
Date d'inscription
vendredi 13 juillet 2018
Statut
Membre
Dernière intervention
16 juillet 2018
16 juil. 2018 à 11:48
16 juil. 2018 à 11:48
Je pense avoir trouvé comment faire...
Mais lorsque je lance la macro, elle ne me renvoie ni résultat, ni message d'erreur... Quelqu'un saurait ce que je fais mal?
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
Application.ScreenUpdating = False 'Désactive l'affichage le temps d'exécuter la macro
Application.Calculation = xlCalculationManual 'Désactive le recalcul automatique des formules Excel à chaque modification
Dim dest As Worksheet
Dim source As Worksheet
Dim premlig As Long, dernlig As Long, derncol As Long
Dim i As Long
On Error GoTo Fin
'bloc qui efface les précédents résultats et mises en forme
Set dest = ThisWorkbook.Sheets("Reg_taux_longs")
Set source = ThisWorkbook.Sheets("Données")
dernlig = source.Range("C" & Rows.Count).End(xlUp).Row 'la longueur des séries est variables
derncol = source.Cells(1, Cells.Columns.Count).End(xlToLeft).Column 'le nombre de variables explicatives et à expliquer peut varier
With dest.Cells
.ClearContents
.ClearFormats
End With
' boucles qui effectue autant de régressions qu'il y a de variables à expliquer
For i = 3 To derncol
'premlig = Columns(i).Find("*", , , , xlByRows, xlNext).Row 'Donne le numéro de la première ligne non vide de la colonne i
premlig = source.Cells(5, i).End(xlDown).Row 'Donne le numéro de la première ligne non vide de la colonne i
If premlig > 180 Then premlig = 5 'Cas où pas de cellule vide entre en-tête et 1ère donnée
Application.Run "ATPVBAEN.XLAM!Regress", source.Range("$" & Chr(64 + i) & "$premlig:$" & Chr(64 + i) & "$" & dernlig), _
source.Range("$B$" & premlig & ":$B$" & dernlig), False, False, , dest.Range("A260:I278").Offset(i * 20, 0), False, False, False, False, , False
dest.Range("B260").Offset(i * 20, 0).FormulaR1C1 = "=Données!R[" & (256 + i * 20) & "]C[" & (i + 14) & "]"
Next i
Fin:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Mais lorsque je lance la macro, elle ne me renvoie ni résultat, ni message d'erreur... Quelqu'un saurait ce que je fais mal?
yg_be
Messages postés
23399
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 décembre 2024
1 556
16 juil. 2018 à 13:18
16 juil. 2018 à 13:18
si tu veux voir les erreurs, supprime la ligne avec "on error".
Modifié le 15 juil. 2018 à 22:34
dest.Cells.ClearFormats
salut à yg_be en passant
Cdlmnt
16 juil. 2018 à 10:19
En réalité les destinataire de ce travail ne savent pas du tout coder. Le but est donc de leur livrer une macro clé en main qu'il auront juste à faire tourner quelque soit le nombre de variables expliquées ou explicatives et quelque soit le longueur des séries...