Aller au contenu

Problème de Nom de bloc (VBA)


Messages recommandés

Posté(e)

Bonjour,

 

Je souhaiterais créer des bloc sur VBA avec une incrémentation de nom automatique ,ou créer des blocs anonymes, pour ne pas avoir de problème parce que le nom existe déjà.

 

Quelqu'un pourrait m'aider ?

:) merci d'avance

Posté(e)

Slt

A ma connaissance, on ne peut pas créer de bloc anonyme en vba.

Mais bloc anonyme ou pas, tu veux incrémenter alors, le problème reste entier.

 

En espérant que ce bout de code t'aide :

 Sub Bloc_i()
   
   Dim ObjBloc As AcadBlock
   Dim StrBloc As String
   Dim Pt0(1) As Double
   Dim i As Integer
   Dim ii As Integer
   Dim Pt1(2) As Double
   Dim Pt2(2) As Double
   Dim ObjLigne As AcadLine
   
   Pt0(0) = 0: Pt0(1) = 0
   Pt1(0) = 0: Pt1(1) = 0
   Pt2(0) = 50: Pt2(1) = 45
   StrBloc = "MonBloc"
   
   On Error Resume Next
   
   For i = 0 To ThisDrawing.Blocks.Count
       Set ObjBloc = ThisDrawing.Blocks(StrBloc)
       If Err Then
           Err.Clear
           Set ObjBloc = ThisDrawing.Blocks.Add(Pt0, StrBloc)
           Exit For
       Else
           For ii = 0 To ThisDrawing.Blocks.Count
               Set ObjBloc = ThisDrawing.Blocks(StrBloc & "_" & ii)
               If Err Then
                   Err.Clear
                   Set ObjBloc = ThisDrawing.Blocks.Add(Pt0, StrBloc & "_" & ii)
                   Exit For
               End If
           Next
       End If
   Next
   
End Sub

Ici, le bloc est vide, il faut rajouter les entités nécessaires à ton bloc.

Bonne continuation

 

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Posté(e)

voilà comment je procède

Je tente de renommer le bloc, si j'ai une erreur, je la gère en entrant dans une boucle " Do... Loop Until Err.Number <> "-2145386405" ",. Dans cette boucle je renomme le bloc de manière incrémentielle et hop le tour est jouer.

 

Je te laisse le code qui est contenu dans mon nettoyeur (à tester si tu ne le connais pas encore, hop un peu de promotion !!). En espérant que cela puisse t'aider.

 

 

Function modifier_nom_bloc()

Dim objBlock As AcadBlock
Dim IntN As Integer
Dim intI As Integer
Dim intJ As Integer
Dim strNom_bloc_ini As String
Dim strDebut As String
Dim strPrefixe As String
Dim strPremiere_lettre As String

'si erreur aller dans la partie gestion :

On Error GoTo gestion

'Demande à l'utilisateur le nom pour le préfixe du bloc
strPrefixe = Nparametres.TB_nom_bloc.Text
If strPrefixe = "" Then

'ne rien faire
Else


'compter le nombre de lettre du préfixe
intJ = VBA.Len(strPrefixe)



   'faire une boucle dans la collection des blocs
   For Each objBlock In ThisDrawing.Blocks



'test pour savoir si le bloc est un Xref
If objBlock.IsXRef Then
'Debug.Print "objBlock.Name", objBlock.Name, "objBlock.IsXRef", objBlock.IsXRef

Else

   strNom_bloc_ini = objBlock.Name
   
       'si les 12 permiers caractères du nom du bloc commence par...
       Select Case VBA.Left(strNom_bloc_ini, 12)
       
       '"*model_space ou "*paperspace"
       Case "*Model_Space", "*Paper_Space"
       'ne rien faire ce ne sont pas des blocs
       
       'si non
       Case Else
       
       'récupérer le prefixe du bloc de la longueur du préfixe indiqué par l'utilisateur
       strDebut = VBA.Left(strNom_bloc_ini, intJ)
       
           'tester si le bloc possède déjà le préfixe
           If strDebut <> strPrefixe Then
           
           'si erreur lire la ligne suivante
           On Error Resume Next
           
           'Ajouter le préfixe au nom du bloc
           objBlock.Name = strPrefixe & strNom_bloc_ini
           
               'Si un bloc porte dejà ce nom bis
               If Err.Number = "-2145386405" Then
               
               'Effacement de l'enregistrement de l'erreur
               'Err.Clear
               
               'initialiser la variable pour le suffixe variable
               IntN = 0
               
                   'Faire ça jusqu'à ce que ...
                   Do
                   
                   'Effacement de l'enregistrement de l'erreur
                   Err.Clear
                   
                   IntN = IntN + 1
                   'Ajouter le préfixe au nom du bloc + un suffixe incrémentiel pour éviter l'erreur si un bloc porte le nom du nom + le préfixe + intN-1
                   objBlock.Name = strPrefixe & strNom_bloc_ini & "_" & IntN
                   
                   '...l'erreur enregistré sous "-2145386405" soit invalidée
                   Loop Until Err.Number <> "-2145386405"
               
               End If 'Si un bloc porte dejà ce nom bis

           Else
           'DP "ne rien faire"
           End If 'tester si le bloc possède déjà le préfixe
       
       
       End Select
   
End If
   Next objBlock

End If

Exit Function
gestion:

Debug.Print Err.Number, Err.Description

End Function

 

 

Bon courage

 

[Edité le 12/5/2009 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é