Redimensionnement de tableau [Résolu]

Signaler
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007
-
Messages postés
209
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 juillet 2009
-
salut, j'ai un probleme de redimensionnement de tableau...

dans mon code je crée le tableau:
Dim laSelectionCle(0, 2) As String

et puis dans une boucle je redimensionne a chaque fois pour ajouter une ligne:
ReDim Preserve laSelectionCle( n + 1, 2)
laSelectionCle(n, 0) = lRecordsetSelectionCle("clePrimaire")
laSelectionCle(n, 1) = lRecordsetEnregistrement(lRecordsetSelectionCle("clePrimaire"))
n = n+ 1

et quand j'execute il me sort:
tableau déjà dimensionné

est ce que quelqu'un saurai pourquoi???

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
tu avais validé ma réponse, je pensais que tu avais testé...
il te faut passer par un tableau de TYPE

Private Type t2
    tA  As String
    tB As String
End Type

Private Sub TaProc()
    Dim temp() As t2, i As Integer

    For i = 0 To 3
        ReDim Preserve temp(i)
        temp(i).tA = "Chaîne tA (" & i & ")" & " : S"
        temp(i).tB = "Chaîne tB (" & i & ")" & " :
T"
        
        MsgBox "temp(" & i & ",0) => '" & temp(i).tA & "'" & vbCrLf & _
               "temp(" & i & ",1) => '" & temp(i).tB & "'"
    Next i
End Sub

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
salut,

on ne peut redimentionner un tableau que s'il ne l'est pas par les déclarations

Dim laSelectionCle() As String

et le preserve ne marche pas pour un tableau multidimentionnel

il te faut passer par un tableau de TYPE

un click [aide] sur le mesage d'erreur t'aurait indiqué tout çà ....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007

merci pour ta reponse PCPT, ça marche parfaitement, je ne sait pourquoi mais le "preserve" presevre les anciennes valeurs même sur un tableau multi dimentionnel...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
parce que tu ne faut qu'augmenter la taille. c'est en la réduisant que tu perds le contenu :

Si vous réduisez la taille d'un tableau, les données contenues dans les éléments
supprimés sont perdues. Si vous transmettez par référence un tableau à une
procédure, ce dernier ne peut être redimensionné au sein de la procédure.

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
209
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 juillet 2009

Bonjour,
voici un tableau redimensionné que j'ai l'habitude d'utiliser...

Option Explicit
Dim MonTableau() As Variant


Private Sub CommandButton3_Click()
Range("A1").Select
Dim DerniereLigne As Byte
DerniereLigne = Range("A4").End(xlDown).Row
Dim NbreDeLignes As Byte
NbreDeLignes = DerniereLigne
ReDim MonTableau(NbreDeLignes, 6)
Call AffecterValeursTableau(NbreDeLignes)
End Sub
Sub AffecterValeursTableau(DerniereLigneTableau)
Dim CompteurLignes As Byte
Dim CompteurColonnes As Byte
For CompteurLignes = 0 To DerniereLigneTableau
For CompteurColonnes = 0 To 6
MonTableau(CompteurLignes, CompteurColonnes) = Cells(CompteurLignes + 5, CompteurColonnes + 1)
Next CompteurColonnes
Next CompteurLignes


Dim a As String, b As String


a = InputBox("entrez le numero de client dont vous voulez avoir les infos, " & Chr(10) & "0 : Si vous voulez avoir des infos sur la totalité des clients")
b = InputBox("tapez le numéro correspondant à l'information désirée :" & Chr(10) & " 0 : N° ou nombre de clients" & Chr(10) & " 1 : quantité" & Chr(10) & " 2 : prix HT" & Chr(10) & " 3 : Taux de TVA" & Chr(10) & " 4 : montant TVA" & Chr(10) & " 5 : Total TTC")
If a <> "" Then
If b <> "" Then
MsgBox "le résultat est : " & Round(MonTableau(a, b), 3)
End If
End If
End Sub
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007

heeuuu desolé PCPT j'avais mal vu mai non il preserve pas mes valeur, j'ai fait un code de test juste pour voir comment ça marche, voila ce code:

    Dim temp() As String
    Dim d As Integer
    d = 0
    Do While d < 4
        ReDim temp(d + 1, 2)
        temp(d, 0) = "S"
        temp(d, 1) = "T"
        d = d + 1
    Loop
   
    For i = 0 To 3
        MsgBox ("temp(" & i & ",0): " & temp(i, 0))
        MsgBox ("temp(" & i & ",1): " & temp(i, 1))
    Next

si je met un preserve j'ai une erreur...
pour l'affichage je reçoi:

temp(0,0):
temp(0,1):
temp(1,0):
temp(1,1):
temp(2,0):
temp(2,1):
temp(3,0): S
temp(3,1): T

et donc il ecrase tous les données enregistrés précedement...
comment je pourrait corriger ce petit bout de code pour garder tous les valeur??
PS: le plus important pour moi c'est de redimentionner toujour le tableau dans une boucle (au fur et a mesure et pas manuellement)
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
C'est le code avec le Preserve qu'il faudrait voir...

MPi
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007

mais ça ne marche pas avec les tableau dimentionnel, il m'affiche une erreur....
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007

maintenant j'ai tout tester et tout marche parfaitement, merci sans toi je serai dans la ...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
dans le code ci-dessus on ne teste pas vraiment que les infos y sont encore (puisque pas de 2e boucle) mais c'est garanti

ptit conseil pour tes prochaines questions : teste les réponses qu'on te donne, çà t'évitera de reste bloqué 2 jours sur ces ptits soucis
Messages postés
64
Date d'inscription
mardi 5 septembre 2006
Statut
Membre
Dernière intervention
27 septembre 2007

en fait ta solution marche parfaitement jusqu'a ce que j'essa   i de passer ce tableau en parametre il me sort cette erreur:

Seuls les types publics définis par l'utilisateur dans les modules objet publics peuvent être utilisés comme paramètres ou types renvoyés pour les procédures publiques des modules de classe ou comme champs des types publics définis par l'utilisateur

est ce que tu sait comment definir un module public comme ils le demande???
j'ai essayer de mettre le :

Public Type dimentionnel
    champ  As String
    valeur As String
End Type

dans mon fichier main dehor mais ca ne marche pas...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
çà veut dire quoi "çà marche pas"
un message d'erreur? qqc?

copie la déclaration public dans un module standart, çà marchera
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
209
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 juillet 2009

Bonjour
je suis désolée. le problème doit venir d'autre chose parce que je viens de réessayer et cela fonctionne...