Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Merci tototiti. Ca fonctionne très bien !

Est-ce que tu saurais comment on fait pour définir la valeur prise par une cellule de la plage s'il te plait?

Merci par avance!
 

tototiti2008

XLDnaute Barbatruc
Re : VBA - plage de valeur dans variable

Je suppose que tu veux lire la valeur d'une cellule de la plage ?

msgbox Plage.range("A1").value

ici, celà fait référence à la 1ère cellule de la plage.
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…