TOUT SUR LES TABLEAUX DYNAMIQUES

couriousous - 6 nov. 2001 à 18:45
nowhere_man Messages postés 5 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 mai 2020 - 19 juil. 2012 à 09:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/2104-tout-sur-les-tableaux-dynamiques

nowhere_man Messages postés 5 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 mai 2020
19 juil. 2012 à 09:42
Super simple et utile, merci.
zakariaz35 Messages postés 9 Date d'inscription jeudi 29 novembre 2012 Statut Membre Dernière intervention 27 avril 2013
15 juil. 2012 à 00:38
voila un exemple qui marche a vous de le tester

http://www.youtube.com/watch?v=XGs8gsrbF78
patatedu65 Messages postés 12 Date d'inscription mardi 27 janvier 2004 Statut Membre Dernière intervention 21 février 2008
30 juin 2008 à 11:24
Allez j'ai trouvé va ;) pas pensé à regarder la MSDN

C'est tout con :

Dim unNombre As Integer
Dim monTableau() As String
Redim monTableau(unNombre)

Vraiment hein...je pause jamais de question sur ces forums de prog mais là j'ai fait mon guignol ^^
++ les gens
patatedu65 Messages postés 12 Date d'inscription mardi 27 janvier 2004 Statut Membre Dernière intervention 21 février 2008
30 juin 2008 à 11:12
Salut à tous,
tuto intéressant j'avoue :)
Par contre je découvre le VB, langage pas très compliqué mais quand on connait pas ça s'invente pas.
En fait j'aimerais dim et redim mes tableaux grâce à une variable et non pas avec une constante. D'après ce que je comprend avec le débugeur on utilise que des constantes en VB. Donc y a t-il moyen de "caster" ma variable pour qu'elle passe pour une constante quand je la passe en paramètre pour dim mon tableau?
Je trouve pas super que l'on ne puisse pas utiliser de variable dans ce langage, et ça me parait bizarre doit bien y avoir une solus...
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
10 févr. 2008 à 01:30
dans ce cas:

Dim parent je pense
j'ai un prog qui fait des tgableauxc de tableaux et trop d'alcool dabs le sang pour le chercher là, mis si besoin demande, je te retrouverais ca
moghrikadda Messages postés 7 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 14 février 2008
8 févr. 2008 à 18:14
compliqué
David78390 Messages postés 197 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 10 juillet 2011
17 oct. 2007 à 19:21
Merci mabrouklepoux,

cependant en faisant
Dim parent() As Variant
je ne peux pas lui mettre un tableau enfant dans le parent.
Je ne peux que lui mettre une variable.

Merci quand meme ;)
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
17 oct. 2007 à 14:18
David, je pense que tu n'arrive pas à redimensionner car tu définis une taille dans
Dim parent(200) As Variant

fais plutot
Dim parent() As Variant

et dérrière, tu fais tes redim preserve ou redim tout court
et là tu pourras redimmensionner à loisir (uniquement la dernière dimension cependant)
à ta dispo si pas clair
David78390 Messages postés 197 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 10 juillet 2011
22 juin 2007 à 18:42
Desol a tous, grosse boulette au dessus: il faut lire Loop Until i > 200 et non 10 !!!!!!!!!!!!!!
David78390 Messages postés 197 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 10 juillet 2011
21 juin 2007 à 21:03
je passe ta note a 10 si tu arrive a me trouver la solution lol ;)
David78390 Messages postés 197 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 10 juillet 2011
21 juin 2007 à 21:00
Superbe ce post,
Et moi qui cherhcais a faire des tableau imbriqué ????
Tu m'as donné la solution quasi finale !!!!!!

Voila le code :

Dim i As Integer
Dim parent(200) As Variant
Dim enfant(200) As Variant


i = 0
Do
parent(i) = enfant
i = i + 1
Loop Until i > 10

parent(0)(0) = "2" 'la 1er valeur du 1er enfant est mise a 2
parent(1)(0) = "3" 'la 1er valeur du 2eme enfant est mise a 3
'ect, ect .....

i = UBound(parent) 'renvoie 200

'si quelqu'un trouve une solution pour redimentionner les tableau parent et enfant (une foi rempli) je suis prenneur. Car pour le moment ils font 2000 chacun
filloutube Messages postés 1 Date d'inscription dimanche 24 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
11 nov. 2006 à 17:46
Tres bon code ... seulement impossible de decaler les cases sur mon code.

For i = 1 To Len(phrase)
If tabl(i) < 65 Or tabl(i) > 90 Then
If i < Len(phrase) Then
tabl(i) = tabl(i + 1)
i = i + 1
Else
tabl(i) = tabl(i - 1)
i = i - 1
End If

End If
Next

un ptit coups de main serait le bien venu !
RichardkIII Messages postés 2 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 3 novembre 2006
3 nov. 2006 à 10:13
Bonjour, concernant le tutoriel, c'est toujours sympa mais je connaissais déjà. Mon souci se place plus loin et là je ne trouve pas...: comment gérer un tableau dynamique à 2 dimensions?
J'explique : j'ai un fichier texte du genre INI dans lequel on a des lignes de section, et entre deux des lignes de valeurs, exemple:
[AAA]
valC=123
valE=zzz
[BBB]
valD=6789
valF=zsz
[CCG]
valE=355
valS=777
Bon ça suffit! J'ai besoin de récupérer les valeurs de valE et la section, c'est à dire
[AAA] valE=zzz à mettre dans un tableau en (0,0) et (0,1)
[CCG] valE=355 à mettre dans un tableau en (1,0) et (1,1)
Un petit vbscript lit le fichier facilement. Mais je veux mettre ça au fur et à mesure dans un tableau, il peut y avoir une section, pas du tout ou 20 sections (ou plus) contenant valE.
Donc on fait un Dim Array() et si on fait un Redim, on lui impose des valeurs, non? D'où, il n'est plus dynamique et on ne peut réduire ensuite que la 2ème dimension,ça ne m'arrange pas... je sais qu'elle fait 2 ; si on ne fait pas de Redim, on ne peut écrire qu'une dimension et ça ne m'arrange pas non plus...Je refuse de déclarer un tableau de 256 par 256, on a sa fierté..

Quelqu'un peut-il éclaircir ce point?

Il y a peut-être une réponse simple, mais merci aux spécialistes des casse-têtes.
FredCompaq Messages postés 1 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 9 août 2006
9 août 2006 à 16:34
Bonjour,

Ces code est très intéressant.
Personnellement, je ne connaissais pas les fonctions LBound et UBound.
J'ai toujours réussi à m'en passer.

Par contre, je suis a la recherche d'un code permettant de sauvegarder un tableau dan un fichier texte. (tableau contenant une quantité de donnée très important qui génère une erreur lors de la sauvegarde)
Puis d'ouvrir ce fichier texte et de récupérer les donnée du tableau dans mon programme.

Voici le code que j'utilise pour sauvegarder le tableau et le relire.
Malheureusement. Ce code génère une erreur de compilation "Variable requise, impossible de l'affecter à cette expression.".
Ligne en cause:
Open g_strNameFileTabHtlInfoHtlReseau For Random As #1 Len =Len(g_TabInfoHotelReseau)
Si je supprime " Len =Len(g_TabInfoHotelReseau)". Cela fonctionne pour les tableau qui contient peux de donnée. Mas avec celui-ci. Marche pas. Trop de données.
Je suis obligé de mettre Len = 520



Code générant l'erreur
'--------------------------------------
Option Explicit
Type typTabInfoHotelReseau
strEtbName As String
strStatus As String
strHotixEtb As String
strNetworkName As String
strSubnetAddress As String
strSubnetmask As String
strIpLanIsdn As String
strIpLanLs As String
strIpLanXDsl As String
strNameRoureurAdsl As String
strMainConnexion As String
strHitcName As String
strTip As String
strPms As String
strPhone As String
End Type

Global g_TabInfoHotelReseau() As typTabInfoHotelReseau
Global g_strDateReportTechinventInfoHtlReseauInTab as String 'Chaine de caractère indiquant la date du rapport
Global strNameFileTabHtlInfoHtlReseau as String 'Nom du fichier texte

'----------------------------------------------------
Public Sub subSaveTablLstInfoHtlReseau()
Dim RecordNumber ' Déclare les variables.
Dim lngFile As Long
Dim dblLen As Double

If Dir(g_strNameFileTabHtlInfoHtlReseau) = "" Then
'ne rien faire
Else
Kill (g_strNameFileTabHtlInfoHtlReseau) 'supp fichier
End If
dblLen = Len(g_TabInfoHotelReseau(1))

' Ouvre le fichier en accès aléatoire et sauvegarde les data dans le fichier.
Open g_strNameFileTabHtlInfoHtlReseau For Random As #1 Len =Len(g_TabInfoHotelReseau)
' Effectue la boucle X fois.
For RecordNumber = 1 To g_intNbHtlInFileInfoHtlReseau
' Écrit l'enregistrement dans le fichier.
Put #1, RecordNumber, g_TabInfoHotelReseau(RecordNumber)
Next RecordNumber
Close #1 ' Ferme le fichier.

'Ajoute un commentaire à la fin du fichier
Open g_strNameFileTabHtlInfoHtlReseau For Binary As #1
lngFile = LOF(1) + 1 'affecte à "lngFile" la longeur du fichier +1 pour ecrire
'après les Data
Seek #1, lngFile
Put #1, , g_strDateReportTechinventInfoHtlReseauInTab ' Date du report techinvent
Close #1

End Sub

'----------------------------------------------------

Public Sub subLoadTablLstInfoHtlReseau()

' Dim MyRecord As Record, Position ' Déclare les variables.
' Ouvre l'exemple de fichier en accès aléatoire.


Dim RecordNumber ' Déclare les variables.
Dim lngFile As Long

Dim intCpt, intValRetour As Integer
Dim strTmp As String

intCpt = 1


Erase g_TabInfoHotelReseau
g_strDateReportTechinventInfoHtlReseauInTab = ""



Open g_strNameFileTabHtlInfoHtlReseau For Random As #1 Len = Len(TabInfoHotelReseau)
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
ReDim Preserve g_TabInfoHotelReseau(1 To intCpt)

On Error GoTo ErrorFileTabLstInfoHtlReseau
Get #1, intCpt, g_TabInfoHotelReseau(intCpt) ' Lit l'enregistrement suivant.
intCpt = intCpt + 1

Loop

Close #1 ' Ferme le fichier.


'Lit La date inscrit à la fin fu fichier
Open g_strNameFileTabHtlInfoHtlReseau For Binary As #1 'Len = Len(MyRecord)

Get #1, LOF(1) - 9, strTmp ' "Positionne" la lecture 10 caracteres avant
' la fin du fichier
g_strDateReportTechinventInfoHtlReseauInTab = Input(10, #1) 'g_strDateReportTechinventInTab + strTmp
' frmListeHotelDop.lblDateFileTabReportTechinvent.Caption = g_strDateReportTechinventInTab

Close #1 ' Ferme le fichier.

g_intNbHotelFrance = intCpt - 1

On Error GoTo 0



Exit Sub

ErrorFileTabLstInfoHtlReseau:
Close #1 ' Ferme le fichier.
Erase g_TabInfoHotelReseau
intValRetour = MsgBox("Longueur d'enregistrement incorrect (fichier corompu)." & Chr(13) & "Le fichier " _
& g_strNameFileTabHtlInfoHtlReseau & Chr(13) & " va être supprimé automatiquement." _
, vbCritical, "Erreur d'execution 59")
Kill (g_strNameFileTabHtlInfoHtlReseau)

End Sub
poldere Messages postés 69 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2007
12 juil. 2006 à 23:47
Bonjour, j'aurais besoin d'un petit complément.
Je veux faire un robot qui se déplace dans un appartement inconnu en détectant les obstacles. Si j'utilise un tableau pour mémoriser les pièces ça pourrait donner quelque chose comme ça ?

Dim appart(x,y)As Long
Appart(3,1) = "1" ' détection obstacle
Appart(4,1) = "0" ' Pas d'obstacle
Delete Appart, (4,2) 'On supprime l'obstacle
Appart(4,2) = "0" ' On remplace par une case libre la chaise est déplacé

Y a t il des limite pour les tableaux ? L'appartement fait 10 m X 6 m ça risque de faire beaucoup de données avec 1 détection tout les 10 cm ( environ ). Après il faut sauvegarder tout le tableau aussi.
Merci d'avance
gon_ak Messages postés 197 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 17 novembre 2006
16 mai 2006 à 17:29
En effet, rien à dire. De toute façon moi et les collections....
gon_ak Messages postés 197 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 17 novembre 2006
16 mai 2006 à 17:28
En effet, rien à dire. De toute façon moi et les collections....
redog26 Messages postés 4 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 28 juin 2010
9 févr. 2006 à 12:29
clair et précis ,Merci...
lp_irovetz Messages postés 1 Date d'inscription jeudi 24 novembre 2005 Statut Membre Dernière intervention 7 janvier 2006
7 janv. 2006 à 09:38
Bref, clair, sympa. Merci beaucoup
Balbrolock Messages postés 6 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 26 mai 2005
13 mai 2005 à 09:47
Pile poile ce qu'il me manquait

merci bien
@++
cs_ATitus Messages postés 32 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 9 février 2010
13 févr. 2005 à 19:15
Plop

Merci Xentor, je tatonen sur les Tableaux dynamiques et ton tutorial m'aide beaucoup .

@ +
bibilafrayeur Messages postés 59 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 26 juillet 2007
18 nov. 2004 à 10:42
Et comment qu'on fait quand on ne connais pas à l'avance la taille d'un tableau ? lol
bizmoute Messages postés 29 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 novembre 2008
4 nov. 2004 à 01:34
Justement ce que je cherchais...
Génial!


... Et merci!
bizmoute Messages postés 29 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 21 novembre 2008
4 nov. 2004 à 01:34
Justement ce que je cherchais...
Génial!


... Et merci!
playmo420 Messages postés 50 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 6 juin 2006
20 mai 2004 à 16:16
idem ;)
cs_OphidiaN Messages postés 235 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 9 novembre 2007
16 juin 2003 à 18:45
lol Xentor tu vas rire mais CE BOUT DE CODE VIENT DE ME SAUVER LA VIE @++
Qu'est ce que je pourrais mettre dans le zip ? Mon tutor en txt ?
super pour le tuto...
et pour les collections je dirais k'elles sont utiles surtout pour des tableaux d'objets... voire meme indispensables !

bonne prog !
wai, mais...ca manque de zip!
;-)
Je reste fidèle à mes bons vieux tableaux dynamiques... :)
Larwin: C'est vrai les collections sont plus facile a utilisé mais c'est faux, ce n'est pas plus rapide. Une collection utilise un type variant. Autrement dis, un tableau dynamique de integer, ou pire encore de byte prend bcp moins de place qu'un type variant de 16 octets par valeur.
ouais c sympa mais y'a quand meme un truc vachement plus puissant et plus facile a utiliser...
Les collections, ca fait tout pareil, en mieux, en plus rapide et plus puissant :)
ceci dit c bien expliqué quand meme :)
Merci !
bien vu... bien expliqué...
Rejoignez-nous