SafeArrayGetDim et tableau de tableau structuré

cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 - Modifié par cs_andrebernard le 3/09/2013 à 18:46
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 4 sept. 2013 à 18:35
Bonjour à tous

Attention !!! la question n'est pas simple...surtout pour moi
J'espere que la réponse ne sera pas pire

Pour savoir si un tableau est initialisé, j'utilise la super API SafeArrayGetDim qui me dépanne drolement

Seulement voila, dernierement j'ai eu besoin de créer un tableau de tableau dynamique
Type Tablo
 TableauDonnees() As Variant
End Type

Public TabloTableauDonnees(5) As Tablo

Je récupere des données via EXCEL grace à cette fonction
Application.WorksheetFunction.Transpose(rng)
qui rempli directement le tableau soit en une dimension soit en deux dimensions
Donc je ne connais pas à l'avance la structure du tableau

J'arrive bien à savoir si le tableau est initialisé grace à
If SafeArrayGetDim(TabloTableauDonnees(t).TableauDonnees) Then
mais j'aimerais savoir si il est en une ou deux dimensions et la...pas moyen d'y arriver
Car si je fais appel à UBOUND avec l'index 2
UBound(TabloTableauDonnees(t).TableauDonnees, 2)
et bien evidemment si le tableau n'a qu'une dimension cela créé une erreur

J'ai lu sur internet qu'il existait cette API SafeArrayGetElement() mais je ne sais pas l'utiliser ni si elle correspond à mes besoins

Quelqu'un pourrait m'eclairer un peu dans cette demande
Merci et bonne journée

6 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
4 sept. 2013 à 11:39
tu as alors le choix entre :
- soit faire une gestion d'erreur (simple)
- soit ajouter deux membres (dim1 et dim2) en fonction du nb de lignes de de colonnes de la plage rng) à ta structure et t'en servir ensuite (ce sont les dimensions de chaque tableau généré).
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
Modifié par ucfoutu le 3/09/2013 à 19:15
Bonjour,
Qu'est rng ? comment est-elle déclarée et initialisée ?
Si, comme tout le donne à penser, il s'agit d'un range,
1) j'ai des difficultés à "voir" un "tableau de tableaux"
2) le tableau généré depuis une plage a les dimensions de cette plage
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
3 sept. 2013 à 21:26
Bonjour UCFOUTU

1) j'ai des difficultés à "voir" un "tableau de tableaux"
Si cela fonctionne, j'ai cherché pendant un moment sur les forum et quelqu'un donnait cette solution
Grace à ce typage, j'ai bien un tableau qui contient un autre tableau qui est quand a lui dynamique

2) le tableau généré depuis une plage a les dimensions de cette plage
Oui c'est ça.
Le tableau prend la taille du range de EXCEL
Tout marche nickel, mais je suis obligé de traîner un variable donnant le nombre de champs.

Mais ce que j'aurais aimé savoir c'est comment peut on faire pour safeArrayGetDim ou une autre API afin de savoir si le tableau de tableau a une ou deux dimension
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
Modifié par ucfoutu le 3/09/2013 à 22:16
désolé, mais je ne te comprends pas.
Autant je sais ce que peut être un tableau de tableaux, autant je ne vois vraiment pas comment tu en dresses un à partir d'une plage.
tu n'as pas répondu à :
"Qu'est rng ? comment est-elle déclarée et initialisée ? "
et c'est pourtant un point crucial.

J'ajoute que le code montré dans ton premier message ne "montre" pas un "tableau de tableaux", mais une structure de tableaux.
On s'y perd.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

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

Posez votre question
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
4 sept. 2013 à 10:22
Excuse moi, j'avais oublié
Set rng = Application.ActiveWorkbook.ActiveSheet.Range(Cells(1, PremiereColonneACharger), Cells(DerniereLigne, DerniereColonneACharger)) 

--
0
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
4 sept. 2013 à 18:06
Bon bah d'accord !!!
Je pensais que y'avais un moyen avec les API de faire ça.

Je te remercie
Bonne journée



--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
Modifié par ucfoutu le 4/09/2013 à 18:36
Même pas besoin de deux membres supplémentaires.
Un seul suffira. Pourquoi ?
Parce que le tableau résultat d'une transposition d'une plage ne peut être d'une seule dimension que dans le seul cas où la plage ne concerne qu'une colonne (transposée en ligne)
Ce ne pourra qu'être 2 dans tous les autres cas, sans exception.
0
Rejoignez-nous