Petite Question sur les Array's [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 05-06-2008 à 13:22:28
Votre façon de faire est différente de celle que l'on faisait dans ma jeunesse, où l'on définissait un tableau avec une taille déterminée, et ensuite on pouvait éventuellement l'agrandir.
Là votre tableau a dès le début une taille indéterminée, et donc je trouve bizarre de faire Redim pour ce genre de tableau. Est-ce que vous pouriez essayer sans le Redim, ou bien pour un autre essai, mettez une taille fixe au tableau au début ?
Marsh Posté le 05-06-2008 à 13:27:39
Bonjour,
Il me semble que lorsque l'on utilise Redim il ne faut pas faire de Dim avant.
Marsh Posté le 05-06-2008 à 14:27:04
Merci pour vos réponses...
Si je ne fais pas de Dim avant, il me dit que ma variable n'a pas été déclarée...
Si je ne met pas le Redim, il va vider le tableau a chaque fois que je vais venir ecrire dedans non ?
Et si je mets une taille fixe au tableau, il me dit que j'ai déja défini une taille au tableau au moment ou il passe sur le Redim...
Bref, je suis un peu perdu !
Marsh Posté le 05-06-2008 à 14:44:01
Une autre idée
Le problème ne viendrait-il pas de :
ReDim Preserve Zone_Impr(UBound(Zone_Impr) + 1)
Au premier passage de cette ligne Ubound n'a aucune valeur
si tu mets un compteur
cpt=cpt+1
ReDim Preserve Zone_Impr(cpt)
et tout ça sans DIM avant
Marsh Posté le 05-06-2008 à 15:55:50
si, je mets pas de dim, ca passe pas au lancement : il me dit que "zone_impr" n'a pas été déclaré...
Je vais essayer ton truc, mais pour moi, je pensais que UBound(Zone_Impr) = 0, non (au premier passage) ?
j'essaie et je reviens !
Marsh Posté le 05-06-2008 à 16:37:29
bonjour,
pourquoi s'enquiquiner avec un array... utilise une collection :
Code :
|
A+
Oups... petite correction !
Marsh Posté le 05-06-2008 à 16:53:52
Et on peut imprimer une collection comme ca ??
Merci en tout cas !!
Marsh Posté le 05-06-2008 à 17:00:36
...sinon, pour reprendre la suggestion de pyrof :
Code :
|
A+
Marsh Posté le 05-06-2008 à 17:12:40
Pour répondre à la question soulevée initialement, à savoir pourquoi ça plante avec les lignes de code qu'a montrées jay-jay69, c'est simplement parce que ton UBound() ne peut fonctionner qu'avec un tableau dont les dimensions sont initialisées.
Or, ton code fait
Dim Zone_Impr() |
puis
ReDim Preserve Zone_Impr(UBound(Zone_Impr) + 1) |
Donc, quand UBound() est appelée, Zone_Impr() n'a encore aucune dimension et plante.
Il faudrait un
ReDim Zone_Impr(0) |
entre le Dim et le ReDim(... UBound(...))
Marsh Posté le 05-06-2008 à 17:20:38
Merci pour toutes vos réponses, je comprends mieux !
Un autre probleme se pose :
Code :
|
Il ne semble pas aimer la ligne "Sheets(Zone_Impr).Select", alors que tout simplement, je souhaite selectionner les feuilles récupérées dans mon Array...
Marsh Posté le 06-06-2008 à 15:46:35
Bonjour,
Voici une toute autre façon de générer un tableau de valeur
Sub toto()
Dim ar 'Crée une variable
Set ar = CreateObject("Scripting.Dictionary" )
For Each feuille In ActiveWorkbook.Sheets
ar(feuille.Name) = "1"
Next
For Each tmp In ar
cle = tmp
MsgBox tmp
Next
End Sub
Marsh Posté le 07-06-2008 à 18:04:19
Modifs code 13 Jun 2008
Salut,après suppression de mes 2 posts précédents pour une meilleure lisibilté
3 remarques :
PrToFileName génère un fichier ps ( PostScript ) et non un pdf
Le N° d'imprimante Nexy change suivant le PC sur laquelle la macro tourne
Il faut prédéfinir soit manuellement ou par programmation pour chaque feuille la zone d'impression
Au final qqch qui ressemblera à ceci, à toi de l'adapter à ton contexte
Le titre de ton post devrait être changé
|
Marsh Posté le 05-06-2008 à 12:23:09
Bonjour à tous,
J'ai un code comme celui-ci :
La macro plante sur la ligne...
... me disant que "l'indice n'appartient pas à la séléction" !
Pourtant, dans cette ligne, je ne fais qu'ajouter un ligne à mon tableau avant d'insérer la valeur, non ?
Merci pour vos réponses,
ps : le but est pourtant simple : mettre dans le tableau les feuilles dont le nom commence par RF ou RC en vue de les séléctionner pour une impression en PDF...
Encore merci !