moudz84
Messages postés64Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention27 septembre 2007
-
17 sept. 2007 à 10:58
chaudier37
Messages postés209Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention15 juillet 2009
-
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é
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 17 sept. 2007 à 11:13
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
moudz84
Messages postés64Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention27 septembre 2007 17 sept. 2007 à 12:07
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...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 17 sept. 2007 à 12:25
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaudier37
Messages postés209Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention15 juillet 2009 18 sept. 2007 à 22:55
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
moudz84
Messages postés64Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention27 septembre 2007 19 sept. 2007 à 11:36
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)
moudz84
Messages postés64Date d'inscriptionmardi 5 septembre 2006StatutMembreDernière intervention27 septembre 2007 19 sept. 2007 à 13:31
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...
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 19 sept. 2007 à 22:56
çà 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