sail Posté(e) le 17 avril 2007 Posté(e) le 17 avril 2007 Bonjour à tous voila mon probléme : Je liste des blocs avec attributs et je voudrais récuperer le chiffre le plus grand . Dans ma routine je fait défiler tous les nombres sans savoir comment sélectionner le plus élevé . voici mon programme Public Function NUMEROBORNE() Dim objJeuSel As AcadSelectionSet Dim CodeGroup(0 To 1) As Integer Dim ValGroup(0 To 1) As Variant Dim PT1(0 To 2) As Double Dim PT2(0 To 2) As Double Dim j As Integer Dim Entity As AcadEntity Dim BlocRef As AcadBlockReference Dim Attributes As Variant Dim S As Variant PT1(0) = 50: PT1(1) = 100: PT1(0) = 0 PT2(0) = 405: PT2(1) = 145: PT2(0) = 0 Set objJeuSel = ThisDrawing.SelectionSets.Add("Jeu1") objJeuSel.Select acSelectionSetWindow, PT1, PT2 CodeGroup(0) = 0 ValGroup(0) = "INSERT" CodeGroup(1) = 2 ValGroup(1) = "248UNI,249UNI,250UNI,251UNI,252UNI,253UNI,254UNI,255UNI,256UNI" objJeuSel.Select acSelectionSetAll, , , CodeGroup, ValGroup For Each Entity In objJeuSel ' Si il a des attributs If Entity.HasAttributes Then ' On les récupére Attributes = Entity.GetAttributes ' On parcourt le tableau For j = LBound(Attributes) To UBound(Attributes) If Attributes(j).TagString = "B" Then S = Attributes(j).textString MsgBox S End If Next j End If Next objJeuSel.DeleteEnd Function Si quelqu'un a une solution , merci d'avance
punky0147 Posté(e) le 7 mai 2007 Posté(e) le 7 mai 2007 Si j'ai bien compris ceque tu veux faire, tu as deux solutions :soit tu stoskes tout tes attributs dans un array et ensuite, tu recherches le plus grand, soit tu fais ca à la volée. Pour la volée (un peu moins lourd), ca donnera quelque chose de ce style : max=0For Each Entity In objJeuSel' Si il a des attributsIf Entity.HasAttributes Then' On les récupéreAttributes = Entity.GetAttributes' On parcourt le tableauFor j = LBound(Attributes) To UBound(Attributes) If Attributes(j).TagString = "B" Then if max max=Attributes(j).textString end ifEnd IfNext jEnd IfNext msgbox "Le maximum est : "+cstr(max) c'est bon ? sinon, expliques un peu plus clairement ce que tu veux faire
sail Posté(e) le 8 mai 2007 Auteur Posté(e) le 8 mai 2007 merci à punky0147 de m'avoir repondu mais cela ne fonctionne pas . En fait j'ai des blocs avec plusieurs attributs (tag.string : "B").Une fois que j'ai selectionné tous mes blocs selon le filtre ,je récupére toutes les valeurs (text.string) pour garder la plus grande .Peut-étre qu'avec un array cela fonctionne .(je n'ai pas toujours pas compris à quoi sert et comment fonctionnne ce fameux array)nota : Dans chaque bloc il y a plusieurs attributs (tag.string : "B"). J'espére avoir été plus clair dans mon explication .Maintenant je vais tester la fonction "tri" A+ Sail
punky0147 Posté(e) le 8 mai 2007 Posté(e) le 8 mai 2007 je voudrais etre sur d'avoir bien compris avant de balancer une solution :tu veux pour chaque bloc le maximum dans les attributs "B" ? Tu veux les afficher ou les stocker ? ou les deux ?
sail Posté(e) le 8 mai 2007 Auteur Posté(e) le 8 mai 2007 Je vais te donner un exemple ce sera plus explicite .Mon bloc 248UNI est inceré X fois dans mon dessin en l'occurence il est incere 3 fois dans cet exemple.Il comporte plusieurs attributs . Ex : bloc n°1 248UNI(valeur de l'attribut n° 1: 10) (valeur de l'attribut n° 2: 11) (valeur de l'attribut n° 3: 15) bloc n°2 248UNI(valeur de l'attribut n° 1: 5) (valeur de l'attribut n° 2: 8) (valeur de l'attribut n° 3: 25) bloc n°3 248UNI(valeur de l'attribut n° 1: 1) (valeur de l'attribut n° 2: 12) (valeur de l'attribut n° 3: 13) Dans ce cas la , en listant tous les attributs des blocs 248UNI , je veux afficher la valeur 25. En faite cela est une petite partie de mon prog et cette fameuse valeur conditionne la suite de ma routine . Merci d'avance PUNKY 0147 Sail
punky0147 Posté(e) le 8 mai 2007 Posté(e) le 8 mai 2007 et tu est sure que le bout de prog que je t'ai donné ne marche pas ? j'ai fait un test à l'arrache sur un fichier que j'ai créé avec des blocs ayant plusieurs attributs et des valeurs dans les différents attributs et ca fonctionne. Si tu as msn : remy_01_69@hotmail.comvoilou, tiens moi au courant, je ne comprend pas pourquoi le code que j'ai donné précédemment ne marche pas.
sail Posté(e) le 8 mai 2007 Auteur Posté(e) le 8 mai 2007 Je n'ai pas msn . Je crois que j'ai trouve la solution . En fait il me retourne bien un nombre mais celuis le plus proche de 9 . Pour le prog le 25 par exemple, il le place entre 2 et 3 .Par contre si je mets un 0 devant 1 ou 2 ....9 ,effectivement il me retiendra le 25 .Comment faire pour eviter ce probleme de 0 . merci sail
punky0147 Posté(e) le 9 mai 2007 Posté(e) le 9 mai 2007 j'ai des grammes là, mais je dirais que ca vient du fait que quand il compare le max et le texstring, il compare des chaines de caractères, et donc, il voit ca comme l'ordre alphabétique. Donc, pour éviter ca, dans le 'if max Voilou, en espérant que cette fois ci ca marhce, tiens moi au courant. bye
sail Posté(e) le 9 mai 2007 Auteur Posté(e) le 9 mai 2007 salut punky0149 Avec cint cela ne marche pas , en revenche avec cdbl cela fonctionne bien merci pour tout a+ sail
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant