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
Emcy
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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















Avatar
michdenis
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news: %2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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















Avatar
Emcy
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction) pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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




















Avatar
michdenis
Bonjour Emcy,

Tu cherches à faire rouler une fonction même si dans les cas où elle n'est pas requise...
Est-ce normal ?

Un recordset s'ouvre sur le premier enregistrement disponible.
Si le curseur se retrouve à la position EOF (End Of File)
c'est qu'il n'y a pas d'enregistrements dans le recordset
en conséquence, aucun besoin d'appliquer une fonction à
un recordset vide ! Est-ce déraisonnable de penser ainsi ?

'----------------------
If Rst.EOF = True Then
Msgbox "aucune information à afficher dans le listbox."
else
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End if
'----------------------


Salutations!



"Emcy" a écrit dans le message de news: ea4qJL$$
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction) pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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




















Avatar
Emcy
je suis d'accord que cette methode marche mais ce n'est pas ce que je veux
=> je ne veux pas avoir à fare de teste d'erreur à chaque fois que j'appele
ma fonction (je veux que ça soit fait à l'interrieur de la fonction) :
est-ce possible ?
cette fois, vous comprennez ou pas ?

"michdenis" a écrit dans le message de news:
OqC1GV$$
Bonjour Emcy,

Tu cherches à faire rouler une fonction même si dans les cas où elle n'est
pas requise...
Est-ce normal ?

Un recordset s'ouvre sur le premier enregistrement disponible.
Si le curseur se retrouve à la position EOF (End Of File)
c'est qu'il n'y a pas d'enregistrements dans le recordset
en conséquence, aucun besoin d'appliquer une fonction à
un recordset vide ! Est-ce déraisonnable de penser ainsi ?

'----------------------
If Rst.EOF = True Then
Msgbox "aucune information à afficher dans le listbox."
else
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End if
'----------------------


Salutations!



"Emcy" a écrit dans le message de news:
ea4qJL$$
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma
fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as
Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction)
pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement
à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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

























Avatar
Michel Gaboly
Re,

Le problème d'après moi, est que si le tableau est vide, cela ne sert à rien d'afficher la ListBox dans le UserForm, ni
a fortiori de chercher à l'alimenter.

Il faut donc bien un test quelconque pour mettre le cas échéant la pr opriété Visible du ListBox à False.

ça ne resoudera pas réellement mon probleme : certe je n'aurais plu s à
utiliser on error mais il faudra quand même faire un test sur ce comp teur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulem ent à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'a i plus à me
préocuper de comment je vais gérer mes erruer lorsque je vais rempl ir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impress ion que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$

Est-ce que tu ne peux pas mettre un compteur d'enregistrements au momen t
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éme nts 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'er reur
lorsque je remplis la ListBox : je recherche un moyen pour qu'il n'y a i
pas d'erreur s'il n'y a aucuns element à rentrer dans la ListBox (sa ns
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 d e
Variant à une dimension.

Mat3, avec parenthèses est défini directement comme un tableau d e
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













--
Cordialement,

Michel Gaboly
www.gaboly.com






Avatar
Emcy
c'est bien ce que je craignais ... bon ben tant pis :(
merci quand même

"Michel Gaboly" a écrit dans le message de news:
%232p6ej$$
Re,

Le problème d'après moi, est que si le tableau est vide, cela ne sert à rien
d'afficher la ListBox dans le UserForm, ni
a fortiori de chercher à l'alimenter.

Il faut donc bien un test quelconque pour mettre le cas échéant la propriété
Visible du ListBox à False.

ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus à
me préocuper de comment je vais gérer mes erruer lorsque je vais remplir
ma ListBox ... j'espere avoir ete assez explicite => mais j'ai
l'impression que ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$

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













--
Cordialement,

Michel Gaboly
www.gaboly.com






Avatar
Daniel
Et si tu disais ce que tu veux faire en cas de tableau vide au lieu de dire
ce que tu ne veux pas ?
Daniel
"Emcy" a écrit dans le message de news:
eZRK3f$$
je suis d'accord que cette methode marche mais ce n'est pas ce que je veux
=> je ne veux pas avoir à fare de teste d'erreur à chaque fois que
j'appele ma fonction (je veux que ça soit fait à l'interrieur de la
fonction) : est-ce possible ?
cette fois, vous comprennez ou pas ?

"michdenis" a écrit dans le message de news:
OqC1GV$$
Bonjour Emcy,

Tu cherches à faire rouler une fonction même si dans les cas où elle
n'est pas requise...
Est-ce normal ?

Un recordset s'ouvre sur le premier enregistrement disponible.
Si le curseur se retrouve à la position EOF (End Of File)
c'est qu'il n'y a pas d'enregistrements dans le recordset
en conséquence, aucun besoin d'appliquer une fonction à
un recordset vide ! Est-ce déraisonnable de penser ainsi ?

'----------------------
If Rst.EOF = True Then
Msgbox "aucune information à afficher dans le listbox."
else
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End if
'----------------------


Salutations!



"Emcy" a écrit dans le message de news:
ea4qJL$$
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma
fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as
Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction)
pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce
compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section (seulement
à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus
à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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





























Avatar
Emcy
je veux que ma listbox soit vide (comme le resultat de la fonction) ...

"Daniel" a écrit dans le message de news:
uEWZvo$$
Et si tu disais ce que tu veux faire en cas de tableau vide au lieu de
dire ce que tu ne veux pas ?
Daniel
"Emcy" a écrit dans le message de news:
eZRK3f$$
je suis d'accord que cette methode marche mais ce n'est pas ce que je
veux
=> je ne veux pas avoir à fare de teste d'erreur à chaque fois que
j'appele ma fonction (je veux que ça soit fait à l'interrieur de la
fonction) : est-ce possible ?
cette fois, vous comprennez ou pas ?

"michdenis" a écrit dans le message de news:
OqC1GV$$
Bonjour Emcy,

Tu cherches à faire rouler une fonction même si dans les cas où elle
n'est pas requise...
Est-ce normal ?

Un recordset s'ouvre sur le premier enregistrement disponible.
Si le curseur se retrouve à la position EOF (End Of File)
c'est qu'il n'y a pas d'enregistrements dans le recordset
en conséquence, aucun besoin d'appliquer une fonction à
un recordset vide ! Est-ce déraisonnable de penser ainsi ?

'----------------------
If Rst.EOF = True Then
Msgbox "aucune information à afficher dans le listbox."
else
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End if
'----------------------


Salutations!



"Emcy" a écrit dans le message de news:
ea4qJL$$
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les
retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma
fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as
Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction)
pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce
compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section
(seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai plus
à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir
ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai
l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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

































Avatar
Daniel
Euh, je suis pas sûr, mais, si tu transformes ta fonction en macro appelée,
tu peux peut-être, dans cette dernière tester avant d'essayer d'alimenter ta
listbox ?
Daniel
"Emcy" a écrit dans le message de news:
uLkhXy$$
je veux que ma listbox soit vide (comme le resultat de la fonction) ...

"Daniel" a écrit dans le message de news:
uEWZvo$$
Et si tu disais ce que tu veux faire en cas de tableau vide au lieu de
dire ce que tu ne veux pas ?
Daniel
"Emcy" a écrit dans le message de news:
eZRK3f$$
je suis d'accord que cette methode marche mais ce n'est pas ce que je
veux
=> je ne veux pas avoir à fare de teste d'erreur à chaque fois que
j'appele ma fonction (je veux que ça soit fait à l'interrieur de la
fonction) : est-ce possible ?
cette fois, vous comprennez ou pas ?

"michdenis" a écrit dans le message de news:
OqC1GV$$
Bonjour Emcy,

Tu cherches à faire rouler une fonction même si dans les cas où elle
n'est pas requise...
Est-ce normal ?

Un recordset s'ouvre sur le premier enregistrement disponible.
Si le curseur se retrouve à la position EOF (End Of File)
c'est qu'il n'y a pas d'enregistrements dans le recordset
en conséquence, aucun besoin d'appliquer une fonction à
un recordset vide ! Est-ce déraisonnable de penser ainsi ?

'----------------------
If Rst.EOF = True Then
Msgbox "aucune information à afficher dans le listbox."
else
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
End if
'----------------------


Salutations!



"Emcy" a écrit dans le message de news:
ea4qJL$$
décidemment j'ai du mal à me faire comprendre :(
je programme en ADO => j'arrive à récupérer mes donnée et à les
retourner
dans ma fonction

le probleme est lorsque j'execute cette commande :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)

=> s'il n'y a aucun element dans le resultat de ma requete alors ma
fonction
revoie la valeur d'un tableau "vide" et donc une erreur se produit.
=> j'ai aussi essayé de dire à ma fonction de renvoyer un tableau
défini
comme ceci lorsque le resultat de ma requete est vide :
Function FonctionRecupere(MaColonne As String, Filtre As String) as
Variant
Dim MonTableau() As String
.....
'si le resultat de ma requete est vide alors je fais ça
Redim MonTableau(0)
MonTableau(0) = empty
.....
FonctionRecupere = MonTableau
End Function
=> avec cette methode je n'ai plus d'erreur mais j'ai dans ma ListBox
un
element "vide" (ce que je ne veux pas)

comment faire pour ne pas avoir ni d'element vide ni d'erreur ?
n'oubliez pas que je ne veux pas qu'on fasse un control d'erreur sur la
ligne d'appel de la fonction (seulement à l'interrieur de la fonction)
pour
facilité l'utilisation de ma fonction.

"michdenis" a écrit dans le message de news:
eHFADs%23$
Bonjour Emcy,

Comment fais-tu pour obtenir ton recordset ? Par ADO, par DAO ?

De tester si ta requête retourne des enregistrements avant l'usage de
ta fonction devrait être relativement simple

Par exemple ceci :
Rst étant une variable de type recordset

If Rst.EOF = True Then
MsgBox "aucun enregistrement"
'arrêt de la procédure !
End If


Salutations!


"Emcy" a écrit dans le message de news:
%2328%23oi%23$
ça ne resoudera pas réellement mon probleme : certe je n'aurais plus à
utiliser on error mais il faudra quand même faire un test sur ce
compteur

ce que je veux c'est créer une fonction qui me permette de remplir ma
ListBox simplement en utilisant la ligne de commande suivante :
Me.ListBox1.List = FonctionRecupere(MaColonne, Filtre)
=> je ne veux faire aucun control d'erreur dans cette section
(seulement à
l'interieur de la fonction)
=> ce que je veux c'est qu'une fois ma fonction créée, que je n'ai
plus à
me
préocuper de comment je vais gérer mes erruer lorsque je vais remplir
ma
ListBox ... j'espere avoir ete assez explicite => mais j'ai
l'impression
que
ce n'est pas possible....



"Daniel" a écrit dans le message de news:
OPK1AE%23$
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