Mettre mon macro dynamique
Résolu
amiro2017
Messages postés
207
Statut
Membre
-
amiro2017 Messages postés 207 Statut Membre -
amiro2017 Messages postés 207 Statut Membre -
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:
je vous remercie d'avance infiniment
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
2 réponses
-
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
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, tu veux le changer en fonction de quoi?