Mettre mon macro dynamique

Résolu/Fermé
amiro2017 Messages postés 193 Date d'inscription mardi 28 février 2017 Statut Membre Dernière intervention 31 août 2017 - Modifié par amiro2017 le 12/03/2017 à 11:58
amiro2017 Messages postés 193 Date d'inscription mardi 28 février 2017 Statut Membre Dernière intervention 31 août 2017 - 13 mars 2017 à 14:05
Bonjour le forum,

j'arrive à enregistrer un macro pour utiliser son code par la suite mais le problème c'est que ce code ne peut être dynamique : en effet , je suis entrain de tracer la courbe de taux d'intérêt par cubic spline qui est déjà prédéfinie dans mon Excel, cette fonction nécessite chaque fois une plage de données qui n'est pas fixe et qui doit être insérées par l'utilisateur . Comment faire car cela ne me fonctionne pas:

voici le code:

Sub spline()
Dim DerniereLigne As Integer, i As Integer
ThisWorkbook.Sheets("feuil1").Activate
DerniereLigne = Range("B" & Rows.Count).End(xlUp).Row
For i = 17 To DerniereLigne
'je veux chaque fois changer la plage R17C4:R19C4 et R17C5:R19C5
Range("C" & i).FormulaR1C1 = "=Cubic_Spline(R17C4:R19C4,R17C5:R19C5,RC[-1])"

Next i

End Sub


je vous remercie d'avance infiniment
A voir également:

2 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
13 mars 2017 à 13:04
Bonjour,

voici un code un peu redondant, car il faut sélectionner 2 plages. Si l'utilisateur se trompe, il risque d'y avoir un bug!


Option Explicit
Dim chaine As String
Dim chaine2 As String
Dim chaine3 As String
Dim nom As String
Dim nom2 As String
Private Sub CommandButton1_Click()
  test '1ère plage
 test_2 '2ème plage
chaine3 = "Cubic_Spline(" & chaine & "," & chaine2 & ",RC[-1])"
MsgBox chaine3
'Cubic_Spline(R17C4:R19C4,R17C5:R19C5,RC[-1])"
End Sub
'1ère plage
Sub test()
Dim pSource As Range, pDestination As Range
On Error Resume Next        'évite les erreurs si plage incorrecte choisie
Application.DisplayAlerts = False   'évite les alertes si plage non valide
Set pSource = Application.InputBox("Sélectionner les données sources", , , , , , , 8)
nom = pSource.AddressLocal
Break_String  'split découpe la chaine en fonction des $
Application.DisplayAlerts = True
On Error GoTo 0
End Sub
 '2ème plage
 Sub test_2()
Dim pSource As Range, pDestination As Range
On Error Resume Next        'évite les erreurs si plage incorrecte choisie
Application.DisplayAlerts = False   'évite les alertes si plage non valide
Set pSource = Application.InputBox("Sélectionner les données sources", , , , , , , 8)
nom2 = pSource.AddressLocal
Break_String_2  'split découpe la chaine en fonction des $
Application.DisplayAlerts = True
On Error GoTo 0
End Sub
'split découpe la chaine en fonction des $ 1ère plage
Sub Break_String()
Dim WrdArray() As String
Dim text_string As String
text_string = nom
WrdArray() = Split(text_string, "$")
WrdArray(2) = Replace(WrdArray(2), ":", "")
chaine = "R" & WrdArray(2) & "C" & AlphaColToNum(WrdArray(1)) & ":R" & WrdArray(4) & "C" & AlphaColToNum(WrdArray(3))
MsgBox chaine
End Sub
'split découpe la chaine en fonction des $ 2ème plage
Sub Break_String_2()
Dim WrdArray() As String
Dim text_string As String
text_string = nom2
WrdArray() = Split(text_string, "$")
WrdArray(2) = Replace(WrdArray(2), ":", "")
chaine2 = "R" & WrdArray(2) & "C" & AlphaColToNum(WrdArray(1)) & ":R" & WrdArray(4) & "C" & AlphaColToNum(WrdArray(3))
MsgBox chaine2
End Sub
'converti Lettre colonne en chiffre
Function AlphaColToNum(Col As String) As Long
    AlphaColToNum = Range(Col & 1).Column
End Function

1
amiro2017 Messages postés 193 Date d'inscription mardi 28 février 2017 Statut Membre Dernière intervention 31 août 2017 1
13 mars 2017 à 14:05
mercciii beaucoupp cs_Le Pivert je veux le tester
0
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
12 mars 2017 à 21:02
bonsoir, tu veux le changer en fonction de quoi?
0
amiro2017 Messages postés 193 Date d'inscription mardi 28 février 2017 Statut Membre Dernière intervention 31 août 2017 1
13 mars 2017 à 01:11
je vous remercie yg_be pour votre intérêt
je veux changer les entrées de la fonction cubique spline :
chaque fois les entrées de Cubic_Spline changent c'est à dire chaque fois je séléctionne une plage différente

Cubic_Spline(R17C4:R19C4,R17C5:R19C5,RC[-1])"
0