Erreur d'exécution '-2147024809 (80070057)' : obje
Bonsoir à tous
j'ai rajouté à mon code userform une liste déroulante sur combobox en cascade (Combobox1_CLIENT et Combobox10_DOSSIER)
- rajouté sub Alim_Combo
- rajouté sub Combobox1_CLIENT_Change()
- rajouté dans sub UserForm_Initialize() la partie sous les pointillés
et depuis
j'ai une erreur d'exécution lorsque je lance l'userform :
"erreur d'exécution '-2147024809 (80070057)' : objet spécifié introuvable"
voici les codes :
1/ pour lancer l'userform
[code][/Sub bouton1_clic()
UserForm.Show vbModeless
End Sub
code]
2/ le détail de l'userform
[code][/Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
Dim j As Integer
Dim Obj As Control
Dim NbLignes As Integer
Dim Ws As Worksheet
'---------------------------------------------------
'Procédure pour alimenter le Combobox10_DOSSIER
'Définit le Combobox à remplir
Set Obj = Me.Controls("ComboBox" & CbxIndex)
'Supprime les anciennes données
Obj.Clear
'Alimente le combobx initial (Combobox1_CLIENT)
If CbxIndex = 1 Then
'Boucle sur les lignes de la colonne C (à partir de la 3ème ligne)
For j = 3 To NbLignes
Obj = Ws.Range("C" & j)
'Remplit le combobox sans doublons
If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("C" & j)
Next j
Else
'Alimentation conditionnelle des autres combobox en fonction de ce qui est sélectionné
'dans le contrôle précédent :
'(la sélection du Combobox1_CLIENT définit le contenu du Combobox10_DOSSIER,...)
For j = 3 To NbLignes
If Ws.Range("C" & j).Offset(0, CbxIndex - 2) = Cible Then
Obj = Ws.Range("C" & j).Offset(0, CbxIndex - 1)
If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("C" & j).Offset(0, CbxIndex - 1)
End If
Next j
End If
'Enlève la sélection dans le combobox
Obj.ListIndex = -1
End Sub
Private Sub ComboBox1_CLIENT_Change()
'Remplissage Combobox10_DOSSIER
Alim_Combo 2, ComboBox1_CLIENT.Value
End Sub
Private Sub ComboBox1_CLIENT_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox1_CLIENT
ComboBox1_CLIENT.Clear
'derlignes = à la dernière ligne saisie de la feuille "Clients" à partir de la ligne 2,colonne 2
derlignes = Sheets("Clients").Cells(2, 2).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 2 de la feuille paramètre
ComboBox1_CLIENT.AddItem Sheets("Clients").Cells(NbLignes, 2)
Next
End Sub
Private Sub ComboBox2_GAMME_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox_GAMME
ComboBox2_GAMME.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 2,colonne 1
derlignes = Sheets("Notice").Cells(2, 1).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 1 de la feuille paramètre
ComboBox2_GAMME.AddItem Sheets("Notice").Cells(NbLignes, 1)
Next
End Sub
Private Sub ComboBox3_Past1_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox3_Past1
ComboBox3_Past1.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 2,colonne 3
derlignes = Sheets("Notice").Cells(2, 3).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 3 de la feuille paramètre
ComboBox3_Past1.AddItem Sheets("Notice").Cells(NbLignes, 3)
Next
End Sub
Private Sub ComboBox4_Past2_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox4_Past2
ComboBox4_Past2.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 2,colonne 3
derlignes = Sheets("Notice").Cells(2, 3).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 3 de la feuille paramètre
ComboBox4_Past2.AddItem Sheets("Notice").Cells(NbLignes, 3)
Next
End Sub
Private Sub ComboBox5_FORMAT_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox5_FORMAT
ComboBox5_FORMAT.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 2,colonne 5
derlignes = Sheets("Notice").Cells(2, 5).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 5 de la feuille paramètre
ComboBox5_FORMAT.AddItem Sheets("Notice").Cells(NbLignes, 5)
Next
End Sub
Private Sub ComboBox6_PELL_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox4_Past2
ComboBox6_PELL.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 13,colonne 1
derlignes = Sheets("Notice").Cells(13, 1).End(xlDown).Row
'à partir de la ligne 13 jusqu'à la dernière ligne
For NbLignes = 13 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 1 de la feuille paramètre
ComboBox6_PELL.AddItem Sheets("Notice").Cells(NbLignes, 1)
Next
End Sub
Private Sub ComboBox7_DECOUPE_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox7_DECOUPE
ComboBox7_DECOUPE.Clear
'derlignes = à la dernière ligne saisie de la feuille "Notice" à partir de la ligne 13,colonne 3
derlignes = Sheets("Notice").Cells(13, 3).End(xlDown).Row
'à partir de la ligne 13 jusqu'à la dernière ligne
For NbLignes = 13 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 3 de la feuille paramètre
ComboBox7_DECOUPE.AddItem Sheets("Notice").Cells(NbLignes, 3)
Next
End Sub
Private Sub ComboBox8_CODEFACT_Change()
'dès qu'un code de facturation est choisi, le PRIX se met à jour
recherche
End Sub
Private Sub recherche()
Dim NbLg As Long
Dim Cel As Range
Me.TextBox17_PRIX = ""
' Si Combobox8_CODEFACT = "" ou pas de choix code facturation on quitte
If Me.ComboBox8_CODEFACT.ListIndex = -1 Then Exit Sub
Application.ScreenUpdating = False
With Sheets("Tarifs") ' Page de travail
NbLg = .Range("A" & Rows.Count).End(xlUp).Row ' Nombre de ligne dans la base
' Recherche dans cette colonne la valeur de ComboBox8_CODEFACT
Set Cel = .Columns("a").Find(what:=Me.ComboBox8_CODEFACT, LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Me.Label25_PRIX.Visible = False
' Chaine trouvée
Me.TextBox17_PRIX = Cel.Offset(0, 3) ' On note le prix
Else
' Sinon on affiche le message
Me.Label25_PRIX.Visible = True
End If
End With
End Sub
Private Sub ComboBox8_CODEFACT_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox8_CODEFACT
ComboBox8_CODEFACT.Clear
'derlignes = à la dernière ligne saisie de la feuille "Tarifs" à partir de la ligne 2,colonne 1
derlignes = Sheets("Tarifs").Cells(2, 1).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 1 de la feuille paramètre
ComboBox8_CODEFACT.AddItem Sheets("Tarifs").Cells(NbLignes, 1)
Next
End Sub
Private Sub ComboBox9_CLIENTFACT_Enter()
'on indique nblignes et derlignes sont des variables
Dim NbLignes, derlignes As Variant
'on vide la zone de liste dont la propriété (name) = Combobox9_CLIENTFACT
ComboBox9_CLIENTFACT.Clear
'derlignes = à la dernière ligne saisie de la feuille "Clients2" à partir de la ligne 2,colonne 7
derlignes = Sheets("Clients2").Cells(2, 7).End(xlDown).Row
'à partir de la ligne 2 jusqu'à la dernière ligne
For NbLignes = 2 To derlignes
'on ajoute la valeur de la cellule située à la ligne nblignes, colonne 7 de la feuille paramètre
ComboBox9_CLIENTFACT.AddItem Sheets("Clients2").Cells(NbLignes, 7)
Next
End Sub
Private Sub CommandButton_ANNULER_Click()
Dim Confirmation As Variant
Confirmation = MsgBox("Confirmez-vous l'abandon de la saisie ?" & Chr(10) & "(Si vous confirmez, votre saisie ne sera pas enregistrée)", vbYesNo, "Confirmation d'annulation")
If Confirmation = vbYes Then
Unload UserForm
End If
End Sub
Private Sub CommandButton_VALIDER_Click()
Dim derlignes As Variant
' 1ère ligne disponible : ce code va parce qu'aucune ligne n'est vide au début (lignes 1 et 2 remplies)
derlignes = 1
Sheets("commandes").Select
Do While Cells(derlignes, 1) <> ""
derlignes = derlignes + 1
Loop
'saisie du numéro de commande, information alignée à droite
Cells(derlignes, 1) = TextBox4_NUMCOMMANDE
Cells(derlignes, 1).HorizontalAlignment = xlRight
Cells(derlignes, 1) = Format(TextBox4_NUMCOMMANDE.Value, "00000") * 1
'saisie de la date, information alignée à droite
Cells(derlignes, 2) = TextBox3_DATE
Cells(derlignes, 2) = Date
Cells(derlignes, 2).HorizontalAlignment = xlRight
'saisie du nom du CLIENT
Cells(derlignes, 3) = ComboBox1_CLIENT
'saisie du nom du CLIENT FINAL
Cells(derlignes, 4) = ComboBox9_CLIENTFACT
'saisie du dossier
Cells(derlignes, 5) = ComboBox10_DOSSIER
'saisie de la QUANTITE, information alignée à droite
Cells(derlignes, 6) = TextBox5_QTE
Cells(derlignes, 6).HorizontalAlignment = xlRight
'saisie de la GAMME
Cells(derlignes, 7) = ComboBox2_GAMME
'saisie de la Pastille 1
Cells(derlignes, 8) = ComboBox3_Past1
'saisie de la Pastille 2
Cells(derlignes, 9) = ComboBox4_Past2
'saisie de la FORMAT
Cells(derlignes, 10) = ComboBox5_FORMAT
'saisie de la PELLICULAGE
Cells(derlignes, 11) = ComboBox6_PELL
'saisie de la DECOUPE
Cells(derlignes, 12) = ComboBox7_DECOUPE
'saisie du DELAI
Cells(derlignes, 13) = TextBox8
'saisie du RETIRAGE / N° PLANCHE
Cells(derlignes, 14) = TextBox6
'saisie du RETIRAGE / N° COMMANDE
Cells(derlignes, 15) = TextBox7
'saisie de la DATE de VALIDATION
Cells(derlignes, 16) = TextBox9
'saisie de la REF PLANCHE
Cells(derlignes, 17) = TextBox10
'saisie de la DATE EXPEDITION
Cells(derlignes, 18) = TextBox11
'saisie des OBSERVATIONS
'pour pouvoir écrire plusieurs lignes, dans userform mettre MULTILINE à TRUE
'pour sauter une ligne : CTRL+ENTREE
Cells(derlignes, 19) = TextBox12
'saisie du CODE FACTURATION
Cells(derlignes, 20) = ComboBox8_CODEFACT
'saisie du PRIX
Cells(derlignes, 21) = TextBox17_PRIX
Cells(derlignes, 21) = Format(TextBox17_PRIX.Value, "#,00") * 1
'saisie des FRAIS MAQUETTE
Cells(derlignes, 22) = TextBox13
Cells(derlignes, 22) = Format(TextBox13.Value, "#,00")
'saisie de la REMISE
Cells(derlignes, 23) = TextBox14
'saisie des FRAIS DECOUPE
Cells(derlignes, 24) = TextBox15
'saisie du PORT
If TextBox16.Value <> Empty Then Cells(derlignes, 25) = TextBox16 _
Else Cells(derlignes, 25) = 0
'calcul TOTAL HT
Cells(derlignes, 26) = TextBox18_TOTALHT
Cells(derlignes, 26) = Format(TextBox18_TOTALHT.Value, "#,00") * 1
'calcul TTC
Cells(derlignes, 27) = TextBox18_TOTALHT * 1.2
Unload UserForm
End Sub
Private Sub TextBox13_Change()
'MAQUETTE participe au TOTAL HT
calculHT
End Sub
Private Sub TextBox14_Change()
'REMISE participe au TOTAL HT
calculHT
End Sub
Private Sub TextBox15_Change()
'DECOUPE participe au TOTAL HT
calculHT
End Sub
Private Sub TextBox16_Change()
'PORT participe au TOTAL HT
calculHT
End Sub
Private Sub TextBox17_PRIX_Change()
'PRIX Code Facturation participe au TOTAL HT
calculHT
End Sub
Private Sub calculHT()
TextBox18_TOTALHT = (Val(TextBox17_PRIX.Value) + Val(TextBox13.Value) - Val(TextBox14.Value) / 100 * Val(TextBox17_PRIX.Value) + Val(TextBox15.Value) + Val(TextBox16.Value))
End Sub
Private Sub UserForm_Initialize()
'N° commande automatique
Me.TextBox4_NUMCOMMANDE.Value = Sheets("Commandes").Range("A" & Rows.Count).End(xlUp).Value + 1
'Date automatique
Me.TextBox3_DATE.Value = Date
'------------------------------------------------------
'Procédure pour liste déroulante sur Combobox_CLIENT / Combobox_DOSSIER en cascade
'Les données sont dans les colonnes C et E de l'onglet COMMANDES
'La procédure effectue un remplissage conditionnel du Combobox_DOSSIER en fonction de ce qui est sélectionné
'dans le Combobox_CLIENT (combobx précédent) :
'la sélection du Combobox1_CLIENT (données colonne C) définit le contenu du Combobox10_DOSSIER
'(données colonne E)
Dim Ws As Worksheet
Dim NbLignes As Integer
'Définit la feuille contenant les données
Set Ws = Worksheets("Commandes")
'Définit le nombre de lignes dans la colonne C
NbLignes = Ws.Range("C65536").End(xlUp).Row
'Remplissage du Combobox1_CLIENT
Alim_Combo 1
End Sub
code]
Je veux bien votre aide !!