Récupération de la partie linéaire d'une courbe

Ration65

XLDnaute Nouveau
Bonjour à tous,

Je vous expose mon problème :

Dans le cadre de mon projet de fin d'étude je me retrouve aujourd'hui avec un peu plus de 1000 courbes ayant toutes plus ou moins l'allure de celle en fichier joint.

Il me faudrait à présent récupérer la pente de la partie linéaire située au tout début de la courbe. L'idéal pour moi serait de pouvoir délimiter au moyen d'une macro une portion de courbe sur laquelle le coefficient de détermination R² serait supérieur à un certain seuil.

Ne sachant absolument pas par où commencer je me tourne vers vous en espérant que vous pourrez me guider un peu sur le début.

D'avance merci
 

Pièces jointes

  • courbe.jpg
    courbe.jpg
    25 KB · Affichages: 184
  • courbe.jpg
    courbe.jpg
    25 KB · Affichages: 182
  • courbe.jpg
    courbe.jpg
    25 KB · Affichages: 191

Ration65

XLDnaute Nouveau
Re : Récupération de la partie linéaire d'une courbe

Re bonjour à tous,

Sans vouloir abuser de votre générosité j'aurais deux autres petites questions à poser.

Premièrement, maintenant que j'ai réussi à obtenir les résultats que je cherchais grâce à mécano41 je ne parviens plus à faire enregistrer ma solution par la macro.

Auparavant le code :

ActiveWorkbook.SaveAs Filename:= _
"C:\Users\Touff\Desktop\PFE\Dépouillement des résultats\Résultats\Cisaillement 1.xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False


fonctionnait parfaitement mais ne donne plus à présent aucun résultat.

J'aimerais ensuite obtenir quelques précisions sur l'utilisation d'une boucle for. Le code que j'utilise afin de récupérer mes données est le suivant :

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\Touff\Desktop\PFE\essais hêtre\cisaillement 1.", Destination:= _
Range("$A$1"))
.Name = "cisaillement 1."
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With


Serait-il possible au moyen d'une boucle for de récupérer les données des fichiers "cisaillement 1" à "cisaillement 50" par exemple en utilisant quelque chose comme :

For i=1 to 50
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Users\Touff\Desktop\PFE\essais hêtre\cisaillement i.", Destination:= _
Range("$A$1"))
.Name = "cisaillement i."
[...]
End With
Next


D'avance merci pour le temps que vous voudrez bien m'accorder.

Cordialement
 

mécano41

XLDnaute Accro
Re : Récupération de la partie linéaire d'une courbe

J'ai essayé ton code d'enregistrement avec le fichier que je t'avais envoyé (en mettant un chemin valide sur mon PC évidemment) : pas de problème, cela s'enregistre.

Il ne te dis pas qu'il y a une erreur? As-tu vérifié que le chemin existe?


Sinon, tu devrais plutôt mettre une fichier exemple ; il serait plus facile de t'aider...

EDIT : Tu aurais dû ouvrir un nouveau fil car celui qui ne s'intéresse pas particulièrement au sujet indiqué dans le titre risque de passer à côté... ;) Demande à un modérateur...

Cordialement
 
Dernière édition:

Ration65

XLDnaute Nouveau
Re : Récupération de la partie linéaire d'une courbe

Oui le chemin est bien valide. Le problème ne vient certainement pas de ton code mais du mien dans lequel je l'ai copié collé et légèrement modifié le tien.

J'avais hésité à envoyer le fichier mais je m'étais dit que cela serait fastidieux pour un autre utilisateur de modifier tous les chemins de fichier. De plus il est apparemment impossible de joindre des fichiers sans extension ni même .txt donc je ne parvenais pas à envoyer mes fichiers de données. J'ai copié collé le premier dans un classeur excel pour le coup.

Merci pour l'aide en tout cas moi qui débute à la fois en vb et sur ce forum j'apprécie beaucoup.

Cordialement

ps. : les deux dernière colonnes de données ne servent à rien, je les ai laissé afin d'expliquer pourquoi je supprime les colonnes C et D après importation des données.
 

Pièces jointes

  • Essai macro.xlsm
    21.5 KB · Affichages: 52
  • Essai macro.xlsm
    21.5 KB · Affichages: 56
  • Essai macro.xlsm
    21.5 KB · Affichages: 51
  • cisaillement 1.xlsx
    212.6 KB · Affichages: 58

mécano41

XLDnaute Accro
Re : Récupération de la partie linéaire d'une courbe

Les fichiers .txt sont dans la liste des fichiers joignables (11ème ligne - 976,6 ko maxi)...

Essaie de le mettre car en enregistrant l'autre en .txt cela ne fonctionne pas (probablement problème de séparateurs)

Cordialement
 

Ration65

XLDnaute Nouveau
Re : Récupération de la partie linéaire d'une courbe

Chez moi il n'y a que 8 lignes : docx, gif, jpg, png, xls, xlsm, xlsx, zip. Je ne sais pas de quoi çà vient...

Je l'envoi en zip du coup, j'avoue que j'y avais pas pensé.
 

Pièces jointes

  • cisaillement 1.zip
    28.2 KB · Affichages: 34

mécano41

XLDnaute Accro
Re : Récupération de la partie linéaire d'une courbe

Bonjour,

Il y avait un Exit Sub qui traînait avant l'enregistrement...J'ai également supprimé les .select inutiles et j'ai sorti l'affichage des résultats de la boucle. Evite aussi les lettres accentuées dans les noms utilisés (nom des Sub, variables, plages de cellules nommées...) car le VBA est parfois susceptible.

Voici ton fichier modifié (n'oublie pas de remettre le bon chemin...)

Je vais voir s'il y a une solution plus rapide...(actuellement 13 s sur mon PC)

Cordialement
 

Pièces jointes

  • Essai macro.xlsm
    19.4 KB · Affichages: 51
  • Essai macro.xlsm
    19.4 KB · Affichages: 58
  • Essai macro.xlsm
    19.4 KB · Affichages: 57

Ration65

XLDnaute Nouveau
Re : Récupération de la partie linéaire d'une courbe

Marche au poil merci!

Des idées par contre pour une boucle for? Je ne sais pas trop si c'est possible mais bon.

Concernant l'utilisation du forum qu'entend-tu par nouveau fil? Créer un nouveau topic?
 

mécano41

XLDnaute Accro
Re : Récupération de la partie linéaire d'une courbe

Des idées par contre pour une boucle for? Je ne sais pas trop si c'est possible mais bon.

C'est possible mais il faut mettre : .Name="cisaillement." & i pour que cela fonctionne...Si tu ne travailles pas dans tous les fichiers en même temps, il serait bon de les refermer au fur et à mesure...

Concernant l'utilisation du forum qu'entend-tu par nouveau fil? Créer un nouveau topic?

Oui, si le sujet est trop différent de celui d'origine, même si c'est sur le même fichier, il vaut mieux séparer.

Lorsque tu veux demander, après coup, à un modérateur de changer ton sujet de place, tu utilises le petit triangle noir situé en bas à gauche du message (normalement pour signaler message hors charte) et tu lui dit ce que tu souhaiterais qu'il déplace....

Cordialement
 

mécano41

XLDnaute Accro
Re : Récupération de la partie linéaire d'une courbe

Bonjour,

Voici le fichier avec un code plus rapide sur un grand nombre de lignes. Le principe de recherche est le même mais je l'ai traité par dichotomie et maintenant le temps est négligeable...

Le chemin est à modifier, comme pour l'autre.

NOTA : ne t'étonne pas de trouver un coeff. légèrement différent de celui du précédent fichier pour un même X : il y a plusieurs X de même valeur pour des Y différents. Comme dans le premier fichier, il réduisait le champ depuis le maxi, il s'arrêtait dès que la condition était remplie. Maintenant il tape un coup trop long puis un coup trop court jusqu'à ce que l'écart entre les deux soit inférieur à 2 lignes....il optimise.

Cordialement
 

Pièces jointes

  • Essai macro3.xlsm
    18.9 KB · Affichages: 58
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 183
dernier inscrit
angelique76120