Dim tableau VBA excel [Résolu]

Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
23 octobre 2018
- 23 oct. 2018 à 14:16 - Dernière réponse :
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 24 oct. 2018 à 08:57
Bonjour,
Je me permets de poster ici car je ne comprends pas pourquoi VBa mets une erreur, j'ai navigué sur la toile mais je ne trouve pas de solutions à mon erreur.
Mon code est le suivant:

Dim i As Integer
Dim EXC(), QY(), ABSORP() As Long
i = 5
    While Cells(2 * i, 1) = "Reference"
        QY(i - 5) = Cells(2 * i + 1, 5)
        i = i + 1 
    Wend


Le but étant de remplir un tableau avec des valeurs si le début de la ligne commence par "reference". Le problème est que j'ai une erreur une la ligne QY(i-5)... (Erreur d'éxécution 9 : l'indice n'appartient pas à la sélection).
J'ai opté pour un tableau dynamique car sa taille ne sera pas la même suivant les fichiers.
Avez-vous une idée?
Merci d'avance,
Bonne journée,

Anthony
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Dernière intervention
23 octobre 2018
- 23 oct. 2018 à 14:22
1
Merci
Salut,
En vb.net, je déclare Dim QY() as long et ensuite, je fait Redim QY(i - 5) pour agrandir le tableau puis QY(i - 5) = Cells(2 * i + 1, 5)

Merci Bilou47190 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Bilou47190
Meilleure réponse
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Dernière intervention
23 octobre 2018
- 23 oct. 2018 à 14:24
1
Merci
Pardon, faire Redim Preserve QY(i - 5) pour garder les anciennes valeur dans le tableau

Merci Bilou47190 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Bilou47190
Meilleure réponse
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Dernière intervention
23 octobre 2018
- Modifié par pijaku le 24/10/2018 à 11:41
1
Merci
Dim i As Integer
Dim EXC(), QY(), ABSORP() As Long
i = 5
    While Cells(2 * i, 1) = "Reference"
        Redim Preserve QY(i - 5)
        QY(i - 5) = Cells(2 * i + 1, 5)
        i = i + 1 
    Wend

Je fais comme ca mais en vb.net, je pense pareil

Merci Bilou47190 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Bilou47190
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
23 octobre 2018
- 23 oct. 2018 à 14:41
0
Merci
Salut,
J'avais testé avec Redim preserve mais je l'avais mis après et donc même erreur. Donc avec un tableau dynamique, il faut quand même dimensionner la tableau avant d'enregistrer une valeur?
Merci encore pour ton aide,
bon courage,
Commenter la réponse de MEUCORACAO
Messages postés
35
Date d'inscription
jeudi 30 juin 2011
Dernière intervention
23 octobre 2018
- Modifié par MEUCORACAO le 23/10/2018 à 15:02
0
Merci
Ouais c'est ce que j'avais compris et cela fonctionne mais on est obliger de dimensionner le tableau avant de le remplir. Je pensais autrement sur un tableau dynamique.
Merci
Commenter la réponse de MEUCORACAO
Messages postés
15
Date d'inscription
mardi 3 mars 2009
Dernière intervention
23 octobre 2018
- 23 oct. 2018 à 15:04
0
Merci
Perso, en vb.net j'ai tjrs fait comme ca.
Commenter la réponse de Bilou47190
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- Modifié par Whismeril le 24/10/2018 à 08:58
0
Merci
Bonjour,
je me permets une petite intervention pour vous rappeler à tous les 2 que:
  • la bonne façon d'utiliser la coloration syntaxique est décrite là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
  • s'il y a un forum VBA et un forum VB.net, c'est parce que ces 2 langages sont différents et que ce qui est vrai dans l'un ne l'est pas forcément dans l'autre. Voir ici pour plus de détails https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net Ici, il y a un parfait exemple de ce qu'il ne faudrait pas faire. Redim est très gourmand en temps d'exécution et ressources systèmes. Redim Preserve encore plus. Il faut donc les utiliser le moins possible.
    • En VBA, il y a 2 options, faire un premier redim, dès le début avec une très grande taille et espérer ne pas avoir à y revenir, si on doit y revenir on redim avec beaucoup d'éléments en plus. Par exemple 1er 1000, et ensuite 1500. Ou alors utiliser le type Collection ou le Type Dictionnary.
    • En VB.Net, il y a List(of), iList, ObservableColelction, BindingList etc... enfin plein d'implémentation de listes chainées pour ne pas avoir besoin de se servir d'un tableau.

.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.