begin process at 2010 02 10 15:38:12
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > TOUT SUR LES TABLEAUX DYNAMIQUES

TOUT SUR LES TABLEAUX DYNAMIQUES


 Information sur la source

Note :
8,06 / 10 - par 16 personnes
8,06 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Classé sous :tableau, dynamique, démonstration, tutorial, vb6 Niveau :Initié Date de création :06/11/2001 Vu :32 929

Auteur : Xentor

Ecrire un message privé
Site perso
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Ceci est mon premier tutorial, j'espère qu'il vous sera utile...

Les tableaux dynamiques sont appelés ainsi car ils peuvent changer de taille : cela peut être utile si l'on veut établir par exemple une petite base de données, en tout les cas une liste succeptible de changer de dimension(s). Le but de ce tuturial est de montrer les quelques fonctions qui ne sont pas présentées dans l'aide de VBasic.

Pour créer un tableau dynamique, il suffit de lui affecter une taille vide :
Dim liste() as Integer

Ensuite, on peut le redimensionner à l'aide de la fonction redim, en indiquant la nouvelle taille entre parenthèses :
Redim liste(5)

L'inconvénient... C'est que toutes les données du tableau sont effacées ! Il faut donc y rajouter le mot-clef Preserve :
Redim preserve liste(5)

Vous pouvez bien sûr également créer des tableaux dynamiques à "taille personnalisée" :
Redim liste(5 to 25)

Ceci dit, il est impossible de redimensionner un tableau à taille "normale" pour lui donner une taille "personnalisée" en utilisant preserve ! Par exemple, ce script provoquera une erreur:
Dim liste() as Integer
Redim liste(5)
Redim preserve liste(1 to 5)

...Mais celui-ci, non !
Dim liste() as Integer
Redim liste(5)
Redim liste(1 to 5)

De même, il est possible de changer le nombre de dimensions d'un tableau dynamique... Mais sans utiliser preserve ! Par exemple, ce script est tout à fait valide :
Dim liste() As Integer
ReDim liste(2, 5)
ReDim liste(1, 3, 4)

Maintenant que nous avons vu les bases, voici quelques petits trucs...

J'ai longtemps redimensionné mes tableaux en gardant leurs tailles dans des variables séparées... Ce qui ne manquait pas de causer nombre d'erreurs !  :)  Heureusement, il existe l'instruction UBound(), qui retourne la taille maximale du tableau...
Exemple :
Dim liste() as Integer
ReDim liste(25) as Integer
MsgBox UBound(liste)            'affiche 25 !

Il existe également son inverse : LBound(), qui retourne la taille minimale du tableau, dans le cas d'un tableau "personnalisé".
Exemple :
Dim liste() as Integer
ReDim liste(6 to 82)
For i = LBound(liste) to UBound(liste)
MsgBox liste(i)                'affiche chaque valeur du tableau, soit de 6 à 82
Next i

Pour finir, voici une petite fonction sympathique :

Public Sub Delete(ByRef tableau As Variant, element As Variant)
Dim i As Integer
For i = element To UBound(tableau) - 1
tableau(i) = tableau(i + 1)
Next
ReDim Preserve tableau(UBound(tableau) - 1)
End Sub

Elle vous permettra de supprimer n'importe quel élément d'un tableau dynamique et de décaler les autres éléments, de façon à ce qu'il n'ait pas de "trou".... Voici un exemple d'utilisation :
Dim liste() as String
Redim liste(4)
liste(0) = "je suis bon !"
liste(1) = "je suis bon !"
liste(2) = "je suis mauvais !"
liste(3) = "je suis bon !"
liste(4) = "je suis bon !"
Delete liste, 2   'On supprime l'élément 2

Le tableau liste ne comprend donc plus que des "je suis bon !" et est redimensionné à 3...

Bref, vous l'avez compris : les tableaux dynamiques sont des outils vraiment puissants qui peuvent beaucoup faciliter la programmation.




 Sources du même auteur

Source avec Zip Source avec une capture PANIC PUZZLE : PUZZLE POUSSE-POUSSE
Source avec Zip Source avec une capture CONVERTISSEUR VBASIC -> C++ (INTERFACES)
Source avec Zip XENTOR CONTROLE VOS MENUS :)
MANIP' WINDOWS
Source avec Zip Source avec une capture TRANSFORMATEUR FORMS -> PAGES WEB

 Sources de la même categorie

Source avec Zip Source avec une capture APPLICATION WEB POUR LA GESTION D'UNE AGENCE DE LOCATION DE ... par rachid1449
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS par Renfield
Source avec Zip Source .NET (Dotnet) DLL POUR K8055 (VM110) UTILISATION SIMPLIFIÉE DE CETTE CARTE par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION MULTICARTES K8055 (CODE TUTO) par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) SPAM ANTI SPAM par bouv

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE PENDU (COUIC 1 DE +) par tresorsdevie
Source avec Zip GESTION DYNAMIQUE DES ITEMS - BIEN PLUS INTERESSANT QUE LES ... par asimengo
VISUAL BASIC 6 ET CRYSTAL REPORT 8.5 par capricorne83
Source .NET (Dotnet) COMPRESSION par amine_hassini
Source avec Zip Source avec une capture TRADUCTEUR VB6.VBP EN VB5.VBP par joro

Commentaires et avis

Commentaire de OphidiaN le 16/06/2003 18:45:40

lol Xentor tu vas rire mais CE BOUT DE CODE VIENT DE ME SAUVER LA VIE @++

Commentaire de playmo420 le 20/05/2004 16:16:30

idem ;)

Commentaire de bizmoute le 04/11/2004 01:34:46

Justement ce que je cherchais...
Génial!


... Et merci!

Commentaire de bizmoute le 04/11/2004 01:34:50

Justement ce que je cherchais...
Génial!


... Et merci!

Commentaire de bibilafrayeur le 18/11/2004 10:42:17

Et comment qu'on fait quand on ne connais pas à l'avance la taille d'un tableau ? lol

Commentaire de ATitus le 13/02/2005 19:15:34

Plop

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

@ +

Commentaire de Balbrolock le 13/05/2005 09:47:43

Pile poile ce qu'il me manquait

merci bien
@++

Commentaire de lp_irovetz le 07/01/2006 09:38:58

Bref, clair, sympa. Merci beaucoup

Commentaire de redog26 le 09/02/2006 12:29:44

clair et précis ,Merci...

Commentaire de gon_ak le 16/05/2006 17:28:26

En effet, rien à dire. De toute façon moi et les collections....

Commentaire de gon_ak le 16/05/2006 17:29:58

En effet, rien à dire. De toute façon moi et les collections....

Commentaire de poldere le 12/07/2006 23:47:35

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

Commentaire de FredCompaq le 09/08/2006 16:34:18

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

Commentaire de RichardKIII le 03/11/2006 10:13:55

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.

Commentaire de filloutube le 11/11/2006 17:46:51

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 !

Commentaire de David78390 le 21/06/2007 21:00:24

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

Commentaire de David78390 le 21/06/2007 21:03:42

je passe ta note a 10 si tu arrive a me trouver la solution lol ;)

Commentaire de David78390 le 22/06/2007 18:42:29

Desol a tous, grosse boulette au dessus: il faut lire Loop Until i > 200      et non 10   !!!!!!!!!!!!!!

Commentaire de mabrouklepoux le 17/10/2007 14:18:03

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

Commentaire de David78390 le 17/10/2007 19:21:31

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   ;)

Commentaire de moghrikadda le 08/02/2008 18:14:09

compliqué

Commentaire de mabrouklepoux le 10/02/2008 01:30:17

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

Commentaire de patatedu65 le 30/06/2008 11:12:41

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...

Commentaire de patatedu65 le 30/06/2008 11:24:33

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

URGENT Tableau croisé dynamique en VB6 [ par Damdamdeo ] Salut,Je me prends la tête depuis un bon moment sur un tableau croisé dynamique que je fais à l'aide d'un MSFlexGrid et 16 ComboBox.Je n'ai pas de que Tableau croisé dynamique en VB6: conseils [ par Damdamdeo ] Salut,Je travaille sur un tableau croisé dynamique en VB6.G créé un MSFlexGrid avec 13 colonnes et 13 listes déroulantes (ComboBox) au-dessus.Le tout VB6 Tableau Croisé Dynamique [ par ThePhoenix ] Bonjour, Je d&#233;velloppe une application sous VB6 qui fait des traitements dans un fichier Excel. J'aimerai &#224; un moment, mettre &#224; jour u VB6 sélection sur critère [ par tari ] Bjr &#224; ts !!Voila j'ai une application en VB6 avec une connexion &#224; unebase de donn&#233;es Access (adodc)Je dois affich&#233; un tableau selo Tableau croisé dynamique en VB via macro excel [ par yanndan ] Bonjour tout le monde.&nbsp;Je n'arrive pas bien &#224; faire ce que je dois faire. Je pense que le mieux est de faire un Tableau crois&#233; dynamiqu Trie d'un tableau dynamique avec type? [ par pcpunch ] Slt pour les besoin d'un prog je dois trie un tableau dynamique comptenant un type :Private Type V D As String Deb As String Fin As String mise a jour tableau croisé dynamique [ par prezz ] bonjour a tous, je souhaiterai mettre a jour un tableau croisé dynmique inséré dans un formulaire. J'ai essayé les refresh recalc et repaint mais ca n chargement/déchargement dynamique de DLL sous VB6 [ par jm2 ] Dans une appli VB6, j'utilise 2 DLL différentes suivant une condition que je ne connais qu'après démarrage de l'appli. Comment charger ou décharger dy récursivité dans les tableau dynamique (trèsbalèse et très Urgent) [ par jordinette ] Bonjourdifficile probl&#232;me que d'imbriquer des tableau dynamique. le premier tablodyn engloban les 5autres.je rempli le premier dans un premier te Tableau dynamique [ par Seth77 ] Salut Quand on declare un tableau comme cela : dim tab() as string comment savoir si il y a qq chose dans le tableau ?Herve


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales