RégressionS linéaires de plusieurs ordre

totaljim

XLDnaute Nouveau
Bonjour le forum !!!

Bon ce matin je bloque un peu
voila je souhaite faire des régressions : linéaire dans un premier temps puis polynomiales dans un deuxième temps, j'augmente l'ordre du polynome jusqu'a l'ordre 5.
Je récupère a chaque régression, le coefficient R² correspondant que je stock dans un tableau : montab(ordre)
Enfin je regarde quel coeff R² dans mon tableau est le plus grand et j'affiche sur ma feuille l'ordre, mle R² et la courbe correspondante, et je vire tout les autres.

Le problème c'est que
l'incide n'appartient pas à la sélection
dans mon tableau
l'erreur vient de cette ligne

VB:
montab("" & ordre) = rdeux
j'avais essayé
VB:
montab(ordre) = rdeux
Meme erreur dans les 2 cas.

Je vous mets le code de ce module ci dessous bien que je n'ai besoin d'aide que sur la partie mettre les données dans le tableau. Enfin pour le moment ;)

VB:
Sub recap()
Dim montab() As Double
rang3 = Worksheets("DonnéesCorrélations").UsedRange.Rows.Count

' Supprimer anciens graphs '
        For Each Legraphe In ActiveSheet.ChartObjects
            Legraphe.Delete
        Next

' Boucle afin de faire TOUT les graph

For k = 1 To 2
i = 1
li = 2
col = 1
    For l = 1 To 4
        For m = 1 To 5
        
    ' Ajouter nouveau graph '
            ActiveSheet.Shapes.AddChart.Select
            
    ' Supprimer séries déjà affichées '
            Do Until ActiveChart.SeriesCollection.Count = 0
                ActiveChart.SeriesCollection(1).Delete
            Loop
           
    ' Choix type de courbe '
            ActiveChart.ChartType = xlXYScatterLines
                
    ' Choix et ajout des séries '
            ActiveChart.SeriesCollection.NewSeries
            ActiveChart.HasTitle = True
                abscisse k, l
                ordonnée m
                
    ' Facteur de corrélation '
For ordre = 1 To 5
    If ordre = 1 Then
        ActiveChart.SeriesCollection(1).Trendlines.Add
        ActiveChart.SeriesCollection(1).Trendlines(ordre).Select
        Selection.DisplayRSquared = True
        rdeux = Right(ActiveChart.SeriesCollection(1).Trendlines("" & ordre).DataLabel.Text, 6)
        'MsgBox rdeux
        montab("" & ordre) = rdeux
    Else
        ActiveChart.SeriesCollection(1).Trendlines.Add
        ActiveChart.SeriesCollection(1).Trendlines("" & ordre).Select
        With Selection
            .Type = xlPolynomial
            .Order = 2
        End With
        Selection.DisplayRSquared = True
        rdeux = Right(ActiveChart.SeriesCollection(1).Trendlines("" & ordre).DataLabel.Text, 6)
        montab("" & ordre) = rdeux
    End If
        
Next

For ordre = 1 To 5
MsgBox montab(ordre)
Next

            'Range("F" & li + 4).Value = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
               
    ' Mise en place des graphiques '
    If k = 1 Then
                With Worksheets("Récapitulatif")
                    .ChartObjects(i).Top = .Rows(li).Top
                    .ChartObjects(i).Left = .Columns(col).Left
                    .ChartObjects(i).Height = 165.75
                    .ChartObjects(i).Width = 300
                End With
    Else
                With Worksheets("Récapitulatif1")
                    .ChartObjects(i).Top = .Rows(li).Top
                    .ChartObjects(i).Left = .Columns(col).Left
                    .ChartObjects(i).Height = 165.75
                    .ChartObjects(i).Width = 300
                End With
    End If
i = i + 1
li = li + 13
        Next
    Next
    Worksheets("Récapitulatif1").Select
Next

End Sub
 
Dernière édition:

totaljim

XLDnaute Nouveau
Re : RégressionS linéaires de plusieurs ordre

VB:
Sub recap()
Dim montab(5) As Variant
rang3 = Worksheets("DonnéesCorrélations").UsedRange.Rows.Count

' Supprimer anciens graphs '
        For Each Legraphe In ActiveSheet.ChartObjects
            Legraphe.Delete
        Next

' Boucle afin de faire TOUT les graph

For k = 1 To 2
i = 1
li = 2
col = 1
    For l = 1 To 4
        For m = 1 To 5
        
    ' Ajouter nouveau graph '
            ActiveSheet.Shapes.AddChart.Select
            
    ' Supprimer séries déjà affichées '
            Do Until ActiveChart.SeriesCollection.Count = 0
                ActiveChart.SeriesCollection(1).Delete
            Loop
           
    ' Choix type de courbe '
            ActiveChart.ChartType = xlXYScatterLines
                
    ' Choix et ajout des séries '
            ActiveChart.SeriesCollection.NewSeries
            ActiveChart.HasTitle = True
                abscisse k, l
                ordonnée m
                
    ' Facteur de corrélation '
        ' on fait toutes les régressions '
For ordre = 1 To 5
    If ordre = 1 Then
        ActiveChart.SeriesCollection(1).Trendlines.Add
        ActiveChart.SeriesCollection(1).Trendlines(ordre).Select
        Selection.DisplayRSquared = True
        rdeux = Right(ActiveChart.SeriesCollection(1).Trendlines("" & ordre).DataLabel.Text, 6)
        montab(ordre) = rdeux
    Else
        ActiveChart.SeriesCollection(1).Trendlines.Add
        ActiveChart.SeriesCollection(1).Trendlines("" & ordre).Select
        With Selection
            .Type = xlPolynomial
            .Order = ordre
        End With
        Selection.DisplayRSquared = True
        rdeux = Right(ActiveChart.SeriesCollection(1).Trendlines("" & ordre).DataLabel.Text, 6)
        montab(ordre) = rdeux
    End If
Next

For ordre = 1 To 5
MsgBox montab(ordre)
Next

        ' on ne prend en compte qu'une régression '
ordre = 5
While ordre > 1
    If montab(ordre) < montab(ordre - 1) Then
        meilleur = ordre - 1
    ElseIf montab(ordre) = montab(ordre - 1) Then
        meilleur = ordre - 1
    ElseIf montab(ordre) > montab(ordre - 1) Then
        meilleur = ordre
    End If
    ordre = ordre - 1
MsgBox meilleur
Wend


For ordre = 1 To 5
    If ordre <> meilleur Then
    ActiveChart.SeriesCollection(1).Trendlines("" & ordre).Select
    Selection.Delete
    End If
Next
            'Range("F" & li + 4).Value =
           
    ' Mise en place des graphiques '
    If k = 1 Then
                With Worksheets("Récapitulatif")
                    .ChartObjects(i).Top = .Rows(li).Top
                    .ChartObjects(i).Left = .Columns(col).Left
                    .ChartObjects(i).Height = 165.75
                    .ChartObjects(i).Width = 300
                End With
    Else
                With Worksheets("Récapitulatif1")
                    .ChartObjects(i).Top = .Rows(li).Top
                    .ChartObjects(i).Left = .Columns(col).Left
                    .ChartObjects(i).Height = 165.75
                    .ChartObjects(i).Width = 300
                End With
    End If
i = i + 1
li = li + 13
        Next
    Next
    Worksheets("Récapitulatif1").Select
Next

End Sub

Petit UP !

J'ai fais ca pour vérifier que j'avais bien quelque chose dans mon tableau ...
et bah en pas a pas j'ai bien quelque chose mais quand je lance la macro en continue ... j'ai un msgbox vide
POURQUOI ?

VB:
For ordre = 1 To 5
MsgBox montab(ordre)
Next
 
Dernière édition:

totaljim

XLDnaute Nouveau
Re : RégressionS linéaires de plusieurs ordre

@Speel : oui je vais joindre mon fichier pour que vous me disiez si vous arrivez à lancer en exécution automatique
C'est dans le module 4, mais si vous voyez des erreurs ou lourdeur de code ailleurs, je suis ouvert à vos conseils.

@Staple1600 : Pourquoi ? Car au début le post ne concernait pas le problème exécution automatique/ pas-à-pas !
Et que personne ne m'a répondu dans l'autre post :(
 

Pièces jointes

  • 1.xlsm
    141.7 KB · Affichages: 29
  • 1.xlsm
    141.7 KB · Affichages: 41
  • 1.xlsm
    141.7 KB · Affichages: 32

Speel

XLDnaute Occasionnel
Re : RégressionS linéaires de plusieurs ordre

@Speel : oui je vais joindre mon fichier pour que vous me disiez si vous arrivez à lancer en exécution automatique

Ça se lance et ça fonctionne , quand aux résultats je serai bien incapable de dire s'ils sont bons :eek:
 

Pièces jointes

  • 1.xlsm
    182.9 KB · Affichages: 33
  • 1.xlsm
    182.9 KB · Affichages: 34
  • 1.xlsm
    182.9 KB · Affichages: 30

totaljim

XLDnaute Nouveau
Re : RégressionS linéaires de plusieurs ordre

Salut Speel, le forum !

Alors j'ai essayé ton code et ... pas de chance, ton fichier non plus, ne m'enregistre pas les données dans le tableau !
Tout du moins en execution automatique
Dois je en conclure que ca vient de mon pc ?

A par la partie pour supprimer les trendlines as tu changé autre chose ?
Cette solution pour supprimer les trendlines marche très bien je te remercie !
 

totaljim

XLDnaute Nouveau
Re : RégressionS linéaires de plusieurs ordre

Bon alors j'ai regardé ton fichier (merci de t'être donné du mal pour moi c'est franchement sympa :eek:)
J'avais déjà corriger pas mal de mes erreurs et même en corrigeant tout, ça ne marche toujours pas !

Le soucis c'est au niveau de :
Code:
rdeux = Right(ActiveChart.SeriesCollection(1).Trendlines(ordre).DataLabel.Text, 6)

J'ai essayé un MsgBox juste après et en execution automatique le MsgBox est vide en pas-à-pas par contre non.

Bon a par ce problème je crois que j'ai enfin fini mon programme ^^

Si j'arrive à trouver une autre méthode pour récupérer le R², sans passer par une analyse de la chaine de caractères ca pourrait peut etre supprimer le problème !!

Quelqu'un sait il récupérer le coefficient de régression ?
 

Pièces jointes

  • mouahahah.xlsm
    131.2 KB · Affichages: 25

Staple1600

XLDnaute Barbatruc
Re : RégressionS linéaires de plusieurs ordre

Bonsoir à tous

Quelqu'un sait il récupérer le coefficient de régression ?
Par simple curiosité, j'ai sélectionné les mots en gras dans ton message, puis clic-droit et choix de Recherche G..gl. pour " le coefficient de régression
Ensuite j'ai ajouté excel en bout de chaine pour compléter la recherche

Et je suis tombé sur ce site

Et je me suis dis : peut-être cela aidera t-il totaljim, alors je poste ce message.

PS: Si je suis à côté de la plaque, désolé :eek:
(Mais j'aurais au moins découvert quelque chose)
 

Modeste geedee

XLDnaute Barbatruc
Re : RégressionS linéaires de plusieurs ordre

Bonsour®
si c'est ceque tu appelle R²
c'est connu dans Excel sous le nom de coefficient de détermination...
Capture.JPG
voir : la fonction COEFFICIENT.DETERMINATION(Plage DonnéesA;Plages DonnéesB)
COEFFICIENT.DETERMINATION - Excel
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    60.2 KB · Affichages: 42
  • Capture.JPG
    Capture.JPG
    60.2 KB · Affichages: 37
Dernière édition:

Discussions similaires

Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel