VBA : Débutant demande correction formule logarythmique

  • Initiateur de la discussion Initiateur de la discussion FredCr
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

FredCr

Guest
Bonjour,

C'est ma première macro Excel. Je souhaite effectuer une formule (DROITEREG(plageY;LN(plageX)) et ORDONNEE.ORIGINE(plageY;LN(plageX) pour aboutir à l'équation de la courbe de tendance logarytmique y=aln(x)+b).
Voici ce que me donne l'enregistreur de macro :

Range("C4").Select
ActiveCell.FormulaR1C1 = "=LINEST(R[-1]C[-1]:R[2952]C[-1],LN(R[-1]C[-2]:R[2952]C[-2]))"
Range("C6").Select
ActiveCell.FormulaR1C1 = _
"=INTERCEPT(R[-3]C[-1]:R[2952]C[-1],LN(R[-3]C[-2]:R[2952]C[-2]))"

Or je souhaite que le calcul de la formule se fasse avec un nombre variable de ligne.
Pourriez-vous me donner une correction car je nage un peu. Merci 🙂
 
Re : VBA : Débutant demande correction formule logarythmique

Bonjour,

Essaie ceci:

Code:
Option Explicit

Sub essai()
Dim LimSup As Long
Dim Lim As Long
LimSup = 2956 ' à changer directement ou par programme
Range("C4").Select
Lim = LimSup - ActiveCell.Row
ActiveCell.FormulaR1C1 = "=LINEST(R[-1]C[-1]:R[" & Lim & "]C[-1],LN(R[-1]C[-2]:R[" & Lim & "]C[-2]))"
Range("C6").Select
ActiveCell.FormulaR1C1 = "=INTERCEPT(R[-3]C[-1]:R[" & Lim & "]C[-1],LN(R[-3]C[-2]:R[" & Lim & "]C[-2]))"
End Sub

On pourrait évidemment calculer automatiquement le nombre de lignes...

Cordialement
 
Re : VBA : Débutant demande correction formule logarythmique

Merci pour votre réponse rapide mais cela ne marche toujours pas.
J'ai remplacé mon bout de code par le votre.
Quand je lance ma macro avec un nombre différent de ligne, j'ai toujours VALEURS! dans ma cellule de calcul.
Bon point, le code fonctionne pour le fichier de base lorsque je met 2956 en LimSup. Il doit manquer un petit quelquechose car lorsque je met + de 2956 en LimSup ça ne fonctionne plus.
 
Re : VBA : Débutant demande correction formule logarythmique

Il faudrait que tu mettes un petit fichier avec les dispositions exactes des lignes (une dizaine de lignes suffiront) et colonnes (enlève les données confidentielles s'il y en a) et les deux formules correspondantes sur la feuille de calculs.

Il faut dire également ce qui peut changer (ligne, colonne de début des données, de fin des données...)

Laisse dedans ce que tu as fait en macro. On verra ensuite

Cordialement
 
Re : VBA : Débutant demande correction formule logarythmique

Bonjour,

Le fichier complet est malheureusement confidentiel et surtout très lourd (25mo).
Néanmoins j'ai reproduit un fichier Excel avec la partie qui m'intéresse et la disposition du fichier sur lequel je travail.
La seule chose qui peut changer c'est la longueur des colonnes secrettruc secret1truc1 et secret2truc2 (maximum 32000). Les courbes de tendance logarythmique ne sont pas à discuter sur mon fichier réel.
Voilà.

Merci et bon weekend de Pâques.
 

Pièces jointes

Re : VBA : Débutant demande correction formule logarythmique

Bonjour FredCr

Salut mecano

Un essai
Code:
Sub test()
x = Range("A" & Rows.Count).End(xlUp).Row
Range("C4").FormulaLocal = "=DROITEREG(B3:B" & x & ";LN(A3:A" & x & "))"
Range("C6").FormulaLocal = "=ORDONNEE.ORIGINE(B3:B" & x & ";LN(A3:A" & x & "))"
x = Range("D" & Rows.Count).End(xlUp).Row
Range("F4").FormulaLocal = "=DROITEREG(E3:E" & x & ";LN(D3:D" & x & "))"
Range("F6").FormulaLocal = "=ORDONNEE.ORIGINE(E3:E" & x & ";LN(D3:D" & x & "))"
x = Range("G" & Rows.Count).End(xlUp).Row
Range("I4").FormulaLocal = "=DROITEREG(H3:H" & x & ";LN(G3:G" & x & "))"
Range("I6").FormulaLocal = "=ORDONNEE.ORIGINE(H3:H" & x & ";LN(G3:G" & x & "))"


End Sub
 

Pièces jointes

Re : VBA : Débutant demande correction formule logarythmique

Merci Beaucoup PierreJean, ça fonctionne parfaitement. Ça m'enlève une sacré épine du pied.
Merci à toi aussi Mecano41, j'ai regardé ta solution (pas testé), elle a l'air intéressante et il y a de fortes chances que je l'utilise par la suite.

Ça fait avancer mon sujet de BTS MCI à grand pas, et découvrir une communauté Excel passionnante.
@+
 
Re : VBA : Débutant demande correction formule logarythmique

Bonjour comment vous arrivez à écrire ça :
Range("C4").Select
ActiveCell.FormulaR1C1 = _
"=LINEST(R[-1]C[-1]:R[15]C[-1],LN(R[-1]C[-2]:R[15]C[-2]))"
 
Re : VBA : Débutant demande correction formule logarythmique

Bonjour,

Tu vas dans le fichier de Pierre-Jean :

- tu mets le curseur en C4
- tu cliques le bouton "Développeur" de la barre d'outils
- tu fais "Enregistrer une macro" puis "OK"
- tu mets le curseur dans la barre de formule
- tu fais "Entrée"
- tu cliques le bouton "Développeur" de la barre d'outils
- tu fais "Arrêter l'enregistrement"

Si tu vas dans le VBE, tu verras que l'enregistreur de macros a créé un nouveau module dans lequel ton opération a été enregistrée sous la forme :

Code:
ActiveCell.FormulaR1C1 = "=LINEST(R[-1]C[-1]:R[15]C[-1],LN(R[-1]C[-2]:R[15]C[-2]))"

C'est la traduction en anglais de la formule de la cellule C4, avec utilisation du mode RC de désignation des cellules (R=Row ; C = Column et le nombre entre crochet est le décalage par rapport à la cellule active. positif = vers la droite ou le bas et négatif vers la gauche ou le haut)

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

M
  • Question Question
Réponses
3
Affichages
784
Mr.Adrien
M
L
Réponses
9
Affichages
1 K
J
  • Résolu(e)
Réponses
2
Affichages
575
JeromeR63
J
K
Réponses
6
Affichages
1 K
Korasgar
K
Réponses
13
Affichages
2 K
B
Réponses
2
Affichages
1 K
C
Réponses
23
Affichages
4 K
Charles78
C
C
Réponses
5
Affichages
2 K
Charles78
C
Retour