Utilisation de Ubound avec un tableau dynamique

Résolu
matteli Messages postés 38 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 14 mars 2007 - 6 mars 2007 à 17:48
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 21 mars 2007 à 09:50
Salut,

J'utilise le code classique suivant :

For i = 1 to Ubound (tableau)
    ...
next i

J'ai une erreur (normal) si le tableau est dynamique et qu'il n'a pas été dimensionné.

Quelle commande permet de savoir si un tableau dynamique a été dimensionné ?

Merci

26 réponses

matteli Messages postés 38 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 14 mars 2007
7 mars 2007 à 15:31
Ok merci pour vos réponses, je vais utiliser la méthode de PCPT.

Mais il fallait savoir que le Not(tab) retournais l'adresse du tableau.
0
matteli Messages postés 38 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 14 mars 2007
7 mars 2007 à 16:14
Ouh là, quand j'utilise la méthode de PCPT, j'ai une erreur "Expression trop complexe" qui apparait à un autre endroit du programme qui n'a rien à voir.

Je précise que j'utilise cette méthode pour un type perso :
                If (Not (Not (Fenetre(i).Onglet(j).Etiquette)) 0) False Then
                    For k = 1 To UBound(Fenetre(i).Onglet(j).Etiquette)
                        AfficheLabel Fenetre(i).Onglet(j).Etiquette(k).Label, i
                    Next k
                End If

L'erreur arrive sur un :
scale.x=scaling_image
qui n'a rien à voir avec la méthode ci-dessus.

Les pointeurs ont du faire une cochonnerie.
0
matteli Messages postés 38 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 14 mars 2007
7 mars 2007 à 16:34
Tout compte fait je vais utiliser la méthode de Gobillot adapté à ma façon.
Cet exemple fonctionne si dans la boucle, il n'y a que des lignes contenant une référence à mon tableau non dimensionné.

On error resume next
for i = 1 to ubound(tab)
    fonction tab(i)
next i
On error goto 0
0
matteli Messages postés 38 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 14 mars 2007
7 mars 2007 à 16:57
Pffff, j'ai l'impression que dans une même routine, il ne peut y avoir 2 fois :
On error goto 10

A la première erreur, il va bien à 10 mais à la 2ème, il y a erreur.

Décidement, c'est un peu compliqué.

Je crois que je vais revenir à la méthode du début avec une déclaration obligatoire à partir de 0 et une utilisation à partir de 1. Ca me parait la méthode la plus propre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 mars 2007 à 19:52
oui c'est vrai, j'avais déjà que l'erreur pouvait revenir n'importe où
on peut la supprimer en utilisant une instruction du genre Clear ou Refresh (juste après et pas avant)
à utiliser avec parcimonie ???

pour ta gestion d'erreur, il faut fair un Resume sinon le gestionnaire d'erreur est toujours en cours
avec Resume Next le Resume est déjà fait et c'est plus simple
attention aux boucles:

     On Error GoTo 30
     Error 10
   
10  On Error GoTo 40
      Error 11
   
20  MsgBox "plus d'erreur " & Err.Number
      Exit Sub
   
30  MsgBox Err.Number
      Resume 10
   
40  MsgBox Err.Number
      Resume 20

Daniel
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 mars 2007 à 09:50
Concernant le not not tableau qui semble avoir des effets de bords...


Il semblerait que les erreurs se produisent en débogage dans l'IDE,
quand on compile vers du pseudo code... mais pas quand on compile vers
du natif.


Si on désassemble le code natif :


mov eax, dword ptr [ebp - 20]

add esp, 14

test eax, eax

je ...


Une petite remarque, si on met un entier à la place du tableau, et qu'on
l'affecte en dur dans le code, le compilo ne compile pas le if. Du
grand art. On se croirait en C. Si on l'affecte via une InputBox par
exemple, on tombe là dessus :


mov eax, dword ptr [ebp - 1C]


add esp, 14


cmp eax, edi


je ...


Sachant qu'il y a zéro dans edi à ce moment là.


Bref, le mystère reste entier.
0
Rejoignez-nous