Set a variable range

Bonjour, je ne comprends pas pourquoi on ne "Set" pas la variable "ResultRange" à l'avant-dernière ligne de ce programme :

Sub ReturnArray()

Dim FilmLengths() As Variant

Dim LoopCounter As Long

Dim ResultRange As Range

FilmLengths=Application.InputBox(Prompt:="Choose the lengths to convert", Type:=64)

For LoopCounter=LBound(FilmLengths,1) To UBound(FilmLengths,1)

FilmLengths(LoopCounter,1)=Int(FilmLengths(LoopCounter,1)/60) & " hours" & (FilmLengths(LoopCounter,1)Mod 60) & " minutes"

Next LoopCounter

Set ResultRange=Application.InputBox(Prompt:="Choose where to put the results", Type:=8)

Set ResultRange=Range(ResultRange, ResultRange.Offset(UBound(FilmLengths,1)-1,0))

ResultRange=FilmLengths

End Sub

Merci pour votre aide !

Bonjour,

Tout simplement parce qu'on affecte les valeurs du tableau à la plage, cette dernière étant déjà initialisée.

La ligne de code avec la propriété par défaut :

ResultRange.Value = FilmLengths

Bonjour,

On ne met Set que pour attribuer un objet à une variable.

Or avec FilmLengths = Application.InputBox(Prompt:="Choose the lengths to convert", Type:=64), FilmLengths n'est pas un objet mais un tableau de valeurs à saisir sous cette forme : {65;222;38}.

Si tu avais mis Type:=8 tu aurais dû aller sélectionner une plage sur une feuille. Là tu aurais dû utiliser Set pour l'affecter à une variable.

Ton code aurait été :

Sub ReturnArray()
    Dim FilmLengths() As Variant
    Dim pl As Range
    Dim LoopCounter As Long
    Dim ResultRange As Range

    Set pl = Application.InputBox(Prompt:="Choose the lengths to convert", Type:=8)
    FilmLengths = pl.Value
    For LoopCounter = LBound(FilmLengths, 1) To UBound(FilmLengths, 1)
        FilmLengths(LoopCounter, 1) = Int(FilmLengths(LoopCounter, 1) / 60) & " hours" & (FilmLengths(LoopCounter, 1) Mod 60) & " minutes"
    Next LoopCounter

    Set ResultRange = Application.InputBox(Prompt:="Choose where to put the results", Type:=8)
    ResultRange.Value = FilmLengths
End Sub

Remarque : en mettant les temps sous la forme "1 hours45 minutes" tu t'interdits tout calcul dessus.

Si tu veux pouvoir en faire la somme par exemple, il faut l'écrire sous la forme attendue par excel : 1:45 avec :

FilmLengths(LoopCounter, 1) = Format(FilmLengths(LoopCounter, 1) / 60 / 24, "h:mm")

eric

Merci (en retard) These et eriiic !

Rechercher des sujets similaires à "set variable range"