Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb avec Redim Preserve

3 réponses
Avatar
r-bruno
bonjour les spécialistes,
j'ai un problème avec la dernière ligne du code suivant qui me
retourne "Indice en dehors de la plage".(...présence de galettes
nauséabondes sur celle-ci peut-être...?
Si je n'indique pas "Preserve", le code fonctionne, mais vide le
tableau, bien évidemment. J'ajoute que "n" a toujours une valeur
valide et que la macro se déroule parfaitement jusqu'à "Redim..".

Merci d'avance pour vos lumières.

Sub machin()
n = Selection.Count
ReDim Tableau(n, 2)
n = 1

For Each Ccell In Selection
'*************** traitement ********************
'
'n prend une nouvelle valeur < à Selection.Count
Next
ReDim Preserve Tableau(n, 2)
End Sub

3 réponses

Avatar
Daniel.M
Salut long-drink,

Tu ne peux que redimensionner la DERNIÈRE dimension d'un tableau à plusieurs
dimensions.

Étapes:
Avoir un Tableau(2,n)
Tu redimensionne Preserve n à la fin.
Puis tu transpose ton tableau(2,n) ==> tableau(n,2) par l'instruction
Application.Transpose(Tableau)

Salutations,

Daniel M.


"long-drink" wrote in message
news:
bonjour les spécialistes,
j'ai un problème avec la dernière ligne du code suivant qui me
retourne "Indice en dehors de la plage".(...présence de galettes
nauséabondes sur celle-ci peut-être...?
Si je n'indique pas "Preserve", le code fonctionne, mais vide le
tableau, bien évidemment. J'ajoute que "n" a toujours une valeur
valide et que la macro se déroule parfaitement jusqu'à "Redim..".

Merci d'avance pour vos lumières.

Sub machin()
n = Selection.Count
ReDim Tableau(n, 2)
n = 1

For Each Ccell In Selection
'*************** traitement ********************
'
'n prend une nouvelle valeur < à Selection.Count
Next
ReDim Preserve Tableau(n, 2)
End Sub


Avatar
Daniel.M
Hello,


j'ai essayé ta solution, mais il se pose un problème de syntaxe (priez
pour nous !). Transpose n'est disponible que sous
"WorksheetFunction.Transpose", mais ensuite ça coince !


Publie le code qui coince sinon, je peux pas t'aider.

Salutations,

Daniel M.

Avatar
Daniel.M
Salut,

J'obtiens les mêmes résultats avec la méthode préconisée.
Ainsi:

Function nCl2(Plage As Range) As Variant
Dim Cellule As Range, n As Long, j As Long
Dim T() As Variant

ReDim T(2, Plage.Cells.Count)

n = 1
For Each Cellule In Plage
If IsNumeric(Cellule) Then
T(1, n) = Cellule
For j = 1 To n
If Cellule = T(1, j) Then
T(2, j) = T(2, j) + 1
If T(2, j) > 1 Then
n = n - 1: Exit For
End If
End If
If Not IsNumeric(T(1, j)) Then
n = n - 1
End If
Next
n = n + 1
End If
Next

n = n - 1
ReDim Preserve T(2, n)
nCl2 = Application.Transpose(T)

End Function

Salutations,

Daniel M.