Aller au contenu

SF.Designer

Membres
  • Compteur de contenus

    103
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par SF.Designer

  1. Petite solution en fin de fonction : ; Fermer Fenetre Texte (defun CloseWindowText () (textscr) ; Basculer sur fenêtre de texte (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") "SendKeys" "%{F4}")) ; Fermer fenêtre de texte
  2. Salut, en un peu plus simple 😉 (defun load-lsp () (foreach file (vl-directory-files "C:/.../" "*.lsp" 1) (load file (strcat file " did not load")) )) (load-lsp)
  3. Merci Didier Finalement en testant une autre solution, j'ai trouvé mon graal hehe '*** Comptage des occurrences des valeurs uniques dans la colonne D Dim lastRow, i, cellValue Dim uniqueDict lastRow = objSheet.Cells(objSheet.Rows.Count, "D").End(-4162).Row ' -4162 = xlUp Set uniqueDict = CreateObject("Scripting.Dictionary") ' Parcourir la colonne D et compter les occurrences For i = 2 To lastRow cellValue = objSheet.Cells(i, 4).Value ' Colonne D est la 4ème colonne If Not uniqueDict.Exists(cellValue) Then uniqueDict.Add cellValue, 1 Else uniqueDict(cellValue) = uniqueDict(cellValue) + 1 End If Next ' Écriture des résultats dans les colonnes F et G Dim outputColumn outputColumn = 6 ' Débuter à la colonne F (6ème colonne) For Each dictKey In uniqueDict.Keys ' Écrire la valeur unique en ligne 1 objSheet.Cells(1, outputColumn).Value = dictKey ' Écrire le nombre d'occurrences en ligne 2 objSheet.Cells(2, outputColumn).Value = uniqueDict(dictKey) ' Ajouter une bordure autour des cellules contenant les valeurs With objSheet.Cells(1, outputColumn).Borders .LineStyle = xlContinuous .Weight = xlMedium End With With objSheet.Cells(1, outputColumn).Font .Bold = True .Name = "Verdana" .Size = 11 End With ' Ajouter une bordure fine autour des cellules contenant les résultats With objSheet.Cells(2, outputColumn).Borders .LineStyle = xlContinuous .Weight = xlThin End With With objSheet.Cells(2, outputColumn).Font .Name = "Verdana" .Size = 10 End With outputColumn = outputColumn + 1 ' Passer à la colonne suivante Next
  4. Pour le moment le script fait : - Copie des fichiers DAT dans le dossier de destination - Modification des DAT en excel, avec traitement "Trier, bordure etc..." - Réunir les fichiers en un seul Excel. Maintenant j'aimerais comptabiliser les éléments commun de la colonne D et inscrire automatique le résultat comme suis : En F2 le code 102 (cellule D2), en F3 le nombre d'occurrence de 102 trouvé. En G2 le code suivant le 102 dans le tableau, ici 210, en G3 le nombre d'occurrence de 210 trouvé. En H2 le code suivant..... H3 son nombre Se traitement se fait avant de réunir toutes les feuilles dans un classeur commun
  5. Bonjour, Non en fait c'est un VBS externe, une fois lancer je dois sélectionner un dossier avec fichier source DAT, puis un dossier de destination et ca mouline !
  6. Bonjour a tous, Pour info, c'est la première fois que je met le nez dans vbs/vba, soyez indulgent mais critique. Bon je n'arrive pas a mettre la dernière touche sur un script vbs, après moulte recherche et surtout après avoir testé plein de solutions différentes. Nous avons des fichiers créés par le Progiciel qui viens sur Autocad, qui sont des fichier .DAT, sous cette forme : J'arrive a les transformer en Excel, a les mettre en forme, trier, puis a les réunir. J'aimerais, avant de les réunir, procédé a une boucle qui me comptabilise les élément aillant le même code. J'arrive pour le moment a détecter la valeur et le nombre de la première occurrence, sélectionner la cellule suivante puis détecter son nombre. Je n'arrive pas a mettre en place une boucle sur la deuxième détection, afin que cela passe a la case suivante et ainsi de suite jusqu'à une cellule vide. Le bout de code qui me pose problème : '*** Comptage ' Nombre de cellules valeur D2, premiére occurence objCellsCodeStart = objSheet.range("D2").Value objSheet.range("F2") = objCellsCodeStart objCellsCodeStartCompteur = .WorksheetFunction.CountIf(.Range("D:D"), objCellsCodeStart) objSheet.range("F3") = objCellsCodeStartCompteur '*** boucle a faire avec cette partie de code objCellsCodeLoop = objSheet.range("D2").Offset(objSheet.range("F3").Value, 0) 'Ligne suivant la premiére occurence trouvé objSheet.range("F2").Offset(0, 1) = objCellsCodeLoop objCellsCodeLoopCompteur = .WorksheetFunction.CountIf(.Range("D:D"), objCellsCodeLoop) objSheet.range("G3") = objCellsCodeLoopCompteur '*** boucle a faire avec cette partie de code Le but étant d'inscrire : - F2 la première occurrence, F3 son nombre - G2 la deuxième occurrence, G3 son nombre - H2 ..., H3 ... - Etc........ La boucle doit s'arrêter quand il tombe sur la première cellule vide a la fin de la colonne D. Je vous joins aussi le script entier et 2 fichier DAT pour test. ExtractDAT.vbs CH1_A.dat CH2_A.dat CH3_A0.dat
  7. Si tu as beaucoup de routine a charger, tu peux mettre dans ton fichier de chargement (.mnl), (defun load-lsp () (foreach file (vl-directory-files "C:/XXX" "*.lsp" 1) (load file (strcat file " did not load")) )) (load-lsp) Ca te chargera toute les routines de ton dossier.
  8. Bon voici le version pour le moment "définitive"... Print.dclPrint.lsp Je suis ouvert a toutes critiques qui me permettrai de fluidifier, voir accelerer ce code !
  9. Bonjour Luna, (petite excuse, déplacement pro et j'ai zappé mon DD de dév) Alors voila le lisp et dcl (je sais que j'ai pas mal de taf de concaténation etc, et de mise en forme du dcl) Merkiiii PrintV2.lsp PrintV2.dcl
  10. J'en profite aussi pour vous demander comment ce fait il que sur cette fenêtre, Si je sélectionne NOIR, TEINTAGE et que je me rend compte qu'il ne me faut pas le NOIR, je le désélectionne. Le toggle NOIR me renvoi quand même la valeur 1 et non pas 0.
  11. Bonjour a tous, Petite demande afin de savoir si on peut écrire cela d'une autre façon (plus propre). La validation du OK de ma fenêtre de sélection (defun InitAllPrintOK () (cond((= PlotNB 1)(setq Plotstyle "NB")(PRT))) (cond((= PlotNBB 1)(setq Plotstyle "NBB")(PRT))) (cond((= PlotNBV 1)(setq Plotstyle "NBV")(PRT))) (cond((= PlotNBBV 1)(setq Plotstyle "NBBV")(PRT))) ; --- (cond((= PlotTT 1)(setq Plotstyle "TT")(PRT))) (cond((= PlotTTB 1)(setq Plotstyle "TTB")(PRT))) (cond((= PlotTTV 1)(setq Plotstyle "TTV")(PRT))) (cond((= PlotTTBV 1)(setq Plotstyle "TTBV")(PRT))) ; --- (cond((= PlotTTPRI 1)(setq Plotstyle "TTPRI")(PRT))) (cond((= PlotTTBPRI 1)(setq Plotstyle "TTBPRI")(PRT))) (cond((= PlotTTVPRI 1)(setq Plotstyle "TTVPRI")(PRT))) (cond((= PlotTTBVPRI 1)(setq Plotstyle "TTBVPRI")(PRT))) ; --- (cond((= PlotCO 1)(setq Plotstyle "CO")(PRT))) ) ; --------------------- (defun InitAllPrintCancel () (if (= userclick nil)(princ "\n--- Impression annulée ---\n")) (defun PRT () (vl-cmdf "._-PLOT" "_YES" "MODEL" PlotType PlotLimit "_MILLIMETERS" PlotOrientation "_NO" "_EXTENTS" Plotscale "_CENTER" "_YES" PlotStyle "_YES" "_WIREFRAME" "_NO" "_NO" "_YES")) ) Merci d'avance.
  12. Bonjour, Pour ouvrir : (defun OpenWindowText () (textpage) ; Ouvrir fenêtre de texte ) Pour fermer : (defun CloseWindowText () (textscr) ; Basculer sur fenêtre de texte (vlax-invoke-method (vlax-get-or-create-object "WScript.Shell") "SendKeys" "%{F4}"))
  13. Ce doit être faisable avec : - Bloc + Paramètre d'étirement + Attribut avec récupération de la longueur
  14. Si ca peut aider, voici une fenêtre qui m'a bien pris la tête a aligner. Il faut vraiment tous mettre dans des colonnes et des lignes, des colonnes dans les lignes, des lignes dans les colonnes (piouf), puis jouer sur les marges et alignements ! Print.dcl
  15. Pour compléter REBCAO Je joins en plus mon fichier .LIN qui vas avec le DWG posté plus haut. CREATION TYPE DE LIGNE ------------------------------------------------------------------------------------------------------------- EAU_CHAUDE_EC,Eau chaude EC ---- EC ---- EC ---- EC ---- A,12.7,-5.08,["EC",STANDARD,S=2.54,U=0.0,X=-2.54,Y=-1.27],-5.08 ------------------------------------------------------------------------------------------------------------- 12.7 = longueur de la partie visible du trait (cette longueur est multipliée par l’échelle globale x échelle de type de ligne de l’objet) -5.08 = longueur de l’espace vide car valeur négative. Problème quel chiffre utiliser ? Utilisez 2.54 par caractère ; soit 5.08 pour 2 ; 7.62 pour 3 ; 10.16 pour 4 … [la définition du texte entre crochets] "EC",= le texte visible dans le trait Standard = nom du style de texte , vérifiez la police appliquée ! utilisez ARIAL.ttf ou ROMANS.SHX Si aucun style n'est défini, AutoCAD LT utilise le style courant. S=2.54 = échelle appliquée au texte U=0 ; = Angle du texte ici 0 donc texte toujour horizontal R= indique la rotation relative dans les exemples ci-dessous R est absent par défaut angle = 0 Position XY du texte. X= -2.54 = position en X du départ du texte Y = -1.27 = position en Y -5.08 : créer un espace après le texte @SF-Linetype.lin
  16. Bonjour, Tu trouvera peut-être ton bonheur la dedans 😉 Faut que je m'y remette et que j'affine tous ca ! @SF-Linetype.dwg
  17. Il me semble que "LWconvert.lsp" de Maitre Gilles fait ce que tu demande !!! LWConvert.lsp
  18. Ou sinon avant une commande tu tape " ._- " (Point, Underscore, tiret) et tu aura tout en ligne de commande !!!
  19. Qleader
  20. Salut, Il y a ce site qui fonctionne trés bien et avec lequel tu peux exporter ta feuille de route en plusieurs formats et où tu peux mettre beaucoup de point intermédiaire. https://kurviger.de/fr Avant il y avait "Microsoft Autoroute" qui était juste génial, dont tu peux encore trouver des versions en abandonware, mais qui aura quelques bugs car plus mis a jour !
  21. Bon voila le résultat après quelques recherches approfondis (Merci Olivier de m'avoir mis sur la voie) : Malheureusement je ne comprend pas, le menu s'affiche sur certains Autocad et pas sur d'autres. J'ai beau retourner le problème dans tous les sens, ca me sort par les yeux ... (defun ChargeMenu (/ n) (setq n 1) (while (< n 24) (if (menucmd (strcat "P" (itoa n) ".1=?")) (setq n (1+ n)) (progn (foreach x '(".pop1") (menucmd (strcat "p" (itoa n) "=+" (car sf_listmenu) x)) (setq n (1+ n)) ) (setq n 25) )))) (if (menugroup "@SF") (progn (setq sf_listmenu '("@SF")) (ChargeMenu) ))
  22. Personne n'aurait une petite idée ?
  23. Je ne comprend pas ! Le profil est déja charger sur leurs autocad... Et les autres modifications du profil se répercute bien.
  24. Bonjour a tous, Je me retrouve devant un problème que je n'arrive pas a résoudre. J'ai mon profil personnalisé qui se trouve sur un serveur pour ma boite, avec barre d'outils pour les différents lisp, palettes d'insertion de blocs et différentes choses, qui est chargé sur tous les postes dessinateur de l'entreprise grâce au profil et fichier *.mnl associé. Tout fonctionne nickel jusqu'à présent, et se recharge normalement sur tous les postes quand j'y effectue des modification (Ajout de barre d'outils ou d'élément de barre d'outils, ajout de palette, etc...) Certain sont réfractaire aux palettes et j'ai donc voulu créé un menu dans mon fichier de personnalisation partiel avec des liens de fichiers pour qu'ils puissent les ouvrir. Malheureusement ce menu n'apparait pas sur leurs autocad !!!
  25. Ou peux être remplacer les détails de chaque fois qu'il lance un script, par un carré noir dans l'invité de commande, comme le font certaines installations silencieuses.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité