XL 2019 Erreur 91

netparty

XLDnaute Occasionnel
Bonjour à tous

J'ai un soucis avec le code suivant :
VB:
Public Sub Gestion_Liste_Onglets()
'   *** Appliquer ordre des présentations
Dim obj_onglets As AcadLayouts
Dim obj_onglet As AcadLayout


Liste_Presentations.Clear

    If Option_Affiche_Acad.Value = True Then
    
        For index = 0 To AcadDoc.layouts.Count - 1
            Liste_Presentations.AddItem
        Next index
        
        For Each obj_onglets In AcadDoc.layouts
                Liste_Presentations.List(obj_onglets.TabOrder) = obj_onglets.Name
        Next obj_onglets
        
        Liste_Presentations.RemoveItem (0)
        
    Else
    
        For Each obj_onglets In AcadDoc.layouts
                If obj_onglets.TabOrder <> 0 Then
                    Liste_Presentations.AddItem obj_onglets.Name
                End If
        Next obj_onglets
    End If

Label_Nbre_Onglet = "Liste des présentations (" & Liste_Presentations.ListCount & ")"

Tbx_Nom_Onglet.Value = ""

End Sub

J'ai une erreur 91 mais je n'arrive pas à trouver d'ou cela vient.

Auriez-vous une idée pour moi

Merci d'avance
 

laurent950

XLDnaute Accro
Bonsoir @netparty

En Poste #15 :
* J'ai enlevé la variable tableau
* Géré la Gestion d'erreur
* Initialisé une fois
Set AcadApp = GetObject(, "AutoCAD.Application")
Set AcadDoc = AcadApp.ActiveDocument
* Récupérer directement l'ordre des présentation sans passer par une variable tableau
Liste_Presentations.AddItem onglet.Item(AcadDoc.Layouts(i).TabOrder).Name

Le code est fonctionnel à tester

VB:
Option Explicit
Dim AcadApp As Object
Dim AcadDoc As Object
'
Private Sub UserForm_Initialize()
' Excel (ListBox Clear)
    Liste_Presentations.Clear
' Autocad
    Set AcadApp = GetObject(, "AutoCAD.Application")
    Set AcadDoc = AcadApp.ActiveDocument

On Error Resume Next
' Check if AutoCAD application is open. If is not opened create a new instance and make it visible
    If AcadApp Is Nothing Then
        If MsgBox("AUTOCAD n'est pas ouvert" & vbLf & "Voulez-vous ouvrir AUTOCAD", 36, "Ouvrir AUTOCAD") = vbYes Then
            Set AcadApp = CreateObject("AutoCAD.Application")
            AcadApp.Visible = True
        End If
   End If
On Error GoTo 0

'   *** Renvois vers la fonction
'    * L'odre des Présentation dans Autocad (Par Defaulf Initialisation UsurForm)
    Gestion_Liste_Onglets
End Sub

Private Sub BP_Rafraichir_Click()
    UserForm_Initialize
End Sub

Private Sub Option_Affiche_Acad_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * L'odre des Présentation dans Autocad
    Gestion_Liste_Onglets
End Sub

Private Sub Option_Affiche_Alpha_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * D'une Liste Trié
    Gestion_Liste_Onglets
End Sub

Private Sub Btn_Appliquer_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * L'odre des Présentation dans Autocad
'    * D'une Liste Trié
    Gestion_Liste_Onglets
End Sub

Public Sub Gestion_Liste_Onglets()
'   *** Appliquer ordre des présentations
'   *** En fonction de :
'          * L'odre des Présentation dans Autocad
'          * D'une Liste Trié dans la ListeBox

' Excel (ListBox Clear)
    Liste_Presentations.Clear
' Titre
    Label_Onglet_Courant.Caption = "Présentation Courante: " & AcadDoc.GetVariable("CTAB")
' Variable
    Dim onglet As AutoCAD.AcadLayouts
    Dim i As Integer
        Set onglet = AcadDoc.Layouts
' Condition
    If Me.Option_Affiche_Acad = True Then
        ' Dans l'odre d'autocad
            For i = 0 To onglet.Count - 1
                If AcadDoc.Layouts(i).Name <> "Model" Then
                    Liste_Presentations.AddItem onglet.Item(AcadDoc.Layouts(i).TabOrder).Name
                End If
            Next i
    Else
        ' Liste Trié
            For i = 0 To onglet.Count - 1
                If AcadDoc.Layouts(i).Name <> "Model" Then
                    Liste_Presentations.AddItem AcadDoc.Layouts(i).Name
                End If
            Next i
    End If
' Affichage
    Label_Nbre_Onglet = "Liste des présentations (" & Liste_Presentations.ListCount & ")"
End Sub

Ps : Valider la bonne solution
 

netparty

XLDnaute Occasionnel
Bonsoir @netparty

En Poste #15 :
* J'ai enlevé la variable tableau
* Géré la Gestion d'erreur
* Initialisé une fois
Set AcadApp = GetObject(, "AutoCAD.Application")
Set AcadDoc = AcadApp.ActiveDocument
* Récupérer directement l'ordre des présentation sans passer par une variable tableau
Liste_Presentations.AddItem onglet.Item(AcadDoc.Layouts(i).TabOrder).Name

Le code est fonctionnel à tester

VB:
Option Explicit
Dim AcadApp As Object
Dim AcadDoc As Object
'
Private Sub UserForm_Initialize()
' Excel (ListBox Clear)
    Liste_Presentations.Clear
' Autocad
    Set AcadApp = GetObject(, "AutoCAD.Application")
    Set AcadDoc = AcadApp.ActiveDocument

On Error Resume Next
' Check if AutoCAD application is open. If is not opened create a new instance and make it visible
    If AcadApp Is Nothing Then
        If MsgBox("AUTOCAD n'est pas ouvert" & vbLf & "Voulez-vous ouvrir AUTOCAD", 36, "Ouvrir AUTOCAD") = vbYes Then
            Set AcadApp = CreateObject("AutoCAD.Application")
            AcadApp.Visible = True
        End If
   End If
On Error GoTo 0

'   *** Renvois vers la fonction
'    * L'odre des Présentation dans Autocad (Par Defaulf Initialisation UsurForm)
    Gestion_Liste_Onglets
End Sub

Private Sub BP_Rafraichir_Click()
    UserForm_Initialize
End Sub

Private Sub Option_Affiche_Acad_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * L'odre des Présentation dans Autocad
    Gestion_Liste_Onglets
End Sub

Private Sub Option_Affiche_Alpha_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * D'une Liste Trié
    Gestion_Liste_Onglets
End Sub

Private Sub Btn_Appliquer_Click()
'   *** Tri des présentations ordre alphanumérique
'   *** Renvois vers la fonction
' Applique l'odre en fonction de : "Option Bouton"
'    * L'odre des Présentation dans Autocad
'    * D'une Liste Trié
    Gestion_Liste_Onglets
End Sub

Public Sub Gestion_Liste_Onglets()
'   *** Appliquer ordre des présentations
'   *** En fonction de :
'          * L'odre des Présentation dans Autocad
'          * D'une Liste Trié dans la ListeBox

' Excel (ListBox Clear)
    Liste_Presentations.Clear
' Titre
    Label_Onglet_Courant.Caption = "Présentation Courante: " & AcadDoc.GetVariable("CTAB")
' Variable
    Dim onglet As AutoCAD.AcadLayouts
    Dim i As Integer
        Set onglet = AcadDoc.Layouts
' Condition
    If Me.Option_Affiche_Acad = True Then
        ' Dans l'odre d'autocad
            For i = 0 To onglet.Count - 1
                If AcadDoc.Layouts(i).Name <> "Model" Then
                    Liste_Presentations.AddItem onglet.Item(AcadDoc.Layouts(i).TabOrder).Name
                End If
            Next i
    Else
        ' Liste Trié
            For i = 0 To onglet.Count - 1
                If AcadDoc.Layouts(i).Name <> "Model" Then
                    Liste_Presentations.AddItem AcadDoc.Layouts(i).Name
                End If
            Next i
    End If
' Affichage
    Label_Nbre_Onglet = "Liste des présentations (" & Liste_Presentations.ListCount & ")"
End Sub

Ps : Valider la bonne solution
Bonjour @laurent950

J'ai testé et cela fonctionne.

Mais pour que cela fonctionne avec autocad2022 je dois désactiver autocad library 2019 et activer autocad library 2021.

Est-il possible d'activer les 2 référence dans un même projet pour le rendre compatible aussi bien sur autocad2019 ou 2022

Merci et bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 991
Membres
101 856
dernier inscrit
Marina40