VBA - tablo() As Byte

  • Initiateur de la discussion Initiateur de la discussion job75
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

job75

XLDnaute Barbatruc
Bonjour le forum,

Un problème apparemment simple :

Code:
Sub test1()
Dim tablo(99, 0) As Byte
[A1].Resize(100) = tablo
End Sub

Sub test2()
Dim tablo(99, 0) As Integer
[A1].Resize(100) = tablo
End Sub

Quelqu'un peut-il m'expliquer pourquoi la 1ère macro (avec As Byte) beugue, et pas la seconde ?

C'est peut-être expliqué dans l'aide VBA mais je n'ai rien trouvé 😕

Merci d'avance.

A+
 
Re : VBA - tablo() As Byte

Bonsoir à tous

job75:
Ce ne serait pas cela la cause, par hasard (désolé mais pas trouvé en français dans le texte)
In VBA, Byte Arrays are special because, unlike arrays of other datatypes, a string can be directly assigned to a byte array. In VBA, Strings are UNICODE strings, so when one assigns a string to a byte array then it stores two digits for each character. The first digit will be the ASCII value of the character and next will be 0.
 
Re : VBA - tablo() As Byte

salut

je n'ai pas trouvé l'explication mais il semblerait que les éléments du tableau ne soient pas indexés de la même façon selon la déclaration 😕. Autres tests :
Code:
Sub test1()
  Dim tablo(99) As Integer
  For n = 0 To 99
    tablo(n) = n
  Next
  [A1].Resize(99) = tablo
End Sub

Sub test2()
  Dim tablo(99) As Integer
  For n = 0 To 99
    tablo(n) = n
  Next
  [B1].Resize(99) = Application.Transpose(tablo)
End Sub

Sub test3()
  Dim tablo(99) As Byte
  For n = 0 To 99
    tablo(n) = n
  Next
  [A1].Resize(99) = tablo
End Sub

Sub test4()
  Dim tablo(99) As Byte
  For n = 0 To 99
    tablo(n) = n
  Next
  [C1].Resize(99) = Application.Transpose(tablo)
End Sub

Si... la troisième pose problème, ce n'est pas le cas de la quatrième, par contre, la première et la deuxième ne renvoient pas la même chose ; à noter que Dim tablo(99,0) ne passe pas dans tous ces cas.
 
Re : VBA - tablo() As Byte

Salut Si...

Bien sûr, un tableau à une dimension est horizontal et il faut toujours le transposer pour l'entrer dans une plage verticale.

Sinon seul le 1er élément est utilisé, c'est élémentaire.

Ta macro test4 transpose le tableau Byte à une dimension et ne beugue pas, alors qu'avec un tableau à 2 dimensions elle beugue.

Pourquoi donc ? Le mystère demeure.

A+
 
Re : VBA - tablo() As Byte

Re Si...

Ta macro test4 m'a fait penser à une chose.

Si je transpose (2 fois pour être cohérent) mon tableau Byte à 2 dimensions il n'y a plus de bug :

Code:
Sub test()
Dim tablo(99, 0) As Byte
[A1].Resize(100) = Application.Transpose(Application.Transpose(tablo))
End Sub
D'évidence Application.Transpose modifie les propriétés du tableau, mais de nouveau pourquoi ???

A+
 
Re : VBA - tablo() As Byte

Bonsoir.
La réponse à cette dernière question est plus simple :
VB:
Sub test()
Dim tablo(99, 0) As Byte
MsgBox TypeName(tablo)
MsgBox TypeName(Application.Transpose(Application.Transpose(tablo)))
End Sub
Quant à savoir pourquoi dans certains cas il accepte autre chose que du Variant() … mystère !
Mais je n'essaye plus depuis longtemps, justement parce qu'il n'accepte pas toujours.
D'ailleurs :
VB:
Sub test2()
Dim tablo(1 To 100, 1 To 1) As Integer
MsgBox TypeName(tablo)
Feuil1.[A1].Resize(100).Value = tablo
MsgBox TypeName(Feuil1.[A1].Resize(100).Value)
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
1
Affichages
324
Retour