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

Réponses
29
Affichages
903

Statistiques des forums

Discussions
312 162
Messages
2 085 858
Membres
103 005
dernier inscrit
gilles.hery