OVH Cloud OVH Cloud

detecter si un tableau est vide

33 réponses
Avatar
Emcy
bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?

10 réponses

1 2 3 4
Avatar
Daniel
Bonjour.
Est que ce genre de test te convient ?

Sub test()
Dim tabl(2)
tabl(0) = "toto"
tabl(1) = "titi"
tabl(2) = "titi"
Var = Join(tabl, "")
If Join(tabl, "") = "" Then
MsgBox "vide"
Else
MsgBox "rempli"
End If
End Sub

"Emcy" a écrit dans le message de news:
O3iqBjv$
bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?



Avatar
Michel Gaboly
Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la façon
dont elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vide

Mat2, avec parenthèses est défini directement comme un tableau de
Variant à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de
Variant non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
Bonjour Daniel,

Je ne sais pas pourquoi, mais on oublie souvent la fonction iif, dont la
syntaxe est la même que celle de la fonction SI() des feuilles de
calcul. Elle permet de rendre le code bien + concis :

Msgbox IIf(Join(tabl, "") = "", "Vide", "Rempli")


Une précision d'autre part : Join fait partie des fonctions liées à VB6.

Elle n'est donc disponible ni avec Excel 97, ni avec les versions Mac ;-))


PS - Tu as défini une variable, var, mais tu ne l'utilises pas dans ton
test ;-))


Bonjour.
Est que ce genre de test te convient ?

Sub test()
Dim tabl(2)
tabl(0) = "toto"
tabl(1) = "titi"
tabl(2) = "titi"
Var = Join(tabl, "")
If Join(tabl, "") = "" Then
MsgBox "vide"
Else
MsgBox "rempli"
End If
End Sub

"Emcy" a écrit dans le message de news:
O3iqBjv$

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?








--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
Daniel
Je ne sais pas pourquoi, mais on oublie souvent la fonction iif


Bonjour, Michel.
C'est à dire que pour l'avoir oublié, il faut l'avoir connue.
Daniel

Avatar
Michel Gaboly
:-))

Je ne sais pas pourquoi, mais on oublie souvent la fonction iif



Bonjour, Michel.
C'est à dire que pour l'avoir oublié, il faut l'avoir connue.
Daniel





--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
Emcy
mon cas est pour Mat3 : y a t-il un moyen de ne pas avoir à utliser On Error
?

"Michel Gaboly" a écrit dans le message de news:
O%23i470v$
Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la façon dont
elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vide

Mat2, avec parenthèses est défini directement comme un tableau de Variant
à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de Variant
non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?



--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Daniel
Bonjour.
Si tu nous donnais un échantillon de ton code ?
Cordialement.
Daniel
"Emcy" a écrit dans le message de news:
et97VO8$
mon cas est pour Mat3 : y a t-il un moyen de ne pas avoir à utliser On
Error ?

"Michel Gaboly" a écrit dans le message de
news: O%23i470v$
Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la façon
dont elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vide

Mat2, avec parenthèses est défini directement comme un tableau de Variant
à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de Variant
non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?



--
Cordialement,

Michel Gaboly
www.gaboly.com







Avatar
Michel Gaboly
Bonjour Emcy,

Il suffit de declarer correctement les variables en ne declarant JAMAIS
un tableau non dimensionné ;-)))

Utiliser systematiquement

Dim Mat(0)

ou

Dim Mat(0, 0)
Dim Mat(0, 0, 0)
...

et jamais

Dim Mat()

Tu utilises ensuite Redim avant d'alimenter ton tableau


mon cas est pour Mat3 : y a t-il un moyen de ne pas avoir à utliser O n Error
?

"Michel Gaboly" a écrit dans le message de news:
O%23i470v$

Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la faç on dont
elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vid e

Mat2, avec parenthèses est défini directement comme un tableau de V ariant
à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de V ariant
non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.


bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sa ns
utiliser les OnError ?



--
Cordialement,

Michel Gaboly
www.gaboly.com







--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Emcy
malheuresement, je ne peux garantir que le tableau soit non vide.

j'ai fait une fonction qui revoie un tableau constitué des éléments d'un
RecordSet (BDD Access) => donc je ne peux pas avoir comme certitude que mon
tableau ne sera pas vide

Sub Main()
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End Sub

Function FonctionRecupere(MaColonne As String, Filtre As String) as Variant
Dim MonTableau() As String
.....
..... 'remplissage de MonTableau (en utilisant Redim pour fixer la
taille)
.....
FonctionRecupere = MonTableau
End Function

=> si la fonction renvoie un tableau vide alors j'ai un message d'erreur
lorsque je remplis la ListBox : je recherche un moyen pour qu'il n'y ai pas
d'erreur s'il n'y a aucuns element à rentrer dans la ListBox (sans avoir à
toucher le code de la sub Main)


"Emcy" a écrit dans le message de news:
et97VO8$
mon cas est pour Mat3 : y a t-il un moyen de ne pas avoir à utliser On
Error ?

"Michel Gaboly" a écrit dans le message de
news: O%23i470v$
Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la façon
dont elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vide

Mat2, avec parenthèses est défini directement comme un tableau de Variant
à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de Variant
non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide sans
utiliser les OnError ?



--
Cordialement,

Michel Gaboly
www.gaboly.com







Avatar
Daniel
Est-ce que tu ne peux pas mettre un compteur d'enregistrements au moment du
remplissage ?
Daniel
"Emcy" a écrit dans le message de news:
eqAETy9$
malheuresement, je ne peux garantir que le tableau soit non vide.

j'ai fait une fonction qui revoie un tableau constitué des éléments d'un
RecordSet (BDD Access) => donc je ne peux pas avoir comme certitude que
mon tableau ne sera pas vide

Sub Main()
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End Sub

Function FonctionRecupere(MaColonne As String, Filtre As String) as
Variant
Dim MonTableau() As String
.....
..... 'remplissage de MonTableau (en utilisant Redim pour fixer la
taille)
.....
FonctionRecupere = MonTableau
End Function

=> si la fonction renvoie un tableau vide alors j'ai un message d'erreur
lorsque je remplis la ListBox : je recherche un moyen pour qu'il n'y ai
pas d'erreur s'il n'y a aucuns element à rentrer dans la ListBox (sans
avoir à toucher le code de la sub Main)


"Emcy" a écrit dans le message de news:
et97VO8$
mon cas est pour Mat3 : y a t-il un moyen de ne pas avoir à utliser On
Error ?

"Michel Gaboly" a écrit dans le message de
news: O%23i470v$
Bonjour Emcy

Cela dépend de ce que tu appelles une variable tableau et de la façon
dont elle a été définie.

Avec ce code :

Private Sub Tableaux()
Dim Mat1, Mat2(0), Mat3()
Mat1 = Array()
MsgBox UBound(Mat1)
MsgBox UBound(Mat2)
MsgBox UBound(Mat3)
End Sub

Mat1, sans parenthèse est un Variant auquel on affecte un tableau vide

Mat2, avec parenthèses est défini directement comme un tableau de
Variant à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau de
Variant non dimensionné.

UBound(Mat1) est égal à -1, tandis que UBound(Mat2) est égal à 0 (indice
maximal), tandis que UBound(Mat3) déclenche une erreur.

bonjour,

existe t-il un moyen de voir si une variable tableau (vba) est vide
sans utiliser les OnError ?



--
Cordialement,

Michel Gaboly
www.gaboly.com











1 2 3 4