Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

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 )
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é
(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...

voir : la fonction COEFFICIENT.DETERMINATION(Plage DonnéesA;Plages DonnéesB)
COEFFICIENT.DETERMINATION - Excel
 

Pièces jointes

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

Discussions similaires

Réponses
4
Affichages
231
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…