VBA - plage de valeur dans variable

Guillaumega

XLDnaute Impliqué
Bonjour,

Est-ce que par hasard il est possible de mettre une page de cellule dans une variable s'il vous plait?

Cordialement,
Guillaumega
 

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

Euh non en fait ce que je voulais faire c'est ceci:

Code:
        For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
        c.Value = [B]valeur_initiale [/B]- 0.01 + 0.0025 * i
        Next c

Sauf que je sais pas comment faire pour définir ma valeur intiale lol
C'est évidemment c.value au départ, mais comme elle bouge en fonction de i, il faut que je la mette dans une variable... je crois


Est-ce clair et pourrais-tu m'aider stp?
 
Dernière édition:

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

Bon, je reformule :

Avant j'avais ceci:
Code:
    Dim a As Double
    a = Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value
    For i = 0 To 3
        Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value = a - 0.01 + 0.0025 * i

Maintenant, je ne travaille plus avec une cellule mais avec une plage, c'est à dire que je dois changer toutes les valeurs de la plage pour faire ma boucle.
Je sais changer les valeur avec la boucle suivante

Code:
        For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
        c.Value = c.Value - 0.01 + 0.0025 * i
        Next c

Mais je ne sais pas le faire par rapport à la valeur de départ :)

Saurais-tu me dépanner stp?
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - plage de valeur dans variable

Euh... je ne comprend pas bien ce qu'est ton i...
D'autre part, je ne sais pas par coeur ce que représente
.SpecialCells(xlCellTypeConstants, 23)

Donne moi un exemple sur 2 ou 3 lignes pour savoir ce que tu veux.
 

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

En fait c'est une analyse de sensibilité.

Je modifie les valeurs de la plage de i et ensuite je fais un copier coller des résultats. Et ensuite je décale. Et ainsi de suite.

Avant j'avais je ne modifiait pas une plage mais une cellule et ça fonctionnait. La boucle complète donnait ceci :

Code:
Private Sub Sensibility_Click()
    Application.ScreenUpdating = False
    Dim a As Double
    a = Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value
    For i = 0 To 3
        Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value = a - 0.01 + 0.0025 * i
        Worksheets("CF").Range("IrrUnleveraged").Copy
        Worksheets("Sensibility analysis").Range("f6").Offset(i).PasteSpecial xlPasteValues
        Worksheets("CF").Range("IrrLeveraged").Copy
        Worksheets("Sensibility analysis").Range("f15").Offset(i).PasteSpecial xlPasteValues
    Next i
    For i = 5 To 8
        Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value = a - 0.01 + 0.0025 * i
        Worksheets("CF").Range("IrrUnleveraged").Copy
        Worksheets("Sensibility analysis").Range("f6").Offset(i).PasteSpecial xlPasteValues
        Worksheets("CF").Range("IrrLeveraged").Copy
        Worksheets("Sensibility analysis").Range("f15").Offset(i).PasteSpecial xlPasteValues
    Next i
    Worksheets("Disposal Proceeds").Range("net_entry_yield_purchaser").Value = a
    Application.CutCopyMode = False
    Worksheets("sensibility analysis").Cells(22).Select
End Sub
Au lieu de modifier net_entry_yield_purchaser je veux modifier toutes les valeurs d'une plage... et là je bloque :s

Merci pour ton temps
 

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

elle décale les valeurs de -1 puis de i (mettons i = 0,25)
Ca donne donc

4,25
7,25
2,25

Une fois que ces trois valeur sont modifiées, la macro va copier coller valeur les conclusions dans un tableau.

Ensuite on décale de i ce qui donne
4.5
7.5
2.5

On copie colle les nouvelles conclusions et ainsi de suite:

Au total on doit avoir les conclusions tous les 0,25 pour -1 et +1 par rapport aux valeurs initiales.

J'ai attaché la feuille de sensibilité.
J'espère avoir été plus clair :s
 

Pièces jointes

  • Classeur1.xls
    35.5 KB · Affichages: 101
  • Classeur1.xls
    35.5 KB · Affichages: 107
  • Classeur1.xls
    35.5 KB · Affichages: 100

tototiti2008

XLDnaute Barbatruc
Re : VBA - plage de valeur dans variable

Bon, pas tout à fait sûr, mais je te propose quelque chose comme ça :

Code:
    Dim a() As Double
    ReDim a(1 To 1)
    
    For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
        a(UBound(a)) = c.Value
        ReDim Preserve a(1 To UBound(a) + 1)
    Next c
    For i = 1 To n
        For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            c.Value = c.Value - 0.01 + 0.025 * i
        Next c
        'Copie des résultats et collage spécial...
    Next i
    i = 1
    For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
        c.Value = a(i)
        i = i + 1
    Next c
 

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

Bonjour tototiti, bonjour le forum,

J'ai essayé d'adapté ton code et voici le résultat.
Code:
Private Sub Sensibility_Click()
    Application.ScreenUpdating = False
    Dim a() As Double
        ReDim a(1 To 1)
        For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            a(UBound(a)) = c.Value
            ReDim Preserve a(1 To UBound(a) + 1)
        Next c
        For i = 1 To 3
            For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
                c.Value = c.Value - 0.01 + 0.0025 * i
            Next c
        Worksheets("CF").Range("IrrUnleveraged").Copy
        Worksheets("Sensibility analysis").Range("f6").Offset(i).PasteSpecial xlPasteValues
        Worksheets("CF").Range("IrrLeveraged").Copy
        Worksheets("Sensibility analysis").Range("f15").Offset(i).PasteSpecial xlPasteValues
        Next i
        For i = 5 To 8
            For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            c.Value = c.Value + 0.0025 * i
            Next c
        Worksheets("CF").Range("IrrUnleveraged").Copy
        Worksheets("Sensibility analysis").Range("f6").Offset(i).PasteSpecial xlPasteValues
        Worksheets("CF").Range("IrrLeveraged").Copy
        Worksheets("Sensibility analysis").Range("f15").Offset(i).PasteSpecial xlPasteValues
        Next i
    i = 1
    For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
        c.Value = a(i)
        i = i + 1
    Next c
    Application.CutCopyMode = False
End Sub

Merci encore pour ton code. la macro tourne sans planter !
Par contre les résultats sont bizarres car la moyenne pondérée des c devrait bouger de .0025 en 0.0025 huit fois : 4x en dessous de la moyenne initiale, 4x au dessus. En voyant la macro tourner (Application.ScreenUpdating = true) je constate qu'elle bouge de beaucoup plus que de 0.01 (=4*0.0025). Donc forcément les résultats sont faux. Est-ce que tu saurais pourquoi s'il te plait? Mon incompétence en VBA est ... bien réelle :s

Merci à +
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - plage de valeur dans variable

Bonjour Guillaumega,

Je pense (à vérifier) que le soucis doit venir de :

Code:
           For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            c.Value = c.Value + 0.0025 * i
            Next c

moi j'essaierais :

Code:
           For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            c.Value = c.Value + 0.0025 * [COLOR="Red"](i-4)[/COLOR]
            Next c
 

Guillaumega

XLDnaute Impliqué
Re : VBA - plage de valeur dans variable

Nope.

En essayant avec *(i-4) la moyenne des c part de 6% descend (graduellement) à 1% et remonte à 6% alors qu'elle devrait commencer à 5% et remonter à 7%.

J'avais testé le code sur une page vierge et ça fonctionnait bien !

Code:
sub test()
           For Each c In Worksheets("Disposal Proceeds").[G11:G65000].SpecialCells(xlCellTypeConstants, 23)
            c.Value = c.Value + 0.0025 * i
            Next c
end sub

Est-ce que tu aurais une idée?
Bonne journée,
Guillaumega
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 899
Membres
103 675
dernier inscrit
axona