sail
Membres-
Compteur de contenus
25 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par sail
-
merci de t'etre penché sur le probléme méme si il n'est pas résolu . Je continu mes investigations sur le net . Merci Sail
-
bonjours à tous Comment puis-je appeler une macro en tapant une lettre au clavier ? Le meme principe que ctrl+lettre mais sans le ctrl . On ma parler du fichier PGP mais je n'y comprend pas grand chose . Merci Sail
-
OK winfield ,je suis enfin arrivé à mes fins merci a+
-
decidement je ne dois pas etre en forme en ce moment car je n'arrive pas obtenir le bon prog. J'ai suivi tes instructions mais une fois que j'ai choisi mon bloc ,je l'insere autant de fois que ma boucle tourne . Une fois que cette boucle tourne je ne peux plus intervenir dedans pour changer de bloc . Es ce que je fais une erreur de syntaxe ? je te livre mon code . Private Sub APERCUBLOC_Click() DI.Hide Dim I As Integer On Error Resume Next ' Define the valid keywords Dim keywordList As String keywordList = "1Bloc 2Bloc 3Bloc" ' Call InitializeUserInput to setup the keywords ThisDrawing.Utility.InitializeUserInput 128, keywordList ' Get the user input Dim returnPnt As Variant '---------------------------------------------------------------- 'a adapter en fonction de la boucle '---------------------------------------------------------------- For I = 0 To 5 '---------------------------------------------------------------- 'Mettre une boucle '---------------------------------------------------------------- returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point(1Bloc/2Bloc/3Bloc): ") If Err Then If StrComp(Err.Description, "La saisie utilisateur est un mot clé", 1) = 0 Then ' One of the keywords was entered Dim inputString As String Err.Clear inputString = ThisDrawing.Utility.GetInput MsgBox "You entered the keyword: " & inputString '---------------------------------------------------------------- 'Ton code pour l'insertion des blocs en fonction du mot clé par ex avec Select Case '---------------------------------------------------------------- Select Case inputString Case "1" Dim T As AcadBlockReference Dim PTI As Variant Dim Z As String PTI = ThisDrawing.Utility.GetPoint(, "point d'insertion du bloc ?") Z = "001DAI.dwg" Set T = ThisDrawing.ModelSpace.InsertBlock(PTI, "C:\DID\DAI\" & Z, 1, 1, 1, 0) Case "2" Dim T1 As AcadBlockReference Dim PTI1 As Variant Dim Z1 As String PTI1 = ThisDrawing.Utility.GetPoint(, "point d'insertion du bloc ?") Z1 = "002DAI.dwg" Set T1 = ThisDrawing.ModelSpace.InsertBlock(PTI1, "C:\DID\DAI\" & Z, 1, 1, 1, 0) Case "3" Dim T3 As AcadBlockReference Dim PTI3 As Variant Dim Z3 As String PTI3 = ThisDrawing.Utility.GetPoint(, "point d'insertion du bloc ?") Z3 = "003DAI.dwg" Set T3 = ThisDrawing.ModelSpace.InsertBlock(PTI3, "C:\DID\DAI\" & Z, 1, 1, 1, 0) End Select '------------------------------------------------------------------------------------ Else MsgBox "Error selecting the point: " & Err.Description Err.Clear End If Else ' Display point coordinates MsgBox "The WCS of the point is: " & returnPnt(0) & ", " & returnPnt(1) & ", " & returnPnt(2) End If '---------------------------------------------------------------- 'Fin de la boucle '---------------------------------------------------------------- Next I End Sub merci pour une eventuelle reponse sail
-
salut winfield malgre l'exemple je n'y arrive pas . Si tu pouvais me livrer un code clé en main se serait sympa . merci d'avance sail
-
merci winfield pour ton aide mais j'ai du mal à comprendre "InitializeUserInput" peux-tu m'ecrire un petit programme qui par exemple quand je tape "e" m'insere un bloc1 quand je tape "f" m'insere le bloc2 et quand je tape "g" m'insere le bloc3 et tant que je n'ai pas taper "entree" je continu à inserer mes blocs . je te remerie d'avance sail Un programmeur du dimanche .
-
Ce n'est pas tout à fait ca . Avec un petit exemple cela va etre plus clair Imaginons un programme qui m'insere un blocs tous les 10 cm selon x . je voudrais par exemple en tapant "e" sur le clavier au cour du deroulement du progamme que mon bloc soit insere tous 20 cm . cela est il possible merci sail
-
salut à tous Une petite question : comment puis-je faire pour appeler une routine ou intevenir dans un programme en cour d'execution en tapant sur le clavier "r" par exemple . Je sais que cela est possible en lisp . merci Sail
-
salut tous le monde Pas la peine de me repondre , j'ai trouvé la solution à l'aide de "GetBoundingBox" a+ sail
-
rebonjour Merci pour ta réponse , mais cela ne fonctionne pas . Que ma ligne coupe le bloc ou pas cela me retourne "oui" . Je vais aller plus loin dans mon explication . Dans mon dessin j'ai x blocs(bloc1) . Chaque bloc(bloc1)est relié ou pas à un autres bloc(bloc2) par une spline .Mon but est en un clic de souris de lister tous mes blocs dans une listebox (une colonne avec le nom du bloc1et une deuxieme colonne qui m'indique si se bloc1 est relié au bloc2 .). Je pense que par la methode "IntersectWith" cela est possible .Sachant que je peux avoir plus de cent blocs dans mon dessin il serait trop long de cliquer à chaque fois sur la spline . Si quelqu'un à une idée ? Merci Sail
-
Bonjour à tous Voici mon probléme : Je voudrais savoir si une ligne touche ou traverse mon bloc .J'ai créé une routine qui ne fonctionne pas . Pourquoi ? Private Sub CommandButton1_Click() Dim OBJET As AcadEntity Dim IntCodeDXF(0) As Integer Dim ValCodeDXF(0) As Variant Dim bloc As AcadBlockReference Dim line As AcadLine Dim objJeu As AcadSelectionSet DI.Hide Set objJeu = ThisDrawing.SelectionSets.Add("Jaax") IntCodeDXF(0) = 0: ValCodeDXF(0) = "INSERT" objJeu.SelectOnScreen IntCodeDXF, ValCodeDXF For Each OBJET In objJeu Set bloc = OBJET If bloc.IntersectWith(line, acExtendNone) = True Then MsgBox "oui" Else MsgBox "non" End If Next objJeu.Delete End Sub Si quelqu'un a une solution . Merci sail
-
salut punky0149 Avec cint cela ne marche pas , en revenche avec cdbl cela fonctionne bien merci pour tout a+ sail
-
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
-
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
-
Copier une selection d\'un fichier à un autre
sail a répondu à un(e) sujet de winfield dans Routines VBA
bonjour à tous Je suis aussi interessé par le sujet . J'ai reussi à copier des objets d'un fichier à l'autre par contre des qu'il s'agit de bloc cela ne fonctionne pas . Pourquoi ? Merci pour la reponse Sail -
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
-
effectivement cela marche beaucoup .J'utilise c'est bouton pour appeler des programmes vba et merci pour ton aide sail
-
J'ai oublie de vous posez une deuxiéme question . Je me suis crée une barre avec des icones auquel j'ai affecté des symboles , hors à chaque extinction d'autocad mes symboles d'icones disparaissent pour laisser place à des nuages avec un point d'interrogation . Que faut-il faire merci Sail
-
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.Delete End Function Si quelqu'un a une solution , merci d'avance
-
bonjour winfield et merci de ton aide j'ai testé cette routine et cela marche trés bien . j'ai juste une question .A un certain moment on me demande de choisir les objets et j'aurais voulu savoir à quelle ligne de code cela correspond . La méthode que tu as utilisé je ne la connais pas . Je me suis inspiré du bouquin de roger rossec . a+ ps : il y à peu de temps que pratique l'informatique et je ne savais pas qu'ecrire en majuscule etait un signe de mécontentement .
-
BONJOUR TOUT D'ABORD MERCI D'AVOIR CONSACRE UN PEU DE TEMPS A MON PROBLEME . J'AI TESTE TON CODE ET MALHEUREUSEMENT CELA NE FONCTIONNE PAS .J'AI UN MESSAGE D'ERREUR QUI M'INDIQUE "CLE INTROUVABLE" . A+
-
BONJOUR A TOUS ETANT DONNE QUE JE N'AI PAS ETE COMPRIS JE VOUS LIVRE MON CODE QUI EST INCOMPLET . JE RECUPERE LE PT INSERTION DES BLOCS SELECTIONNES MAIS JE VOUDRAIS LES TRIER EN ORDRE CROISSANT OU DECROISSANT . EFFECTIVEMENT QUAND J'EXECUTE MA ROUTINE (msgbox)LES PTS INSERTIONS DEFILENT DU DERNIER BLOC INSERE AU PREMIER . Dim objJeu As AcadSelectionSet Dim Pt1, Pt2 As Variant Dim OBJET As AcadEntity Dim TEST As Variant Dim x, As String Dim BLOC As AcadBlockReference Pt1 = ThisDrawing.Utility.GetPoint(, "PREMIER POINT") Pt2 = ThisDrawing.Utility.GetCorner(Pt1, "DERNIER POINT") Set objJeu = ThisDrawing.SelectionSets.Add("Jlqq4e") 'Selection de toutes les entites dans la fenetre objJeu.Select acSelectionSetWindow, Pt2, Pt1 For Each OBJET In objJeu If OBJET.ObjectName = "AcDbBlockReference" Then Set BLOC = OBJET TEST = BLOC.insertionPoint x = TEST(0) ' C'EST A PARTIR DE LA QUE JE BLOQUE MsgBox x End If Next objJeu.Delete MERCI POUR TOUTES VOS SULUTIONS
-
bonjour Dans mon dessin j'ai un bloc inséré x fois . il posséde un attribut que je veux incrementer automatiquement . Pour cela je selectionne tous les blocs (par un jeu de selection)qui m'intéresse et je lance ma routine mais évidement mon attribut s'incremente dans l'ordre du dernier bloc inseré au premier . He voila le probléme . Je voudrais qu'il s'incrémente selon l'option que je choisi , c'est à dire de gauche à droite et d'en haut en bas (par colonnes et rangées) etc . Pour cela je récupére le point d'insertion du bloc mais aprés il faudrait pouvoir trier les coordonnées en x et y pour que je puisse incrementer mes attributs selon l'option que choisi . si quelqu'un à la solution d'ailleur elle doit éxister merci d'avance .
-
bonjour Dans mon dessin j'ai un bloc inséré x fois . il posséde un attribut que je veux incrementer automatiquement . Pour cela je selectionne tous les blocs (par un jeu de selection)qui m'intéresse et je lance ma routine mais évidement mon attribut s'incremente dans l'ordre du dernier bloc inseré au premier . He voila le probléme . Je voudrais qu'il s'incrémente selon l'option que je choisi , c'est à dire de gauche à droite et d'en haut en bas (par colonnes et rangées) etc . Pour cela je récupére le point d'insertion du bloc mais aprés il faudrait pouvoir trier les coordonnées en x et y pour que je puisse incrementer mes attributs selon l'option que choisi . si quelqu'un à la solution d'ailleur elle doit éxister merci d'avance .
