Forum des développeurs  

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é.
Précédent   Forum des développeurs > Hardware, Systèmes et 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.

Réponse
 
Outils de la discussion
Vieux 22/02/2008, 17h15   #1 (permalink)
Membre régulier
 
Date d'inscription: novembre 2005
Messages: 112
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 :
 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 :
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
Vieux 22/02/2008, 18h13   #2 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 2 955
Par défaut

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
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/02/2008, 09h57   #3 (permalink)
Membre régulier
 
Date d'inscription: novembre 2005
Messages: 112
Par défaut

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
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide