Redimensionnement de tableau [Résolu]

moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 17 sept. 2007 à 10:58 - Dernière réponse : chaudier37 209 Messages postés jeudi 5 août 2004Date d'inscription 15 juillet 2009 Dernière intervention
- 19 sept. 2007 à 23:16
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???
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 19 sept. 2007 à 12:02
3
Merci
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

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de PCPT
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 17 sept. 2007 à 11:13
0
Merci
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
Commenter la réponse de PCPT
moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 17 sept. 2007 à 12:07
0
Merci
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...
Commenter la réponse de moudz84
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 17 sept. 2007 à 12:25
0
Merci
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
Commenter la réponse de PCPT
chaudier37 209 Messages postés jeudi 5 août 2004Date d'inscription 15 juillet 2009 Dernière intervention - 18 sept. 2007 à 22:55
0
Merci
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
Commenter la réponse de chaudier37
moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 19 sept. 2007 à 11:36
0
Merci
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)
Commenter la réponse de moudz84
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 19 sept. 2007 à 11:50
0
Merci
C'est le code avec le Preserve qu'il faudrait voir...

MPi
Commenter la réponse de cs_MPi
moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 19 sept. 2007 à 11:52
0
Merci
mais ça ne marche pas avec les tableau dimentionnel, il m'affiche une erreur....
Commenter la réponse de moudz84
moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 19 sept. 2007 à 12:13
0
Merci
maintenant j'ai tout tester et tout marche parfaitement, merci sans toi je serai dans la ...
Commenter la réponse de moudz84
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 19 sept. 2007 à 12:40
0
Merci
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
Commenter la réponse de PCPT
moudz84 64 Messages postés mardi 5 septembre 2006Date d'inscription 27 septembre 2007 Dernière intervention - 19 sept. 2007 à 13:31
0
Merci
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...
Commenter la réponse de moudz84
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 19 sept. 2007 à 22:56
0
Merci
çà 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
Commenter la réponse de PCPT
chaudier37 209 Messages postés jeudi 5 août 2004Date d'inscription 15 juillet 2009 Dernière intervention - 19 sept. 2007 à 23:16
0
Merci
Bonjour
je suis désolée. le problème doit venir d'autre chose parce que je viens de réessayer et cela fonctionne...
Commenter la réponse de chaudier37

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.