A voir également:
- Plusieurs Régressions avec des plages variables
- Vba range avec variable ✓ - Forum VB / VBA
- Image de plage avec manchot ✓ - Forum Windows
- Original photo - Forum Graphisme
- Retrouver moi l'original - Forum Musique / Radio / Clip
- Nuage de points excel 4 variables - Forum Excel
3 réponses
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
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...
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?
dest.Cells.ClearFormats
salut à yg_be en passant
Cdlmnt
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...