AutoCAD : Automatiser attout-rechercher remplacer-attin

gricatti
Contributor

AutoCAD : Automatiser attout-rechercher remplacer-attin

gricatti
Contributor
Contributor

Bonjour à tous, je vais expliquer ce que je fais, et en arriver à ma question:

 

Actuellement j'ai 2000 fichiers à traiter et 10000 "rechercher / remplacer" de valeurs d'attributs dans des blocs. 

Pour le moment, je fais (pour chaque fichier) un attout, j'ouvre cela sous excell, je lance une routine Microsoft visual basic pour applications, j'enregistre le .txt et je fais un attin.

C'est long et fastidieux, je me suis mis en quête de:

 

Un lisp (.lsp) ou un script (.SCR) me permettant de désigner un dossier de dwg, exporter tous les attributs de blocs de l'espace objet (un par un), faire un Rechercher/Remplacer dans ce texte (Liste de couples fournie en xls ou txt ou peu importe), et réimporter cela dans le dwg (par attin par exemple). Et BATCH!

Auriez vous quelque chose sous le coude qui permet de faire cela? Y a t il une autre méthode plus simple?

 

Voici le code visual basic pour Rechercher/Remplacer dans excell: (Ce code est une partie repris d'un forum "extendoffice" sur internet, auquel j'ai demandé à ChatGPT de le compléter pour: trouver la liste des couples dans un fichier externe / une feuille / une plage, et définir la plage d'origine automatiquement sans sélection et marquer en VERT les valeurs d'attributs modifiées après le script).

 

 

Sub MultiFindNReplace()
    Dim Rng As Range
    Dim InputRng As Range, ReplaceRange As Range
    Dim ModifiedCells As Range ' Plage de cellules modifiées
    
    On Error Resume Next ' Ignorer les erreurs si aucune cellule n'est modifiée
    
    ' Sélectionnez la plage d'origine
    'Set InputRng = Application.Selection
    'Set InputRng = Application.InputBox("Original Range ", "KutoolsforExcel", InputRng.Address, Type:=8)
    Set InputRng = ActiveSheet.UsedRange
    
    ' Sélectionnez la plage de remplacement
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Users\gricatti\DOCS\01-PRODUCTION\Liste equipements.xlsx")
    Set ReplaceRange = wb.Sheets("Formatage 070").Range("$C$2:$D$95")
    
    Application.ScreenUpdating = False
    
    ' Parcours de la plage de remplacement
    For Each Rng In ReplaceRange.Columns(1).Cells
        ' Recherche et remplace dans la plage d'origine
        InputRng.Replace What:=Rng.Value, Replacement:=Rng.Offset(0, 1).Value, LookAt:=xlWhole, MatchCase:=False
        
        ' Vérifier si une cellule a été modifiée
        Dim FoundCell As Range
        Set FoundCell = InputRng.Find(What:=Rng.Offset(0, 1).Value, LookAt:=xlWhole, MatchCase:=False)
        If Not FoundCell Is Nothing Then
            ' Ajouter la cellule modifiée à la plage des cellules modifiées
            If ModifiedCells Is Nothing Then
                Set ModifiedCells = FoundCell
            Else
                Set ModifiedCells = Application.Union(ModifiedCells, FoundCell)
            End If
        End If
    Next
    
    ' Appliquer la couleur de fond verte aux cellules modifiées
    If Not ModifiedCells Is Nothing Then
        ModifiedCells.Interior.Color = RGB(0, 255, 0) ' Couleur verte
    End If
    
    Application.ScreenUpdating = True
    On Error GoTo 0 ' Réactiver la gestion des erreurs
End Sub

 

 


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:

Automatiser attout-rechercher remplacer-attin

0 J'aime
Répondre
Solutions acceptées (2)
280 Visites
3 Réponses
Replies (3)

didier_lourdelle
Advocate
Advocate
Solution acceptée

Avez-vous pensé à un scénario selon ce principe :
une ou des lignes de commande comme ci dessous...

(command "attedit" "n" "n" "" "" "" "AncienValeur" "NouvelleValeur")

Regarde la commande 'attedit' dans l'aide, mais possibilité de faire des changements dans une étiquette spécifique et ou un nom de bloc précis.


Après cette ligne de commande, Autolisp passe très bien dans un script.



EESignature



Didier Lourdelle Consultant, Formateur & Développeur CAO/DAO EDWGPROS

Expertises : AutoCAD, AutoCAD LT, AutoCAD Electrical
Langages : VB.NET, Visual LISP, VBA, Diesel (Direct Interpretively Evaluated String Expression Language)
Base de données relationnelle : Microsoft Access, SQL Server, MySQL
Environnements de développement : Microsoft Visual Studio, Visual Studio Code, Editeur Visual LISP
Utilisations :AutoCAD MAP, Civil 3D, AutoCAD Architecture, AutoCAD MEP, Plant 3D, Civil 3D, RasterDesign, VehicleTracking, Autodesk Recap, Fusion 360, NavisWorks, Revit
Mon blog : Trucs & Astuces Sur AutoCAD LT !

 

0 J'aime

didman78
Enthusiast
Enthusiast
Solution acceptée

bonjour je suis étonné de la longueur de ce code excel pour faire une recherche remplacer

- une macro devrait suffir ou hrecherche v recherche devrait faire l affaire

 

si il existe des solutions bien complexe mais ça sort du cadre gratuit dans ce forum je pense

n est ce pas didier ?

 

Autocad ce programme super bien En vba

mais il faut trouver une personne qui sache le faire. 

apres ces fado tu importe une fois la trame de 

tes blocs attributs avec les handles

dans excel

la mise en firme base de dinnés de ton autocad

tu reprend cette mise en firme dans excel pour effectuer tes remplacement et en l ai injectant ça modifiera tous les attributs autocad

 

j ai fait l opération sur des milliers d attribut

ça fontbonne super bien,

par contre je n ai jamais trouvé une personne ou payer une appli pour le faire en VBA

 

il ce peu que je le demande sous peu

une personne m a de nouveau fait cette demande

 

si tu a plusieurs fichier dwg, normalement en vba il travaillera tant que le programmeur ne lui dise de sortir par exemple

apres avoir parcourus tous les handles

idem pour excel

derniere cellule pleine et hop

mais ça c est une histoire de prog

0 J'aime

patrick.emin
Alumni
Alumni

Bonjour @gricatti 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Cela facilitera la navigation de nos utilisateurs qui pourront directement atteindre la solution

Sachez qui si vous avez marqué une réponse comme solution par erreur, vous pouvez annuler ce marquage en cliquant sur le menu du fil (les trois points verticaux) et choisir "pas la solution"
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime

Saisir un nom de produit