![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre régulier
![]() Date d'inscription: novembre 2005
Messages: 112
|
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 :
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 Code :
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 |
|
|
|
|
|
#2 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 955
|
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 :
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 |
|
|
|
![]() |
![]() |
||
Créer un tableau en mémoire, puis l'afficher
|
||
| Outils de la discussion | |
|
|