Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2008, 17h15   #1
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 114
Points : 29
Points : 29
Par défaut Créer un tableau en mémoire, puis l'afficher

Bonjour

Mon problème concerne VBA sous AUTOCAD, mais c'est un truc assez classique en VB ou VBA : créer un tableau en mémoire, pour mémoriser des données. Dans mon cas, on parcourt un jeu de données (ici une liste d'attributs de blocs...), avec un test à la volée pour savoir si la valeur est présente dans deux tableaux "lettre" et "champ"), qui représentent les lignes et les colonnes de mon tableau final, ouf !!!
J'ai fait une procédure ensuite pour afficher ce tableau pour tester si çà marche.
Le problème c'est que çà ne marche pas !! Je ne sais pas d'où çà vient, en tout cas rien ne s'affiche !!

Mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 Sub ExtraireCartouche()
 
Dim cartouche As AcadBlockReference
Dim obj As AcadEntity
Dim dbplan As Object
Dim plan As Recordset
Dim sset As Object
Dim attributeObj As AcadAttribute
Dim varAttributes As Variant
Dim strAttributes, projet As String
Dim proy As Boolean
Dim req As String
Dim i, ligne, j, k, colonne As Integer
Dim indice(0 To 4, 0 To 5)
Dim lettre, champ As Variant
 
'Création de ma liste de valeur
Set sset = ThisDrawing.SelectionSets.Add("SS3")
 
' Prompt the user to select objects
sset.SelectOnScreen
For Each obj In sset
Set cartouche = obj
Next
varAttributes = cartouche.GetAttributes
lettre = Array("A", "B", "C", "D", "E", "F")
champ = Array("fecha", "puest", "autor", "contr")
proy = False
plan.AddNew
For i = LBound(varAttributes) To UBound(varAttributes)
MsgBox "nom de l'attribut : " & varAttributes(i).TagString
'remplissage du tableau "indice" avec les valeurs des champs d'indice
'en cherchant à quelle coordonnée (ligne, colonne)
'ils doivent se trouver dans le tableau
    For j = 0 To 5
    If Right(varAttributes(i).TagString, 1) = lettre(j) Then
        'si l'étiquette de l'attribut est de longueur 1,
        'alors on est à la première ligne du tableau "indice",
        'qui contient la valeur de l'indice
        MsgBox "boucle : lettre " & Right(varAttributes(i).TagString, 1) & " J = " & j
        If Len(varAttributes(i).TagString) = 1 Then
            ligne = 0
            colonne = j
            MsgBox "indice " & lettre(j)
        'sinon on cherche dans le tableau champ la valeur de la colonne
        Else
            For k = 0 To 3
                If Left(varAttributes(i).TagString, 5) = champ(k) Then
                ligne = k + 1
                colonne = j
                End If
            Next
            k = 0
        End If
    End If
    Next
    j = 0
If colonne <> "" And ligne <> "" Then
    indice(ligne, colonne) = varAttributes(i).TextString
    MsgBox ("placement de " & varAttributes(i).TextString & " à la ligne " & ligne & " et à la colonne " & colonne)
End If
 
affichtab (indice)
ThisDrawing.SelectionSets("SS3").Delete
 
End Sub
Ma procédure affichtab() :

Code :
1
2
3
4
5
6
7
8
9
10
11
Sub affichtab(bat As Variant)
 
Dim text As String
For i = 0 To 4
    For j = 0 To 5
    text = text & "|" & " " & indice(i, j)
    Next
    text = text & vbCrLf
Next
MsgBox text
End Sub
Merci beaucoup d'avance
patbeautifulday1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2008, 18h13   #2
Inactif
 
Inscription : juillet 2007
Messages : 4 555
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 4 555
Points : 5 002
Points : 5 002
Bonjour,

J'espère que ceci t'aidera à comprendre :

Il te faut une textbox multiline (propriété multiligne = True) et un bouton de commande


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Command1_Click()
  'ici on crée un tableau pour essayer
  Dim letableau(3, 4) As String, I as integer, J as integer
  For i = 0 To 3
    For j = 0 To 4
      letableau(i, j) = i & "a" & j
    Next j
  Next i
  Text1.Text = ""
 
  'on affiche maintenant notre tableau d'essai
  affiche letableau
End Sub
 
Private Sub affiche(toto() As String)
 Dim glup as string, I as integer, J as integer
 For i = 0 To 3
   For j = 0 To 4
     If j = 0 Then glup = "" Else glup = vbTab
     Text1.Text = Text1.Text & glup & toto(i, j)
   Next j
   Text1.Text = Text1.Text & vbCrLf
 Next i
End Sub
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 09h57   #3
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 114
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 114
Points : 29
Points : 29
Salut

Finalement j'ai opté pour un autre algorithme, ce que je voulais faire était trop compliqué.
Merci à ucfoutu pour sa participation
patbeautifulday1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h31.


 
 
 
 
Partenaires

Hébergement Web