Thelduin Posté(e) le 13 juillet 2020 Posté(e) le 13 juillet 2020 Bonjour à tous, J'ai besoin de votre aide pour l'exploitation de fichier CSV sur Excel, je suis un peu perdu, et je me demande si il faudrait pas que je passe par une routine VBA (j'y connais rien en VBA) pour faire ce que je veux.En fait, je fais régulièrement des carnets de coupes de coffrage (je suis en BE Structure). Ces coupes sont tracées dans des cadres de la taille d'un A3. Ce cadre est un bloc dans lequel je mets le nom de chaque coupe (attributs du bloc). J'arrive donc a extraire dans un fichier CSV les noms des coupes de chacune des pages de mon carnet. Seulement voilà, quand j'importe ce CSV dans Excel pour créer la table des matières du carnet, je ne sais pas comment faire pour que cela suive la mise en page déjà présente. Ci dessous une capture de mon excel et je vous détail ce que je voudrai faire : Vous pouvez voir sur l'image que j'ai 17 lignes disponibles, sur 2 colonnes H et Q, les autres colonnes étant réservées aux indices (ça permet de faire un A3 propre). Ce sont dans ces 2 colonnes que doivent apparaître les noms des coupes. Or, excel ne se préoccupe pas de la mise en page quand j'importe un CSV, donc si le CSV a plus de 17 lignes, je suis marron. Je sais pas comment faire pour qu'à partir de la 18e ligne, les données s'insèrent sur la 2e colonne disponible (la colonne Q). Ci-dessous un exemple de table des matières remplie (à la main ! ce qui est un peu long) : J'espère avoir été suffisamment claire pour que vous puissiez m'apporter votre aide, n'hésitez pas à me demander plus de précision si besoin :) Merci d'avance :)
didier Posté(e) le 13 juillet 2020 Posté(e) le 13 juillet 2020 Coucou Je ne comprends pas bien la question du coup je vais répondre quelque chose d'ultra simple : Dans un classeur il y a le prototype de la présentation mais avec les colonnes H et Q videsDans le CSV extrait (on ne sait pas ce qu'il contient) il suffira de copier la colonne concernée pour la coller dans la colonne mise en formeEn choisissant de ne copier que les valeurs pas la mise en forme Il est possible que j'aie mal compris... Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Thelduin Posté(e) le 13 juillet 2020 Auteur Posté(e) le 13 juillet 2020 Bonjour Didier, Je vais essayer de poser ma question autrement.Admettons, j'ai un fichier CSV qui contient 25 lignes avec une colonne pour le numéro de page et une 2e colonne pour le(s) nom(s) de coupe(s) sur la page : 01,CH1 02,CH2 03,CH3 . . . . . 25,CH25Est-il possible de faire en sorte que les lignes 1 à 17 du CSV s'insèrent dans la colonne H et les lignes 18 à 25 s'insèrent dans la colonne Q autrement qu'en faisant un copier coller des valeurs après avoir importé le fichier CSV dans un Excel vierge ? En d'autres termes, est-il possible d'automatiser l'importation du CSV pour que les données suivent la mise en page ?
Thelduin Posté(e) le 13 juillet 2020 Auteur Posté(e) le 13 juillet 2020 En fait le but ici est de pouvoir remplir l'excel automatiquement après avoir fini mon carnet sur AutoCAD, car pour le moment, on rempli la table des matières à la main, ce qui peux vite devenir long et fastidieux dès qu'on a beaucoup de coupes/pages.Du coup j'ai eu comme idée de faire une extraction de données AutoCAD en CSV pour l'inclure dans excel. Peut-être suis-je parti sur une mauvaise piste ?
didier Posté(e) le 14 juillet 2020 Posté(e) le 14 juillet 2020 Coucou Oui c'est possibleTransmets un fichier DWG avec les attributs à mettre en place et la routine qui fabrique le CSVIl faut savoir que ça va être bien plus lent qu'actuellement car la gestion d'Excel depuis LSP est moins efficace que la création de CSV Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Thelduin Posté(e) le 14 juillet 2020 Auteur Posté(e) le 14 juillet 2020 Ah mais je passe pas par une routine pour la création du CSV, je passe pas la fonction extractdonnees d'AutoCADJ'essayerai de faire un lisp pour ça pour vous le transmettre, mais j'avoue que là ça dépasse mes compétences en lispÉvidemment, je ne suis pas au bureau aujourd'hui, et je n'ai pas AutoCAD à la maison, du coup je reviens vers vous d'ici la fin de la semaine avec les fichiers
Thelduin Posté(e) le 15 juillet 2020 Auteur Posté(e) le 15 juillet 2020 Bonjour ! Je reviens vers vous car j'essaye désespérément de faire un lisp pour extraire les données que je veux, mais j'ai quelques soucis avec la fonction "-extractdonnees" d'AutoCAD.La fonction utilise un fichier gabarit DXE. Ne sachant pas comment créer un tel fichier, j'ai utilisé la fonction "extractdonnees" (sans le tiret) qui est la même mais avec des boîtes de dialogues. Bref. Une fois arrivé à la fin de l'extraction, la fonction demande si on veut intégrer un tableau dans AutoCAD ou si on veut enregistrer les données dans un fichier externe (ce qui m'intéresse du coup !). AutoCAD m'a donc généré un fichier CSV. Jusque là, pas de soucis. Je me suis alors retrouvé avec un fichier DXE qui a enregistré le fait qu'il faut extraire les données dans le fichier "exemple.CSV". Du coup, quand j'utilise la fonction "-extractdonnees" avec comme fichier gabarit le DXE créé précédemment, et bien il extrait les données dans le fichier "exemple.csv". Et c'est là que ça me dérange. J'aimerai pouvoir créer un nouveau fichier (ou remplacer un existant) à CHAQUE extraction. Comment faire ? Cela semble venir du DXE mais je n'ai aucune idée de comment le modifier. Est-ce que quelque chose m'aurait échappé lors de la création du DXE avec "extractdonnees" ? Je sais qu'on s'éloigne pas mal de la rubrique VBA du forum, mais je préfère poser ma question ici plutôt que de créer un nouveau sujet.
Curlygoth Posté(e) le 12 août 2020 Posté(e) le 12 août 2020 Bonjour, Je sais pas si je peux t'aider car le lisp. (J'ai du mal... (Peut être trop de parenthèse ?) Par contre en VBA, je sais créer des fenetres pour générer et nommer tes présentations plutot que de le faire manuellement.et les parcourirs pour recupérer des infos dans tes blocs 'parcours les présentations (meme l'onglet Model) For each layout in ThisDrawing.Layout If layout.name = "Model" then 'si la présentation s'appelle Model on passe else For b = 0 To ThisDrawing.PaperSpace.Count - 1 'on parcours les objets qui sont dans la présentation Set Entity = ThisDrawing.PaperSpace.Item(B) If Entity.ObjectName = "AcDbBlockReference" Then 'on verifier que l'objet est un bloc Set blockRefObj = Entity if blockRefObj.EffectiveName = "NOM_BLOC" then 'on verif le nom du bloc de ton cartouche 'code sur ton bloc For Each Att In blockRefObj.GetAttributes 'on parcours les attribut du bloc If Att.TagString = "ATTRIBUT1" Then 'On rechecrhe l'attribut de nom ATTRIBUT1 VAR1 = Att.TextString 'on met les valeurs dans une variable temporaire Else End If If Att.TagString = "ATTRIBUT2" Then 'On rechecrhe l'attribut de nom ATTRIBUT2 VAR2 = Att.TextString 'on met les valeurs dans une variable temporaire Else End If '.... etc c'est vrai c'est pas sexy mais tu peux te faire une fonction avec l'attribut a extraire par exemple ! Next Att TEXTE = TEXTE & VAR1 & ";" & VAR2 & chr(10) 'donc tu mets par exemple tes colonnes separées par un ";" VAR1 = "" VAR2 = "" else end if else end if end if next 'EDIT On peut creer un CSV ou le mettre directement dans Excel ! CHEMIN = ThisDrawing.Path & "\" & "Mon fichier texte dans le répertoire que le dessin.csv" Set fs = CreateObject("Scripting.FileSystemObject") Set A = fs.CreateTextFile(CHEMIN, True) 'on créé le fichier A.WriteLine TEXTE 'On ecris dans le fichier A.Close 'on ferme le fichier TEXTE = "" Voila je ne l'ai pas tester mais bon si tu as des soucis on développera pour télécharger le module :Lien vers module VBA oui contrairement au lisp le vba n'est pas natif dans autocad mais les posibilités sont les mêmes (ou à quelques détails prêt ?) Mon site Web (en cours de construction) : Site DA-CODE de @didier
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